格式化字符串结合程序执行,更深入理解的一次实践.
本题只有一次格式华字符串漏洞利用机会且写入字节有限,题目保护:
只开了NX,我们考虑利用任意写将printf函数地址改为system,但是少了一个“/bin/sh\x00”
根据函数正常的执行流,函数执行前会调用init类初始化函数,执行后会调用fini.array[]数组里地址对应函数。所以如果我们将其改为main函数,那么可以再次输入参数“/bin/sh\x00”拿到shell,
现在问题是怎么改:
我发现一种好理解的方式
我们先看wp1:
from pwn import *
sh = remote('node4.buuoj.cn',27731)
payload = b"%2052c%13$hn%31692c%14$hn%356c%15$hn" + p32(0x804989c + 2) + p32

本文探讨了一次实战中如何通过巧妙利用格式化字符串漏洞,结合程序执行流程,将printf函数地址改写为system,从而绕过保护机制获取shell。作者分享了payload构造细节和理解过程,包括对fini_array和printf_got地址的精确调整,以及对'-'操作符在地址计算中的应用。
最低0.47元/天 解锁文章
666





