二进制是一个不断学习的过程,以下记录我在pwnable.tw网站刷题的一些心得
题目分析
首先分析文件。
由此可见,32位文件,静态链接,没有保护措施,存在栈溢出。
然后放入IDA中查看。
F5大法没有太多可用信息。能看出有一个sys_write
直接看汇编
1 | .text:08048060 public _start |
- push esp:保存栈地址
- push offset_exit:保存返回地址
- 4个XOR 清空寄存器
- 从栈地址上取长度位0x14个字符输出。
- 清空ebx
- read读(最多0x3C)
- 把esp提高0x14
- 返回。
整体逻辑就是这样子。
那么也不难想到利用点。
栈溢出就要考虑返回地址。
思路
利用两次,第一次的返回地址填写
.text:08048087 mov ecx, esp ; addr
write函数泄露出栈地址。
第二次栈溢出覆盖地址为栈地址,在后面拼接shellcode
1 | /* |
找到一个21bytes的shellcode
Exploit
EXP
1 | #!usr/bin/env python |
Getshell
1 | python exp.py |
后记
之前的Pwn的时候一直感觉有些困难,还是多刷题多积累。