[反序列化篇]史上最全PHP反序列化漏洞实例复现姿势详解(补充ing)

0x01

实验环境

靶场:pikachu+LKWA

平台:bugku+攻防世界+0CTF+南邮ctf+其他

环境:win10+VPS(ubuntu)+Docker

工具:Burp+MantraPortable

预备知识

Session反序列化漏洞

phar://协议

phar文件

简单回顾

对上一篇博客做一些补充:
所谓序列化(serialize),即把一个对象变成易存储的字符串,比如下面是一个对象:

class OWL{
   
    public $aaa="bbb";
}
$o=new OWL(); //创建一个对象
serialize($o); //把这个对象进行序列化
# 序列化后:
O:1:"S":1:{
   s:3:"aaa";s:3:"bbb";}
        O:对象object
        1:对象名称长度为1个字符
        S:对象名称
        1:对象属性个数为1(public)
        s:数据类型
        3:变量名称长度
        aaa:变量名称
        s:数据类型
        3:变量值长度
        bbb:变量值

与它相对应的反序列化则是把被序列化后的字符串还原为之前的对象.

0x02

1.php反序列化漏洞(Pikachu)

靶场:Pikachu

在这里插入图片描述
贴上unser.php的源码:

class S{
   
    var $test = "pikachu";
    function __construct(){
      //类S的魔术方法被__construct()重写了
        echo $this->test;     //现在的作用是直接输出test的值
    }
}

$html='';
if(isset($_POST['o'])){
   
    $s = $_POST['o'];
    if(!@$unser = unserialize($s)){
   
        $html.="<p>大兄弟,来点劲爆点儿的!</p>";
    }else{
   
        $html.="<p>{
     $unser->test}</p>";
    }
}

审计上面的源码可以知道:

  • 类S的魔术方法被__construct()重写,直接输出test的值
  • 以post的方式传参给$o,然后在赋值给$unser
  • @表示不再有回显
  • 若赋值成功, 即将$s反序列化, 并作为p标签返回到网页中

解题思路:

这里要输出$s的反序列化后的值,且再无任何过滤和限制,那么我们如果提交一个序列化后的参数,则网页会给我们返回序列化前的参数(利用点),一般涉及浏览器我也只知道XSS了,所以在这里构造一个序列化后的xss payload,那unser.php反序列化后,正好会触发我们提交的payload,即可利用成功.

下面我们开始利用,先要构造一个序列化后的payload:

<?php
// 注意
//这里需要满足与目标后端的类名一致
//因为这样目标后端反序列化后的payload才是我们想利用的
class S{
   
    var $test 
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值