PHPGGC学习----理论

博客介绍了使用git clone项目后,phpggc工具的使用方法。包括列出可用pop链、显示组件信息、生成序列化payload、对序列化数据包装处理、生成phar归档数据及编码等,还介绍了快速反序列化、空字符转换、绕过waf等高级用法。
本文首发于先知:https://xz.aliyun.com/t/5450
PHPGGC 是一款能够自动生成主流框架的序列化测试payload的工具,类似 Java 中的 ysoserial,
当前支持的框架包括Doctrine, Guzzle, Laravel, Magento, Monolog, Phalcon, Slim, SwiftMailer, Symfony, Yii
和 ZendFramework,可以说是反序列化的武器库了。本文从该工具出发,以 Drupal Yaml 反序列化漏洞和 Typo3 反序列化漏洞为例,
分析其中的多种利用方式,并介绍一下今年 BlackHat 议题关于新型 php 反序列化攻击的部分。

首先git clone一下项目:

git clone https://github.com/ambionics/phpggc

运行phpggc 的条件是php cli的版本>=5.6

1:使用方法:

通过./phpggc -l 可以列出所有可用的pop链,其中每条链条都包括可利用组件的名称、版本范围、可利用其进行的操作、触发的反序列化函数(即攻击向量)

通过./phpggc   组件名  -i 可以显示与组建相关的信息,其中就包括了具体生成攻击payload所需要的参数

以上图为例,生成laravel/rce1的payload需要提供函数名以及传给该函数的参数,因此使用:

即可生成序列化的payload

对于只能满足写文件需求的组件,要利用必须知道网站的绝对路径,例如目标网站绝对路径为:

/var/www/html,需要写入shell.php ,写入的文件位于我们本机的/tmp/data,则需要执行:

利用phpggc -w参数可以对序列化的数据进行一个再次包装处理

如果漏洞代码如下:

<?php
$data = unserialize($_GET['data']);
print $data['message'];

传入的data是一个二维数组,并且data的值不是一个序列化的字符串,而data['message']的值才是一个字符串,因此要反序列化的是键message对应的值,因此可以使用

process_object($object): Called right before serialize(), allows to change the object

 即在序列化数据形成之前可以改变要序列化的对象,这里只需要将要序列化的对象的值赋给message,即可以使用:

<?php
# /tmp/my_wrapper.php
function process_object($object)
{
    return array(
        'message' => $object
    );
}

这里将序列化对象的值赋给了message,并且返回为一个数组,然后再对数组进行serialize()函数处理,形成序列化的数据,运行结果如下:

由上面两个图可以看出经过再次包装处理,序列化的数据成了一个包含一个元素的数组,即a:1

 phpggc也支持生成phar归档的序列化数据:

phpggc也支持编码:

./phpggc -b -u -u slim/rce1 system id

比如如上则是对生成的序列化数据先进行base64,再进行urlencode两次

高级用法:

使用-f参数进行快速反序列化,在unserialize()函数以后立即销魂对象,而不是在php脚本运行结束以后,建议在组件的攻击向量为__destruct时进行使用,有利于提高稳定性,加上-s选项进行软urlencode

例如:

ASCII Strings:

使用-a参数将序列化数据中的空字符转换为其16进制的表示,但是在一些情况下可能不适用

Plus Numbers:

主要用于bypass,如果waf检测序列化数据中是否包含php对象,通过正则O:[0-9]+来判断,则可以通过O:+123代替 O:123

--plus-numbers <types>

其中types是指要在何种数据类型的数字前加“+”,比如O就是php对象,i就是int类型

 

转载于:https://www.cnblogs.com/wfzWebSecuity/p/11052745.html

<think>嗯,用户想了解如何搭建PHPGGC环境或者使用PHPGGC的示例教程。首先,我需要回顾PHPGGC的基本信息。PHPGGC是一个生成PHP反序列化漏洞利用链的工具,常用于安全测试。根据用户提供的引用内容,特别是引用[1]和[2],里面提到了理论学习和实践操作,比如Drupal的CVE-2017-6920漏洞。 首先,用户可能需要知道如何安装PHPGGC。通常,PHPGGC可以通过GitHub获取,所以需要克隆仓库并安装依赖。需要确认系统是否安装了PHP和Composer,因为工具可能依赖这些环境。然后,用户可能想了解基本使用,比如生成Payload,针对特定的框架比如Laravel、Symfony等。引用[3]提到了一些利用链,比如Guzzle/RCE1,所以可能需要用具体的例子来说明。 接下来,用户可能需要一个实际的操作示例,例如测试Drupal的漏洞,如引用[2]中的CVE-2017-6920。这里需要指导用户如何构造Payload,并利用工具生成利用代码,然后发送到目标服务器进行测试。同时,需要注意环境搭建可能需要Docker,比如使用VulApps中的环境,这需要安装Docker并拉取镜像。 用户可能遇到的问题包括依赖安装失败、Payload生成错误或者环境配置不正确,所以需要提醒常见问题,比如PHP版本、依赖缺失等。此外,引用[1]和[2]中的步骤可能需要分步骤详细说明,确保用户能够一步步操作。 最后,生成相关问题时要围绕PHPGGC的环境搭建、使用步骤、漏洞测试以及工具的其他功能,比如支持的框架和利用链类型。确保问题能够帮助用户深入理解工具的应用和故障排除。</think>### 如何搭建 PHPGGC 环境及使用示例教程 #### 一、环境搭建步骤 1. **安装基础依赖** PHPGGC 需要 PHP 环境和 Composer 包管理工具。确保已安装以下组件: ```bash sudo apt install php composer # 以 Debian/Ubuntu 为例 ``` 2. **克隆 PHPGGC 仓库** 从 GitHub 获取最新代码并安装依赖: ```bash git clone https://github.com/ambionics/phpggc.git cd phpggc composer install ``` 3. **验证安装** 运行命令测试工具是否正常: ```bash ./phpggc -l # 查看支持的利用链列表[^3] ``` --- #### 二、基础使用示例(以 Drupal CVE-2017-6920 为例) 1. **生成 Payload** 使用 `Guzzle/RCE1` 利用链生成远程命令执行 Payload(例如执行 `id` 命令): ```bash ./phpggc Guzzle/RCE1 system 'id' -s # -s 表示生成序列化字符串 ``` 2. **部署测试环境** 使用 Docker 快速搭建 Drupal 漏洞环境(需提前安装 Docker): ```bash docker pull medicean/vulapps:d_drupal_1 docker run -d -p 8080:80 medicean/vulapps:d_drupal_1 ``` 3. **发送 Payload** 将生成的 Payload 通过 HTTP 请求发送至目标(示例使用 `curl`): ```bash curl -X POST http://目标IP:8080/漏洞路径 --data "payload=生成的序列化字符串" ``` --- #### 三、关键注意事项 1. **PHP 版本兼容性** 需使用 PHP ≥7.0 版本,部分利用链对 PHP 扩展(如 `phar`)有依赖[^2]。 2. **利用链选择** 通过 `./phpggc -i 框架名称` 查看支持的具体框架利用链,例如: ```bash ./phpggc -i Laravel # 列出 Laravel 相关漏洞链 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值