[PWN] CTF-WIKI ret2text

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 python

from pwn import *



sh = process('./ret2text')

target = 0x804863a

sh.sendline('A' * (0x6c+4) + p32(target))

sh.interactive()

这里S对ebp是6c,但根据栈堆结构,还要加一个4在这里插入图片描述
这是我原文章的图。。。链接:逆向&pwn基础

猜你喜欢

转载自blog.csdn.net/qq_46441427/article/details/113729200
今日推荐