码迷,mamicode.com
首页 > Web开发 > 详细

php反序列化漏洞复现

时间:2019-08-30 21:09:35      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:mamicode   就会   image   函数   步骤   而在   info   test   调用   

超适合小白的php反序列化漏洞复现

写在前头的话

在OWASP TOP10中,反序列化已经榜上有名,但是究竟什么是反序列化,我觉得应该进下心来好好思考下。我觉得学习的时候,所有的问题都应该问3个问题:what、why、how。what:什么是反序列化,why:为什么会出现反序列化漏洞,how:反序列化漏洞如何利用。

在这里我对反序列化的原理不做详细介绍,大家可以自行到网上搜索。在这里我只叙述自己的复现过程,超简单的好不。

实验环境

Windows 10+phpstudy 2016

实验步骤

测试代码

PHP序列化代码

起PHP反序列化,那必须先简单说一下PHP的序列化。PHP序列化是将一个对象、数组、字符串等转化为字节流便于传输,比如跨脚本等。而PHP反序列化是将序列化之后的字节流还原成对象、字符、数组等。但是PHP序列化是不会保存对象的方法。

技术图片

 

 

测试代码  如图:

 技术图片

 

 

PHP反序列化代码

PHP类中有一种特殊函数体的存在叫魔法函数,magic函数命名是以符号__开头的,比如 __construct, __destruct, __toString, __sleep, __wakeup等等。这些函数在某些情况下会自动调用,比如__construct当一个对象创建时被调用,__destruct当一个对象销毁时被调用,__toString当一个对象被当作一个字符串使用。

而在反序列化时,如果反序列化对象中存在魔法函数,使用unserialize()函数同时也会触发。这样,一旦我们能够控制unserialize()入口,那么就可能引发对象注入漏洞。

 技术图片

 

 

如上述代码,构造payload:

http://127.0.0.1:8888/phpxuliehua/test.php?test=O:1:"A":1:{s:4:"test";s:31:"<audio src=x onerror=alert(47)>";}  

反序列化后在脚本运行结束时就会调用_destruct函数,同时会覆盖test变量,然后弹窗

 技术图片

 

深度利用

我们可以利用该漏洞点,控制输入变量,拼接成一个序列化对象。然后再构造一个魔法函数,比如在_destruct()函数中调用eval执行序列化对象中的语句。

 技术图片

 

 

测试效果如图所示

 技术图片

 

 

既然都可以执行命令了,其他的大佬们自行操作把。

 

php反序列化漏洞复现

标签:mamicode   就会   image   函数   步骤   而在   info   test   调用   

原文地址:https://www.cnblogs.com/zy-king-karl/p/11436858.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!