代码编织梦想

💛你逆光而来💚,💛配得上所有的美好💚

🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴

     

🍪目录:

                  🌲PHP反序列化漏洞的 概括:

         🌲序列化和反序列化的理解:

         🌲PHP中有两个函数 serialize() 和 unserialize()

         🌲常见的几个魔法函数:

🌲靶场:

                  🌲PHP反序列化漏洞测试:

                   🌻1.利用PHP反序列化漏洞来 复现XSS漏洞.

         🌲修复和防御:


🌲PHP反序列化漏洞的 概括:

🌾🌾🌾开发的程序员 没有对用户输入的序列化字符串做一个严格检测,导致恶意的用户可以控制反序列化的一个过程,因此导致XSS漏洞,代码执行,SQT注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。在进行反序列化的时候就有可能触发对象中的一些魔术方法。

      

🌲序列化和反序列化的理解:

🍉序列化理解:就是将对象转换成字符串。

🍉反序列化理解:数据的格式转换对象的序列化利于对象的保存和传输,也可以让多个文件共亨对象。

    

🌲PHP中有两个函数 serialize() unserialize()

serialize()              //将一个对象转换成一个字符串
unserialize()            //将字符串还原成一个对象

🍉使用时的代码的理解:

🍓(1)序列化 serialize()

//序列化serialize()将一个对象转换成一个字符串
<?php
    class S{                                //class是类.S是类名
        public $test="bgxg111";         //public 访问控制修饰符,$test是一个变量,bgxg111是变量的值.
    }
    $s=new S();                 //new是 将类实例化成对象.
    echo serialize($s);             //serialize()函数是 把 $s 这个对象进行序列化.
?>
    序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"bgxg111";}
    //    O:代表object   或  i:代表数组.
    //    4:代表对象名字长度.
    //    S:对象的名称.
    //    1:代表对象里面的个数.
    //    s:数据类型(string)
    //    4:变量名称的长度.
    //    test:变量名称
    //    s:数据类型
    //    7:变量值的长度
    //    bgxg111:变量值
    

🍓(2) 反序列化 unserialize()

//就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。
<?php
    $u='O:4:"bgxg":1:{s:4:"test";s:7:"bgxg111";}';        //将系列化复制给变量u
    var_dump(unserialize($u));        //unserialize()是反系列化.
?>
//结果:object(__PHP_Incomplete_Class)#1 (2) { ["__PHP_Incomplete_Class_Name"]=> string(4) "bgxg" ["test"]=> string(7) "bgxg111" } 
    

🌲常见的几个魔法函数:

__construct()                  #当一个对象创建时被调用
__destruct()                  #当一个对象销毁时被调用
__toString()                  #当一个对象被当作一个字符串使用
__sleep()                     #在对象在被序列化之前运行
__wakeup()                  #将在序列化之后立即被调用
漏洞的代码:

class S{
    var $test = "bgxg111";
    function __destruct(){
        echo $this->test;
    }
}
$s = $_GET['test'];
@$unser = unserialize($a);

     

🌲靶场:

🍉本地自己搭建的 Pikachu(皮卡丘)靶场:安装在win XP(IP地址:192.168.1.104)

🍉Pikachu(皮卡丘)靶场搭建链接:Web安全 Pikachu(皮卡丘)靶场搭建._半个西瓜.的博客-CSDN博客

      

🌲PHP反序列化漏洞测试:

🌻1.利用PHP反序列化漏洞来 复现XSS漏洞.

🍉(1)编写一个PHP序列化代码.

<?php                    // 构造与目标后端同一个类
    class S{                                //class是类.S是类名
       public $test="<script>alert('xss')</script>";         //var 访问控制修饰符,$test是一个变量,<script>alert('xss')</script>是变量的值.
    }
    echo '<br>';                
    $s=new S();                 //new是 将类实例化成对象.
    echo serialize($s);            //serialize()函数是 把 $s 这个对象进行序列化.
?>

