blind rop

介绍

BROP(Blind ROP) 于 2014 年由 Standford 的 Andrea Bittau 提出,其相关研究成果发表在 Oakland 2014,其论文题目是 Hacking Blind,下面是作者对应的 paper 和 slides, 以及作者相应的介绍。

BROP 是没有对应应用程序的源代码或者二进制文件下,对程序进行攻击,劫持程序的执行流。

攻击条件

  1. 源程序必须存在栈溢出漏洞,以便于攻击者可以控制程序流程。
  2. 服务器端的进程在崩溃之后会重新启动,并且重新启动的进程的地址与先前的地址一样(这也就是说即使程序有 ASLR 保护,但是其只是在程序最初启动的时候有效果)。目前 nginx, MySQL, Apache, OpenSSH 等服务器应用都是符合这种特性的。

基本思路

在 BROP 中,基本的遵循的思路如下

环境设置

这里我的做题环境为manjaro,本来想用docker+ctf_xineted来作为题目环境,但是不知道为什么一直出问题,所以我选择用wsl的乌班图来作为题目环境

在题目环境中利用socat建立远程通信

 socat tcp4-listen:10001,reuseaddr,fork exec:./brop &

如果题目和解题都在一个系统下,则需脚本维持socat不断流(二进制程序崩溃,socat也会停止)

#!/bin/sh
while true; do
        num=`ps -ef | grep "socat" | grep -v "grep" | wc -l`
        if [ $num -lt 5 ]; then
                socat tcp4-listen:10001,reuseaddr,fork exec:./a.out &
        fi
done