PHPGGC学习----理论
本文首发于先知: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类型
PHPGGC学习----理论的更多相关文章
- PHPGGC学习----实践
本文首发于先知:https://xz.aliyun.com/t/5450 PHPGGC学习----理论部分对PHPGGC工具的使用方法有了一个基本的了解,接下来需要利用实践环境进行一个实践操作,巩固一 ...
- 使用sklearn进行集成学习——理论
系列 <使用sklearn进行集成学习——理论> <使用sklearn进行集成学习——实践> 目录 1 前言2 集成学习是什么?3 偏差和方差 3.1 模型的偏差和方差是什么? ...
- [转]使用sklearn进行集成学习——理论
转:http://www.cnblogs.com/jasonfreak/p/5657196.html 目录 1 前言2 集成学习是什么?3 偏差和方差 3.1 模型的偏差和方差是什么? 3.2 bag ...
- c++ 容器学习 理论
[转载]http://blog.csdn.net/acosoft/article/details/4395468 在面向对象的语言中,大多引入了容器的概念.那么 什么 是 容器?实质上就是一组相同类型 ...
- 使用sklearn进行集成学习——实践
系列 <使用sklearn进行集成学习——理论> <使用sklearn进行集成学习——实践> 目录 1 Random Forest和Gradient Tree Boosting ...
- [转]使用sklearn进行集成学习——实践
转:http://www.cnblogs.com/jasonfreak/p/5720137.html 目录 1 Random Forest和Gradient Tree Boosting参数详解2 如何 ...
- Makefile基础学习
Makefile基础学习 理论知识 makefile关系到了整个工程的编译规则.一个工程中的源文件不计其数,并且按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文 ...
- 【转载】 准人工智能分享Deep Mind报告 ——AI“元强化学习”
原文地址: https://www.sohu.com/a/231895305_200424 ------------------------------------------------------ ...
- .net 数据缓存(二)之Redis部署
现在的业务系统越来复杂,大型门户网站内容越来越多,数据库的数据量也越来愈大,所以有了“大数据”这一概念的出现.但是我们都知道当数据库的数据量和访问过于频繁都会影响系统整体性能体验,特别是并发量高的系统 ...
随机推荐
- PWA PSI statusingclient.UpdateStatus更新任务页面的AssnCustomFields的TextValue值
1.注意Changesxml格式和下面一定要一样 2.CustomFieldGuid和CustomFieldName都不能少,自定义域的uid和name其中uid或者是MD_PROP_UID_SECO ...
- Spinner 通过XML形式绑定数据时 无法从String.xml中读取数组
在android应用程序中,通过XML形式给Spinner绑定数据,如果把数组放在系统的string.xml文件里,那么就有可能在运行时无法找到,导致程序异常结束,解决方法是自建一个XML文件来存放数 ...
- Hadoop YARN配置参数剖析(3)—MapReduce相关参数
MapReduce相关配置参数分为两部分,分别是JobHistory Server和应用程序参数,Job History可运行在一个独立节点上,而应用程序参数则可存放在mapred-site.xml中 ...
- Ubuntu使用crontab 使用举例
除了这些固定值外,还可以配合星号(*),逗号(,),和斜线(/)来表示一些其他的含义: 星号 表示任意值,比如在小时部分填写 * 代表任意小时(每小时) 逗号 ...
- How to install Samba server on Ubuntu 12.04
Part 1: Configuring anonymous share with samba server To install the samba package,enter the followi ...
- POJ 1601 拓展欧几里得算法
学习链接:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 先来学习一下什么是欧几里得算法: 欧几里得原理是:两个整数 ...
- Dreamweaver Flash Photoshop网页设计综合应用 (智云科技) [iso] 1.86G
全书共15章,主要包括网页制作基础.Dreamweaver CC网页制作.Photoshop CC网页图像设计.Flash CC网页动画设计以及综合案例实战5个部分.通过本书的学习,不仅能让读者学会三 ...
- 51nod1010(枚举+二分)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 题意:中文题诶- 思路:求第一个比 x (1<= ...
- 洛谷P2380 狗哥采矿
P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是 ...
- jzoj3208. 【JSOI2013】编程作业(kmp)
题面 Description Will相信,很多同学都有过这样的经历:大牛已经写好了编程作业,而作为菜鸟的自己不会写怎么办呢?拿大牛的代码抄一下嘛!但是提交一模一样的作业是不是不太好?于是就改一改变量 ...