🍉(2)去浏览这个文件.(因为我是写在靶场里的.

     

🍉(3)点击查看页面源代码.(复制.

🍓序列化的代码:

O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

      

🍉(4)来到一个有PHP反序列化漏洞的地方(进行测试

     

🍉(5)成功执行了序列化里面的XSS漏洞代码进行弹框.(说明:有反序列化漏洞.

      

🌲修复和防御:

🍉反序列化漏洞是用户可以控制传入的参数引起的,预防措施就是不要把用户的输入或者是用户可控的参数直接放到进反序列化的操作中去执行就可以了.

     

      

     

参考链接:PHP反序列化漏洞_Qwzf的博客-CSDN博客_php反序列化漏洞防御

参考链接:pikachu靶场 :十二、PHP反序列化_CNwanku的博客-CSDN博客_皮卡丘靶场反序列化

参考链接:PHP反序列化漏洞——漏洞原理及防御措施_IT—INTEREST_挪吒的博客-CSDN博客_php反序列化漏洞原理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_54977781/article/details/123691784

PHP反序列化漏洞说明-爱代码爱编程

序列化 PHP程序为了保存和转储对象,提供了序列化的方法,序列化是为了在程序运行的过程中对对象进行转储而产生的。 序列化可以将对象转换成字符串,但仅保留对象里的成员变量,不保留函数方法。 PHP序列化的函数为serialize,反序列化的函数为unserialize. 举个栗子: <?php class Test{ publi

PHP反序列化漏洞-爱代码爱编程

以前我觉得成绩不重要,清华北大只能代表学生时代的成就,后来才发现,努力是种习惯,他会贯穿一生。。。 ----  网易云热评 一、创建类和对象 <?php #创建一个Jay专辑类 class Jay{      public $name;     public $year;     public $mus; }   #创建一个Ja

反序列化漏洞分析讲解-爱代码爱编程

一、什么是反序列化 1.1 漏洞简介 PHP反序列化漏洞也叫PHP对象注入,是一个非常常见的漏洞,这种类型的漏洞虽然有些难以利用,但一旦利用成功就会造成非常危险的后果。漏洞的形成的根本原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列不可控的后果。反序列化漏洞并不是PHP特有,也存

【WEB】反序列化漏洞(更新中)-爱代码爱编程

不安全的反序列化 0x00 前言0x01 什么是序列化?0x02 序列化与反序列化0x03什么是不安全的反序列化?0x04不安全的反序列化漏洞如何产生?0x05不安全的反序列化有何影响?0x06利用反序列化漏洞如何识别不安全的反序列化PHP序列化格式Java序列化格式处理序列化对象修改对象属性修改数据类型使用应用程序功能 0x00 前言 在本

【夯实Java基础05】为什么面试官总喜欢问StringBuffer 和 StringBuilder 的区别-爱代码爱编程

本文已收录至我的GitHub:Java开发宝典,欢迎大家给个Star:https://github.com/eson15/javaAll 我会持续更新,欢迎star! 微信搜索:武哥聊编程,关注这个Java菜鸟~ 文章目录 1. 相同点2. 不同点作者info StringBuilder 和 StringBuffer 的问题已经是老

反序列化漏洞-爱代码爱编程

文章目录 一、序列化和反序列化1、序列化2、反序列化二、PHP序列化三、Java序列化格式1、JDK类库中序列化和反序列化API2、实现序列化的要求3、实现Java对象序列化与反序列化的方法4、JDK类库中序列化的步骤5、JDK类库中反序列化的步骤6、序列化和反序列化的示例四、什么是反序列化漏洞?五、挖掘反序列化漏洞六、反序列化漏洞的利用1、修改对

php反序列化漏洞条件,PHP反序列化漏洞总结-爱代码爱编程

写在前边 做了不少PHP反序列化的题了,是时候把坑给填上了。参考了一些大佬们的博客,自己再做一下总结 1.面向对象 2.PHP序列化和反序列化 3.PHP反序列化漏洞实例 1.面向对象 在了解序列化和反序列化之前,先简单了解一下PHP的面向对象。 万物皆可对象。根据官方手册,PHP中,以关键字class定义一个类,一个类可以包含有属于自己

php 序列化漏洞,PHP反序列化漏洞成因及漏洞挖掘技巧与案例 | ADog's Blog-爱代码爱编程

最近在深入研究php的反序列化,觉得Test404这篇可能是同类当中写的最好的,不过不知道这篇出处是不是360的。。在这里转载一下以便新人学习~ 翻译:hac425 一、序列化和反序列化 序列化和反序列化的目的是使得程序间传输对象会更加方便。序列化是将对象转换为字符串以便存储传输的一种方式。而反序列化恰好就是序列化的逆过程,反序列化会将字符串转换

个php反序列化漏洞,PHP反序列化漏洞学习(一)-爱代码爱编程

前言:PHP反序列化也是web安全中常见的一种漏洞,这次就先来大致了解一下PHP反序列化漏洞的基础知识。 一、PHP序列化和反序列化 在学习PHP反序列化漏洞时,先来了解一下基础的知识。 (一)PHP序列化 函数 : serialize()所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。 序列化一

详解PHP反序列化漏洞-爱代码爱编程

详解PHP反序列化漏洞 序列化与反序列化定义常见使用情况常见的序列化格式反序列化中常见的魔术方法反序列化绕过protected和private绕过__wakeup绕过(CVE-2016-7124)引用利用16进制绕过字符过滤同名方法的利用绕过部分正则字符逃逸字符增多字符减少对象注入session反序列化漏洞session定义PHP session工

反序列化漏洞总结-爱代码爱编程

目录 1.了解序列化和反序列化 2.php反序列化和序列化 2.1无类序列化和反序列化演示 2.2有类序列化和反序列化演示 2.2.1类的理解  2.2.2有类序列化过程 2.2.3有类反序列化过程  3.魔法方法 4.简单案列 4.1__wakeup()反序列化案列 4.2.pikachu的反序列漏洞案列 4.3其他函数利用 5

反序列化漏洞详解-爱代码爱编程

目录 一、什么是序列化和反序列化 二、什么是反序列化漏洞 三、序列化函数(serialize) 四、反序列化(unserialize) ​五、什么是PHP魔术方法 六、一些常见的魔术方法 七、魔术方法的利用  八、反序列化漏洞的利用 1.__destruct()函数 2.__wakeup() 3.toString() ​九、反序列化