直接写思路
- 1.没有直接的/bin/sh
- 2.没有格式化字符串
缓冲区溢出风险:即使n小于等于50(即dest数组的大小),因为src只是一个字符(1字节),试图读取超过1字节的数据会导致访问越
界。如果n大于50,不仅会访问越界,还会写入超出dest数组范围的内存,导致缓冲区溢出。(有栈溢出可以利用)
我们可以利用栈溢出写入shellcode,不过得先,输入crashme进入vuln
计算shellcode所在的位置
先在vuln找到一个nop的地址
在这个地方下断点,再用gdb,先输入crashme,再查栈
1 | stack 20 |
可以看到输入起始位置0x22而ebp的位置在0x38
远程连接可以直接得到输入的地址,但是地址会变化,偏移不会变化。
思路就是在ebp后写入shellcode
我们已经知道了输入地址和ebp的距离是0x38-0x22,可以进行填充
我们还要算出shellcode的写入位置
所以shellcode的位置就是s的初始地址:0xffffcc0c - 0xffffcbf0(0x5c-0x40 = 0x1c)
给出exp
1 | from pwn import * |