时间:2016-12-21来源:本站原创作者:佚名

0x01后台反序列化位置首先纵览整个phpwindv9,反序列化的位置很多,但基本都是从数据库里取出的,很难完全控制序列化字符串。最后,找到三处:

可恶的是,三处都在后台的Task模块下。Task模块是『任务中心』功能,只有能进入后台的用户才可以访问:

随便打开一个,src/applications/task/admin/TaskConditionMemberController.php

code区域

classTaskConditionMemberControllerextendsAdminBaseController{/*(non-PHPdoc)*

seeAdminBaseController::befoAction()*/publicfunctionbefoAction($handlerAdapter){pant::befoAction($handlerAdapter);$var=unserialize($this-getInput(var));if(is_array($var)){$this-setOutput($var,condition);}}

befoAction将会在实际执行Action之前执行。这里$var=unserialize($this-getInput(var));,从Input中获取var参数的值,进行反序列化。这个Input可以来自get/post/cookie。我们只要在phpwind里找到反序列化可以利用的点,就能在这里触发反序列化漏洞。0x02PwDelayRun类__destruct方法全局搜一下关键词__destruct,很快找到了PwDelayRun类:

code区域

classPwDelayRun{privatestatic$instance=null;private$_callback=array();private$_args=array();privatefunction__construct(){}publicfunction__destruct(){foach($this-_callbackas$key=$value){call_user_func_array($value,$this-_args[$key]);}}...}

可见__destruct方法,其中遍历了_callback数组,用call_user_func_array执行任意函数。这里如果_callback可控,那么就可以直接执行assert+任意代码了。原本是一个十分简单的漏洞,但我们在TaskConditionMemberController::befoAction::unserialize里下断点,执行var_dump(get_declad_classes());exit;,查看当前已经定义的类:

code区域

Array([0]=stdClass[1]=Exception...[]=WindMysqlPdoAdapter[]=WindResultSet[]=AdminUserBo[]=AdminLogService[]=WindFile)

其中并没有PwDelayRun类。看来在反序列化的时候,并没有加载这个类,所以我即使构造了利用方法,也『造』不出PwDelayRun对象。那怎么办?0x03利用spl_autoload包含任意php文件在Joomla那个反序列化漏洞(







































哪里治疗白癜风专业
白癜风有那些症状

转载请注明原文网址:http://www.coolofsoul.com/phptx/14537.html

------分隔线----------------------------