(Pwn)CTF工具 ROPgadget 的安装与使用介绍

一. 介 绍

在这里插入图片描述

使用此工具,您可以在二进制文件中搜索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 的作用;

二. ROPgadget工具的安装

# 先安装Capstone,它是一个轻量级的多平台架构支持的反汇编架构。
sudo apt-get install python-capstone
 
# 下载好ROPgadget解压,并进入文件夹中
python setup.py install

三.工具的使用

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"
(Pwn)CTF工具 ROPgadget 的安装与使用介绍_第1张图片
二.

该工具除了可以用来查找 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'

在这里插入图片描述

你可能感兴趣的:(PWN学习)