Web安全 PHP反序列化漏洞的 测试.(可以 防止恶意用户利用漏洞)-爱代码爱编程
💛你逆光而来💚,💛配得上所有的美好💚
🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴
🍪目录:
🌲PHP中有两个函数 serialize() 和 unserialize()
🌲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反序列化漏洞原理