首页
社区
课程
招聘
[求助] 关于sploitfun的第四篇心得和一些求助
发表于: 2018-3-8 15:20 3665

[求助] 关于sploitfun的第四篇心得和一些求助

2018-3-8 15:20
3665
-----》 3月12日结贴
感谢大佬的解答@keoyo

-----》 3月10编辑 

我跟踪了strcpy函数
ret = pop eip;        
而我的字符串在 0xffffcc90 以后的地址中 ,无论多长也不会覆盖到这个返回地址。
但是问题又出现了,按照栈结构
..
var ..                     
ret  ..
par ..
..
按理来说返回地址(ret)在变量(var)后面,会被我的字符串(var)覆盖掉啊,为什么strcpy中,返回地址在var前了呢??????
_________________________________________________________________________________________________________________________-



本人小白,最近接触了这系列文章 https://sploitfun.wordpress.com/2015/05/08/bypassing-nx-bit-using-return-to-libc/
也在论坛中发现了它的汉化贴 https://bbs.pediy.com/thread-217390.html

写一些自己的心得和收获,首先是原文语法错误问题 

conv函数是个小端转换函数,我这显示的是这样。
应该修改为return struct.pack("I",num)

在我的64bit ubuntu上编译它原文程序
echo 0 > /proc/sys/kernel/randomize_va_space
 关aslr
gcc -m32 -g -fno-stack-protector -o nx nx.c
编译过程

原文没有给出它gdb程序的截图,可能我环境和他不同,反汇编出来的也不同。

按照原文的exploit是失败的

我跟踪了字符串,发现它在执行完main函数时候会跳转到的payload上。
从main+81 到结束,这段代码很奇妙,它读了我的payload,在我的payload中找字符串然后修改程序的ebp,然后从栈上pop eip
为此我针对我的环境构造了ebp,来满足它的跳转,放exploit

在gdb成功exploit了,但是在shell里面却依旧报错,查了查是环境变量不同,放到栈上以后,环境变量所占栈长度不同导致的exploit失败
找到一个工具,github上的 fixenv/r.sh
利用这个工具重新构造payload成功exploit了。。。。







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

最后于 2018-3-12 10:02 被xxxlion编辑 ,原因:
上传的附件:
  • nx (9.36kb,4次下载)
  • nx.c (0.20kb,4次下载)
  • nx.py (0.42kb,4次下载)
  • r.sh (6.98kb,4次下载)
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 699
活跃值: (444)
能力值: ( LV9,RANK:240 )
在线值:
发帖
回帖
粉丝
2
这系列之前看的时候感觉错漏百出...直接调pwn收获还大点...
2018-3-9 00:46
0
雪    币: 486
活跃值: (1202)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
sakura零 这系列之前看的时候感觉错漏百出...直接调pwn收获还大点...
直接调pwn对那些防护不会绕过,很无力
2018-3-9 09:59
0
雪    币: 292
活跃值: (750)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
leave  =  mov  esp,ebp;pop  ebp
2018-3-9 20:28
0
雪    币: 486
活跃值: (1202)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
Keoyo leave = mov esp,ebp;pop ebp
strcpy函数执行后返回main时并没有做leave操作
2018-3-10 16:25
0
雪    币: 292
活跃值: (750)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
dalion strcpy函数执行后返回main时并没有做leave操作
额,我并没有说strcpy的问题,strcpy返回时没有发生溢出可能是楼主对栈和函数调用传入参数理解有一点失误
最后于 2018-3-11 17:18 被Keoyo编辑 ,原因:
2018-3-11 14:56
0
雪    币: 292
活跃值: (750)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
仔细看了一下楼主3月10日更新的问题,楼主可能在对栈和函数传入传出参数之间的关系有一点模糊,假设strcpy传入参数为a和b,入栈顺序是b,a,strcpy  ret,ebp...这样的,而strcpy函数中定义的变量,才是在ret再往栈低地址方向申请,因此即使有溢出,就像nx这个一样,也是在main函数返回时,而不是在strcpy返回时
最后于 2018-3-11 17:15 被Keoyo编辑 ,原因:
2018-3-11 17:15
0
雪    币: 486
活跃值: (1202)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
Keoyo 仔细看了一下楼主3月10日更新的问题,楼主可能在对栈和函数传入传出参数之间的关系有一点模糊,假设strcpy传入参数为a和b,入栈顺序是b,a,strcpy  ret,ebp...这 ...
明白了明白了,谢谢解答
2018-3-12 09:56
0
游客
登录 | 注册 方可回帖
返回
//