ROPgadget 安装 错误处理 与使用
ROPgadget 安装 错误处理 与使用
0x0 开始
做题需要用到ROPgadget,去安装下载,然后麻烦越来越多,将成功过程记录下来。
它就是用来查找你的二进制文件中你想要的一些指令,方便你加以利用。
有了ROPgadget 你会发现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 安装
安装命令
1 | sudo apt-get install python-capstone |
0x2 出错处理
出错。。。
解决方案
先进目录
然后注意刚刚最后报错那一段,at后面引号里面那一段,他说缺那个目录。
然后输入
1 | 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位汇编一样。
一.
1 | 命令: ROPgadget --binary 文件名 --only "pop|ret" | grep rdi |
二.
该工具除了可以用来查找 ret/rdi的地址,还可以用来查找一些字符串的地址
1 | 命令: ROPgadget --binary 文件名 --sting '/bin/sh' |