pwmable.kr-bof

Hello world,hello blog!

Posted by 吴柚 on July 30, 2019
## 审题 ![](http://ww1.sinaimg.cn/large/006bbSI6ly1g5hzvaixq8j30kj0djq3h.jpg) 从题目描述中可以得到,此题是缓冲区溢出的题目。题目所给文件需在Linux系统中下载。 ## 分析 ![](http://ww1.sinaimg.cn/large/006bbSI6ly1g5i07pm3c8j30m70fk779.jpg) 从程序中我们可以得到以下几点 > overflowme是一个局部数组变量,尺寸为32字节,且通过gets获取. > main中调用func时参数key指定为0xdeadbeef,在进入func后会落入else分支。 > 想要进入func后落入if分支,需要通过某种方式修改key。 然后把bof可执行文件放入IDA中查看。 ![](http://ww1.sinaimg.cn/large/006bbSI6ly1g5i378t2cjj30er06nt99.jpg) 这是一个32位程序,参数key(对应ida中a1)通过栈传递。根据IDA的反汇编,可以看到key的位置在`ebp+8h`处,而局部变量overflowme(对应s)首地址在`ebp-2ch`处。因此,二者的距离为0x34。 因为`gets(overflowme)`并没有对输入的长度进行限制,因此我们可以溢出overflowme数组来改写参数key,改写的值就是`0xCAFEBABE`。 分析完之后,就是构造shellcode了。 ``` from pwn import * p = remote('pwnable.kr',9000) sh = 'A'*52 + p32(0xcafebabe) p.sendline(sh) p.interactive() ``` 运行脚本后,使用`ls`和`cat flag`指令即可得到flag. ![](http://ww1.sinaimg.cn/large/006bbSI6ly1g5i3md4g09j30kd06u3z1.jpg)