本文首发于先知: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类型

最新文章

  1. 在IIS启用MP4
  2. Android MPAndroidChart RadarChart (蜘蛛网图)
  3. .Net开源网络爬虫Abot介绍
  4. org.hibernate.QueryException: could not resolve property
  5. Codeforces Round #257 (Div. 2) B
  6. HDOJ 1398 Square Coins 母函数
  7. DEEPIN下搭建FTP服务器步骤(备忘录)
  8. BZOJ 2152: 聪聪可可 点分治
  9. Android 完全退出程序,以及再按一次返回键退出程序
  10. BZOJ2253 2010 Beijing wc 纸箱堆叠 CDQ分治
  11. 製程能力介紹(SPC introduction) ─ Cp之製程能力解釋
  12. Linux进程模型
  13. [BJOI2019]奥术神杖(分数规划,动态规划,AC自动机)
  14. 集合源码分析[1]-Collection 源码分析
  15. 【BZOJ3771】Triple 生成函数 FFT 容斥原理
  16. 【转】通过xml处理sql语句时对小于号与大于号的处理转换
  17. vue style 的scoped 使用
  18. 用node研究axios前后端交互状态码规则
  19. 原创:MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 2、数据框架 和 功能预览
  20. 如何在CentOS 7安装Node.js

热门文章

  1. LAMP 1.8默认虚拟主机
  2. fabric自动化安装mysql-server
  3. cygwin运行git submodule init出错error while loading shared libraries的解决
  4. 转:JMeter整合InfluxDB,Grafana让测试结果实时显示
  5. hdu 1576 A/B (求逆元)
  6. 笔记:eclipse的findbugs插件安装成功却不显示
  7. How to download a file with plus symbol(+) filename in IIS?
  8. Unity3D -- shader常用函数和变量
  9. CF 980D Perfect Groups(数论)
  10. 谢特——后缀数组+tire 树