[PWN][进阶篇]Rop-Ret2Text介绍及实例教学

Rop-Ret2Text介绍及实例教学

1、前提知识

什么是Rop系统攻击
是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码。

ROP也有其不同于正常程序的内在特征:
(1)ROP控制流中,call和ret指令不操纵函数,而是用于将函数里面的短指令序列的执行流串起来,但在正常的程序中,call和ret分别代表函数的开始和结束;
(2)ROP控制流中,jmp指令在不同的库函数甚至不同的库之间跳转,攻击者抽取的指令序列可能取自任意一个二进制文件的任意一个位置,这很不同于正常程序的执行。比如,函数中部提取出的jmp短指令序列,可将控制流转向其他函数的内部;而正常程序执行的时候,jmp指令通常在同一函数内部跳转。
ROP攻击的防范:ROP攻击的程序主要使用栈溢出的漏洞,实现程序控制流的劫持。因此栈溢出漏洞的防护是阻挡ROP攻击最根源性的方法。如果解决了栈溢出问题,ROP攻击将会在很大程度上受到抑制。

BSS段通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS段属于静态内存分配。(在溢出时EIP的值可以是BSS段的地址)
data通常存放程序中已经初始化的全局变量的一块内存区域。数据段属于静态内存分配。
text是存放程序执行代码的一块内存区域。称为代码段。
rodata是存放c中的字符串和#define定义的常量。

ret2text就是执行程序中已有的代码,例如程序中写有system等系统的调用函数,我们就可以利用控制已有的gadgets(以ret及结尾的指令序列,通过这些指令序列,可以修改某些地址的内容)控制system函数。其实就是控制程序执行程序本身已有的代码(.text),使EIP指向具有system(“/bin/sh”)的代码段

找到溢出位置,计算偏移量,执行可执行代码, ”呯“

如何快速定位栈溢出,ida + f5,就是看反汇编找找数组定义的位置

我们要要注意的是 gets(buf)、strcpy(dest,sec)、scanf("%s",buf)、stract(buf,buf2)、read(0,buf,size)

测试溢出点,我们要使用cyclic,生成有数量的长度的字符串
在这里插入图片描述
然后r程序时,输入这些字符串,我们可以看到报错
在这里插入图片描述

cyclic -l 0x6161616c

在这里插入图片描述
在这里插入图片描述
6161616c呢也就是 aaal 也就是从我们刚才cyclic生成的字符串中,查找aaal的偏移量

在这里插入图片描述
如果大家如果我的上一篇博客的话,我们当时利用的是stack来查看的,之后我们就用cyclic来使用,而利用stack一行一行的算,也就是这个工具的理解。

安装gdb-peda的教程我之前发过
之前的文章,有gdb的基本使用和插件peda的下载教程

补充:pwndbg和peda的切换

在这里插入图片描述
/是根目录,~是home目录,Linux存储是挂载的方式,相当于是树状的,源头是“/”,也就是根目录。而每个用户都有“home”目录,也就是用户的个人目录,比如用户的“home”目录就是/root,普通用户a的home目录就是/home/a,之后我们可以看到
在这里插入图片描述
本次实验编译指令

gcc -no-pie -fno-stack-protector -zexestack -m32 -o -read -read.c

意思就是没有pie保护,有canary保护,栈可执行,32位文件,输出叫read的程序,用read.c的文件

我们打开gdb,发现是peda插件了,然后用创建一个字符串,开始程序,输入,程序出现异常重点,根据程序的报错地址,查询一下偏移量,也就是下图的操作

在这里插入图片描述快速确定偏移
工具一 gdb-pwndbg
cyclic 200
cyclic -l 地址
工具二 gdb-peda
pattern create 200
pattern offset 地址
功能是一样子的

2、实例教学

问题解析:
控制返回地址->控制执行流程
溢出到返回地址->到底需要输入多少数据

实际操作:
1、找出溢出点
2、确定溢出偏移
3、找到system(“”)函数
4、写exp(烦死了)

在这里插入图片描述
找system函数
objdump -t xxx 查看程序中使用到的函数
objdump -d xxx 查看程序中函数的汇编代码
objdump -d -j .plt xxx 查看plt表
什么是plt表

	-j 参数  
	.text   -代码段
	.const -只读数据段(有的编译器不用这个段,将只读并入了.data段)
	.bss  -bss段

objdump -d -M intel xxx 查看程序中函数的汇编代码,并且汇编代码是intel架构的

实战开始
切记我们的流程哦
第一步的核心是找到system函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们就要想办法调用system函数
现在我们来分析一下具体用到了什么参数,也就是上图红框上面的的地址,更重要的上方的参数地址

在这里插入图片描述在这里插入图片描述在这里插入图片描述
这个时候再找到刚才我们看的system上方参数的地址

在这里插入图片描述
开始写exp
在这里插入图片描述
解释:
导入pwn包
偏移量是我们上面算出来的
payload是填充量+覆盖到的地址
向溢出点发送payload
获取交互环境

getshell

在这里插入图片描述
希望大家有所收获!!!!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
pwn ret2libc是一种攻击技术,其原理是通过利用程序中的栈溢出漏洞,来控制程序的执行流程,以达到执行libc中的函数的目的。 在ret2libc攻击中,程序会调用libc库中的函数,例如system函数,来执行特定的操作。但是在程序中没有自带的/bin/sh字符串,所以需要通过其他方式获取执行shell命令的能力。 具体而言,攻击者会利用程序中的栈溢出漏洞,将栈上的返回地址修改为在libc库中的某个函数的地址,例如puts函数。然后通过执行puts函数,将栈上保存的函数地址打印出来。由于libc库中的函数地址相对位置是不变的,攻击者可以根据已知的函数地址和libc的版本来计算system函数的真实地址。然后再利用system函数执行特定的操作,比如执行shell命令。 总结来说,pwn ret2libc攻击的原理是通过栈溢出漏洞修改返回地址为libc库中的一个函数地址,然后根据已知的函数地址和libc的版本计算出system函数的真实地址,最终实现执行shell命令的目的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [pwn学习——ret2libc2](https://blog.csdn.net/MrTreebook/article/details/121595367)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pwn小白入门06--ret2libc](https://blog.csdn.net/weixin_45943522/article/details/120469196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏华李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值