网站地图    收藏   

主页 > 后端 > 网站安全 >

PHP序列化函数unserialize/serialize在漏洞挖掘中的利

来源:自学PHP网    时间:2015-04-17 13:03 作者: 阅读:

[导读] 刚做PHP代码审计不久,之前有听说过unserialize的问题,不过都没有仔细去深入研究过。正好这段时间在审计某系统的时候看到了使用unserialize函数,便花了点时间去研究了下。同时也特别...

刚做PHP代码审计不久,之前有听说过unserialize的问题,不过都没有仔细去深入研究过。正好这段时间在审计某系统的时候看到了使用unserialize函数,便花了点时间去研究了下。同时也特别感谢下在过程中给我提供不少帮助的黑哥黑友们。
 
unserialize函数功能和用法就没必要详细说了,毕竟这个不是本文的重点,而且官方的手册专业了点,有点难懂。不了解的朋友可以自信先去baidu搞清楚serialize和unserialize到底是干什么的。
 
unserialize函数是PHP中使用率非常高的函数,但不正当使用unserialize将导致比较严重的安全隐患。首先我们来看个例子:
 
//test.php
 
<?php
class Example {
var $var = '';
function __destruct() {
eval($this->var);
}
}
unserialize($_GET['code']);
?>
如上代码就是一个典型的问题,如果我们能提交数据给unserialize函数进行反序列化,并且unserialize函数所在程序能调用Example类的话我们就可成功的利用了。以上代码是将class和unserialize函数写在同一个文件中,实际的如果是unserialize函数所在页面include了Example所在程序一样。
 
如上代码我们可以直接提交()";} 就执行了phpinfo()。
 
但在实际的应用当中却不是那么容易的,以上代码只是我们意愿中的程序流程,要能成功利用unserialize函数来GetShell还是有很多条件限制的,一下就是限制条件,也是个人理解,有错误的地方还希望读者能指出。
 
userialize函数的利依赖于自定义普通类中的解析函数__destruct(),该函数在新建类的对象的时候会自动的调用。因此unserialize的利用也就依赖于类,不适用于函数。在类中若有其他在新建类对象的时候会自动调用的函数均可利用。
 
总结下来就是unserialize的成功利用首先要能调用自定义类,并且在类中有对象创建时候自动调用的Magic Methods,最重要的还是要这些Magic Methods中有可利用代码或者程序流程,如上的代码在__destruct()中就有个eval函数,当然这里也可以是其他的,例如fwrite fputs等等危险函数。若以上条件都具备的话也大可不用担心变量值的问题,类中那些变量完全可以自定义了!如上的Exp中我们就把var这个变量值赋成phpinfo()。
 
以上都是个人对unserialize利用的理解了,有错误的地方还希望大家能指出讨论。对unserialize笔者也只是肤浅的了解了下,深入的还有待和其他有经验的大大们交流

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论