FUGIO
FUGIO 是第一个针对 PHP 对象注入 (POI) 漏洞的自动利用生成 (AEG) 工具。在利用 POI 漏洞时,攻击者通过仔细选择其属性值来构造注入对象,以调用现有的类方法或函数(小工具)链,最终触发带有攻击载荷的敏感函数。构成此漏洞利用对象的技术称为面向属性的编程 (POP)。FUGIO 通过静态和动态分析,考虑到小工具的可用性及其调用者-被调用者关系,确定可行的 POP 小工具链。FUGIO 然后对每个已识别的 POP 链进行反馈驱动的模糊测试活动,从而产生漏洞利用对象。有关详细信息,请参阅我们的论文,“FUGIO:PHP 对象注入漏洞的自动利用生成”,将出现在 USENIX Security 2022 中。
项目地址
https://github.com/WSP-LAB/FUGIO
安装
FUGIO 在运行 Ubuntu 18.04 的机器上进行了测试。运行 FUGIO 需要 Python 3 和 PHP(5.4、5.6 或 7.2)。我们根据FUGIO-artifact中的 PHP 版本提供了三个 Docker 镜像。如果您使用给定的 Docker 映像,请按照准备 Docker 容器中的说明进行操作 ,然后转到第2 阶段。
阶段1
-
克隆 git 仓库
git clone --recurse-submodules https://github.com/WSP-LAB/FUGIO.git cd FUGIO
-
安装 Docker
-
运行 RabbitMQ Docker
- 您可以通过运行来设置 RabbitMQ
./run_rabbitmq.sh
。- 用户名:fugio
- 密码:fugio_password
- RabbitMQ 管理端口:15672
- 您可以通过运行来设置 RabbitMQ
-
安装 Python 3 pip
sudo apt-get install -y python3-pip
-
安装 PHP Composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \ php composer-setup.php && \ php -r "unlink('composer-setup.php');" && \ mv composer.phar /usr/local/bin/composer
-
安装 PHP 库
- PHP 5.4:我们通过编译源代码安装了 PHP 5.4
sudo apt-get install -y autoconf apache2-dev libxml2-dev libbz2-dev \ libcurl4-gnutls-dev libjpeg-dev libpng-dev libmcrypt-dev sudo ln -s /usr/include/x86_64-linux-gnu/curl /usr/local/include/ wget -O /tmp/bison-2.6.tar.gz http://ftp.gnu.org/gnu/bison/bison-2.6.tar.gz tar -xvf /tmp/bison-2.6.tar.gz -C /tmp cd /tmp/bison-2.6 ./configure --prefix=/usr/local/bison --with-libiconv-prefix=/usr/local/libiconv/ make sudo make install sudo ln -s /usr/local/bison/bin/bison /usr/bin/bison git clone https://github.com/openssl/openssl.git /tmp/openssl cd /tmp/openssl git checkout OpenSSL_1_0_2-stable ./config shared make sudo make install git clone https://github.com/php/php-src.git /tmp/php-src cd /tmp/php-src git checkout PHP-5.4 ./buildconf ./configure --with-mysql --with-zlib --with-gd --with-mhash --with-mcrypt \ --with-curl --with-openssl --with-zlib --with-jpeg-dir --with-png-dir --with-gettext \ --with-pcre-regex --with-pdo-mysql --enable-calendar --enable-exif --with-bz2 \ --enable-ftp --enable-mbstring --enable-shmop --enable-soap --enable-bcmath \ --enable-sockets --enable-wddx --enable-zip --with-mysqli --with-apxs2=/usr/bin/apxs2 make sudo make install sudo cp php.ini-production /usr/local/lib/php.ini
- PHP 5.6
sudo apt-get install -y php5.6-dev php5.6-bcmath php5.6-mbstring php5.6-xml
- PHP 7.2
sudo apt-get install -y php7.2-dev php7.2-bcmath php7.2-mbstring php7.2-xml
- PHP 5.4:我们通过编译源代码安装了 PHP 5.4
阶段2
-
安装依赖项
- 我们提供用于安装所有依赖项和更改 PHP 设置的脚本。运行
./install_XX.sh
取决于 PHP 的版本。- PHP 5.4:
./install_54.sh
- PHP 5.6:
./install_56.sh
- PHP 7.2:
./install_72.sh
- PHP 5.4:
- 我们提供用于安装所有依赖项和更改 PHP 设置的脚本。运行
-
准备目标应用程序源代码及其运行服务
- 在FUGIO-artifact中,我们提供了 30 个 PHP 应用程序,这些应用程序在我们的论文中进行了评估。如果您想使用它,请参阅 构建基准。
-
监控 POI 漏洞的设置
- 通过运行添加
.htaccess
用于监控 POI 漏洞的文件./htaccess.py on
。如果要停止监视,请运行htaccess.py off
.
- 通过运行添加
用法
-
使用 执行 FUGIO
./run.py
。# ./run.py usage: run.py [-h] [--all] [--rabbitmq_ip RABBITMQ_IP] [--php_ver {5,7}] [--hook_extension {uopz,runkit}] [--cpus CPUS] target
rabbitmq_ip
: RabbitMQ 的 IP 地址php_ver
:PHP的版本,选择5或7(默认5)hook_extension
: PHP 内置函数使用 hooks 的库,选择 uopz 或 runkit(默认 uopz)
由于 CubeCart 等一些应用程序与 uopz 库冲突,我们也支持 runkit。cpus
: 分配给运行 FUGIO 的 CPU 核心数(默认所有 CPU 核心)target
:目标应用程序源代码的路径all
:如果您想考虑所有小工具而不考虑它们的可用性,则启用(默认为 false)
在Dahse 等人中。,作者假设当应用程序中至少存在一个自动加载器回调时,所有现有类都是可加载的。虽然这个假设不再有效,因为这个错误在 PHP 5.4.24 和 5.5.8 中被修补,我们添加了这个选项以便在论文中与 FUGIO 进行公平比较。
有关更具体的示例,请参阅脚本
run_FUGIO_XX.sh
。如果运行该命令,FUGIO 将开始分析目标应用程序的源代码。在第一次运行时,FUGIO 会在
Files/dump_files
. 这是为了在您为同一应用程序再次运行 FUGIO 时减少分析目标源代码的时间。如果目标应用程序的源代码发生更改,则需要删除其转储文件并再次运行脚本。 -
监控 POI 漏洞 FUGIO 完成对源代码的分析后,FUGIO 开始监控 POI 漏洞。我们可以使用爬虫、蜘蛛或手动浏览来触发 POI 漏洞。在
Trigger
文件夹中,我们提供了用于触发我们的基准测试的 POI 漏洞的脚本;您可以在FUGIO-artifact中找到详细信息。
结果
所有输出都在Files/fuzzing/[app_path.time]/PUT/
目录中生成。
put-head.php
和put-body.php
:一个 PUT 文件inst_PUT.php
: 用于对目标应用程序进行模糊测试的 PUT 文件procX_X_X_X_X_X.chain
: 已识别的 POP 链PROBABLY_EXPLOITABLE
:可能被利用的漏洞利用对象(有效负载)的目录EXPLOITABLE
: 可利用的漏洞利用对象(有效负载)的目录
没有回复内容