总结
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)) print(hex(write_addr))
|
栈溢出要溢出数目(edp+距edp数目)+偏移数