天天看点

ROPgadget 安装 错误处理 与使用

0x0 开始

做题需要用到ROPgadget,去安装下载,然后麻烦越来越多,将成功过程记录下来。

它就是用来查找你的二进制文件中你想要的一些指令,方便你加以利用。

有了ROPgadget 你会发现one_gadget也是必须的。

one_gadget的安装与使用

0x0.1介 绍

使用此工具,您可以在二进制文件中搜索Gadgets,以方便您对ROP的利用。

随着 NX 保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。攻击者们也提出来相应的方法来绕过保护,目前主要的是 ROP(Return Oriented Programming),其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。所谓 gadgets 就是以 ret 结尾的指令序列,通过这些指令序列,我们可以修改某些地址的内容,方便控制程序的执行流程。

我们知道x86都是靠栈来传递参数的而x64换了它顺序是rdi, rsi, rdx, rcx, r8, r9,(这里6个寄存器可以被理解为Gadgets)如果多于6个参数才会用栈我们要先知道这个特性.

有的题,里面既没有现成的system也没有/bin/sh字符串,也没有提供libc.so给我们,那么我们要做的就是想办法泄露libc地址,拿到system函数和/bin/sh字符串;

我们就需要获取rdi, rsi, rdx, rcx, r8, r9它们的地址,首先要获取的是rdi的地址;

这就是 ROPgadget 的作用;

0x1 安装

安装命令

sudo apt-get install python-capstone

git clone https://github.com/JonathanSalwan/ROPgadget.git

cd ROPgadget

sudo python setup.py install
           

0x2 出错处理

ROPgadget 安装 错误处理 与使用

出错。。。

解决方案

先进目录

然后注意刚刚最后报错那一段,at后面引号里面那一段,他说缺那个目录。

然后输入

sudo cp -r scripts /home/wuangwuang/.local/lib/python2.7/site-packages/ROPGadget-6.3.dist-info
           

不要直接复制,用户、python版本啥的都不一样,那个 sudo cp -r scripts 然后再把刚说的引号里面的复制下去,搞定。

0x3 使用

64位汇编传参,当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 > 当参数为7个以上时,

前 6 个与前面一样, 但后面的依次从 “右向左” 放入栈中,即和32位汇编一样。

一.

命令: ROPgadget --binary 文件名 --only "pop|ret" | grep rdi
命令: ROPgadget --binary 文件名 --only "pop|ret" | grep rsi
命令: ROPgadget --binary 文件名 --only "pop|ret"
命令: ROPgadget --binary 文件名  --only 'int'   查找有int 0x80的地址
           

二.

该工具除了可以用来查找 ret/rdi的地址,还可以用来查找一些字符串的地址

命令: ROPgadget --binary 文件名 --sting '/bin/sh'

命令: ROPgadget --binary 文件名 --sting '/sh'

命令: ROPgadget --binary 文件名 --sting 'sh'

命令: ROPgadget --binary 文件名 --sting 'cat flag'

命令: ROPgadget --binary 文件名 --sting 'cat flag.txt'
           

继续阅读