0%

格式化字符串-改变某地址上值的函数简介

总结

1
payload=fmtstr_payload(4, {0x08014C030:5})
1
2
3
4
5
6
7
上述为偏移量,写入地址,写入数据
fmtstr_payload(offset, writes, numbwritten=0, write_size=‘byte’)
第一个参数表示格式化字符串的偏移;
第二个参数表示需要利用%n写入的数据,采用字典形式,我们要将printf的GOT数据改为system函数地址,就写成{printfGOT:systemAddress};本题是将0804a048处改为0x2223322
第三个参数表示已经输出的字符个数,这里没有,为0,采用默认值即可;
第四个参数表示写入方式,是按字节(byte)、按双字节(short)还是按四字节(int),对应着hhn、hn和n,默认值是byte,即按hhn写。
fmtstr_payload函数返回的就是payload
1
p.sendlineafter('fun!\n',payload)

前者是在什么之后发送payload 部分题目卡的严需要分段发送,后方为发送内容

1
2
write_addr=u32(p.recv(4))#32为位数 4为接受地址的字节长度
print(hex(write_addr))#hex为把数值转为16进制形式

栈溢出要溢出数目(edp+距edp数目)+偏移数