[BUUCTF-pwn]——pwn1_sctf_2016
- 题目地址:https://buuoj.cn/challenges#pwn1_sctf_2016
- 题目:
话不多说,先下载下来再说。
在Linux上 checksec一下,发现开启了NX保护,但是没有开启Stack的保护,也就是说我们可以很轻易的利用栈溢出。
在window的IDA上反汇编看下源码,额 ,main函数没有什么有用的信息。我们可以看下vuln函数。
发现好大一堆,发现了fgets函数,但是很遗憾。它要求我们只能输入不超过32个字符。而我们的s距离ebp有0x3c也就是60的距离。发现下面有个replace 函数,进去看看有没有什么帮助。
replace函数如下:
仔细研读发现这个函数,发现有点小尴尬,看的不是太懂。所以…
看到上面有 I 和 you。打算动态调试一下,输入 I 或者 you 看看结果。结果发现,它会将 输入的 I 全部替换为 you!!!
看到这里,相信大家已经有思路了,我们只需要输入20个 I 和 任意四个字符,就可以开始覆盖返回地址了。
查看右侧函数,发现有一个函数名称极其嚣张 get_flag 点开一看,果不其然。
查看函数所在位置:
我们看到system函数压参数是在0X08048F13所以我们可以将其作为我们的返回地址。
当然,0X08048F0D 也可以作为返回地址,这是get_flag函数开头,并且get_flag函数无参。
exploit如下:
from pwn import *
#context.log_level='debug' #加不加都可以
p=remote('node3.buuoj.cn',xxxx)
payload='I'*20 + 'junk' +p32(0x08048F13)
p.sendline(payload)
p.interactive()