66秀直播,你喜欢的直播

最新漏洞 | Typecho被爆出后门可直接getshell

【摘要】2017年10月24日,Typecho被爆出install.php文件存在后门可以直接执行任意代码导致使用此系统的网站直接被getshell。攻击难度:低。危害程度:高。官方修复情况如下:https://github.com/ty...

2017年10月24日,Typecho被爆出install.php文件存在后门可以直接执行任意代码导致使用此系统的网站直接被getshell。
攻击难度:低。
危害程度:高。
官方修复情况如下:

    https://github.com/typecho/typecho/commit/e277141c974cd740702c5ce73f7e9f382c18d84e


    此漏洞的根源在于系统的安装文件install.php,因为在系统安装完之后是不会自动删除install.php文件的。
在install.php文件中,当设置了正确的referer(网站url即可),并且finish=1,然后就会执行下面这样一段代码:

    在这里系统从cookie中获取了键为__typecho_config的内容,然后base64解密并且使用不安全的unserialize函数反序列化,那么我们很容易想到:如果在cookie中的__typecho_config中构造特定的数据是不是就可以执行任意PHP代码了?

    下面我们就要分析系统代码,寻找并构造可以被执行的特定代码。

    注意上面的代码,可以看到被反序列化后的内容$config[‘adapter’]作为构造参数进入了Typecho_Db实例中,继续跟进Db.php文件中Typecho_Db类的构造函数:

    这里的$adapterName就是$config[‘adapter’],然后$adapterName进行了一个字符串拼接操作继续赋值给$adapterName。

    到这里如果有经验的大佬或者脑回路够大的话会想到,如果$adapterName是一个实例对象的话,那么这里进行字符串操作就会自动调用当前实例的__toString()魔术方法,当然这也有要对对象注入有一定的了解。

    不过你不了解对象注入、没有太多经验、脑回路也不够大的话那么我们审计到这里就先打一个问号,保存疑点,然后继续。

我们共可以发现三个疑点,将其结合起来:
    第一个疑点中的可控变量$adapterName进行字符串操作时,我们将$adapterName赋值为文件Feed.php中的Typecho_Feed类实例的话,这里就会调用Typecho_Feed类的__toString魔术方法;
    第二个疑点中我们把属性$this->_params和$this->_filter被设置为恶意的内容的Typecho_Request类实例赋值给第三个疑点中的$item[‘author’],当访问$item[‘author’]的属性screenName的时候就会执行到Request.php中的call_user_func危险函数,触发恶意代码的执行。


防护方案:
    请升级到官方的最新版即可。
参考链接:
    https://github.com/typecho/typecho/issues/619 


 小东
 简介:有丰富WEB开发经验,WEB安全相关经验,已承接各类外包项目20+,专业团队为您打造产品,有合作意向请联系QQ:1099718640

发表评论

游客
送你一朵小花花~

帅人已评(0)