Bropper | 一个自动化的盲目ROP利用工具插图

引言

Bropper是一个基于Python的自动化盲目ROP利用工具,它是由斯坦福大学的Andrew Bittau在2014年发现的技术。

原理

大多数服务器(如nginx、Apache、MySQL)在与客户端通信时,canary和地址保持不变,即使存在ASLR和PIE。因此,我们可以使用一些经过教育的暴力破解方法来泄漏信息,并构建一个可行的利用。

利用流程

  • 查找缓冲区溢出的偏移量
  • 查找canary值
  • 查找保存的寄存器(RBP / RIP)
  • 查找停止gadgets
  • 查找brop gadgets
  • 查找写入函数(write / dprintf / puts / …)
  • 泄漏二进制文件

成果示例

该代码库提供了3个自定义的漏洞示例,您可以直接运行或构建Docker镜像。

使用BROPPER将转储二进制文件:

$ BROPPER dump

然后,可以使用ROPgadget等工具从转储的二进制文件中提取所有ROP gadgets:

$ ROPgadget --binary dump

找到的唯一gadgets个数:235。

脚本预览

脚本使用方法

要使用此脚本,请按照以下步骤:

  1. 安装所需依赖:python3 -m pip install -r requirements.txt
  2. 运行Bropperpython3 bropper.py -t 127.0.0.1 -p 1337 --wait "Password :" --expected Bad --expected-stop Welcome -o dump
$ python3 bropper.py -h
usage: bropper.py [-h] -t TARGET -p PORT --expected-stop EXPECTED_STOP --expected EXPECTED --wait WAIT -o OUTPUT [--offset OFFSET] [--canary CANARY] [--no-canary] [--rbp RBP] [--rip RIP] [--stop STOP]
                  [--brop BROP] [--plt PLT] [--strcmp STRCMP] [--elf ELF]

Description message

options:
  -h, --help            show this help message and exit
  -t TARGET, --target TARGET
                        target url
  -p PORT, --port PORT  target port
  --expected-stop EXPECTED_STOP
                        Expected response for the stop gadget
  --expected EXPECTED   Expected normal response
  --wait WAIT           String to wait before sending payload
  -o OUTPUT, --output OUTPUT
                        File to write dumped remote binary
  --offset OFFSET       set a offset value
  --canary CANARY       set a canary valu   e
  --no-canary           Use this argument if there is no stack canary protection
  --rbp RBP             set rbp address
  --rip RIP             set rip address
  --stop STOP           set stop gadget address
  --brop BROP           set brop gadget address
  --plt PLT             set plt address
  --strcmp STRCMP       set strcmp entry value
  --elf ELF             set elf address

可以使用python3 bropper.py -h查看脚本的帮助信息和可用选项。