在之前进行ret2shellcode
的学习时,需要NX
保护机制是关闭的,但是现在一般情况下,保护机制默认都是开启的,那么该怎么办呢?
下面我们将学习ret2plt
技术,够着ROP Chain
来执行我们想要的代码
ret2plt
这种技术的目的是从 PLT 中泄漏函数的地址,例如二进制程序中有一个system
或其他危险函数的调用,使用危险函数作为返回地址,获得shell
ROP
现在大多数的栈溢出漏洞都是使用ROP(Return Oriented Programming)
,即返回导向编程。通过栈溢出覆盖返回地址,使其跳转到我们想要执行恶意代码的位置中。
跳转的位置可能是一段本就就已经写好可以执行恶意命令的函数(这些指令通常有我们自己构造),这些一段代码由一段一段的指令组成,我们可能从这里取一个地址,从哪里取一个地址,这些一段一段的指令被我们称为gadget
。
一段getshell的RoP Chain,可能是构造好的系统调用指令,或者跳转到libc中的某个函数。
gadget
这个单词很形象gadget
,小工具,这些小工具组成了我们的getshell指令,通常gadget
的表现形式如下:
xxx;ret
jmp xxx
call xxx
通常我们使用ROPgadget
命令获取gadget
,常见的参数如下:
--binary
: 指定二进制文件--string
: 指定搜索的文本--depth num
: rop chain 深度
下面我们会进行实操,二进制文件如下:
链接:https://pan.baidu.com/s/1TKg-hr8dbvp5Th0DH2mdfA
提取码:bwck
32位 - ret2plt
我们需要获取system函数的地址和/bin/sh
的地址,获取方法如下
64位 - ret2plt
脚本如下:
标签:学习,函数,gadget,ret2plt,地址,指令,一段,pwn
From: https://www.cnblogs.com/Junglezt/p/18224937