PHPGGC的使用介绍和安装
PHPGGC:
PHPGGC 是一个 unserialize() 有效负载库,以及从命令行或编程方式生成它们的工具。 当您在没有代码的网站上遇到反序列化时,或者只是在尝试构建漏洞时,此工具允许您生成有效负载,而无需经历查找小工具并组合它们的繁琐步骤。它可以被视为相当于frohoff的ysoserial,但对于PHP。 目前,该工具支持小工具链,例如:CodeIgniter4,Doctrine,Drupal7,Guzzle,Laravel,Magento,Monolog,Phalcon,Podio,Slim,SwiftMailer,Symfony,Wordpress,Yii和ZendFramework。
以上是官网对它的描述
为什么要用这个工具?一句话因为框架类的反序列化漏洞利用太过于复杂,用这个可以一键生成,就这么简单。
那就要明白一件事,这个工具是针对于那些框架、组件来生成payload的,而不是原生类的,比如说很多CTF的题目,别人自己出的那种不涉及框架的代码,用这个工具是生成不出来的
用的时候只需要知道目标的版本是否在漏洞版本区间然后用命令生成payload
PHPGGC下载地址:
https://github.com/ambionics/phpggc
注意这个工具只有linux版本,没有windows版本,自己放到kali或者centos上去搭建。
解压缩后进入到安装目录,用php运行即可
php phpggc -l
列出支持的所有可选项,如下图:
或者不加php用./也可以,看你自己
php phpggc -l thinkphp
列出针对thinkphp框架的可选项,如下图:
ThinkPHP/FW1(FW指的是文件写入,意思就是利用反序列化漏洞进行文件写入)
version是(漏洞版本区间)
命令语法:执行程序 框架名字 要执行的函数 具体的命令 什么编码格式
比如:./phpggc ThinkPHP/RCE3 system() "cat /flag" --base64
再比如:./phpggc Yii2/RCE1 exec 'cp /fla* test.txt' --URL
注意:如果题目需要你进行base64编码或者url编码,一定要在这个命令这完成编码,不要把结果复制了拿去其它工具上编,很有可能就错了,所以要编码就直接在这个命令后面加参数;不需要编码就不加后面的参数
拿到CTF题目来说明一下:
提示访问public目录,啥也没有,扫描网站发现www.zip源码在里边。看见一个README.md文档,这个文档说明了这是thinkphp 6.0的版本
关键代码在app目录下的controller目录下的index.php文件里面:
看到反序列化函数了,并且知道了版本是有漏洞的,那就直接可以用phpggc工具了
拿到flag