0x01 前言
Typecho install.php中存在反序列化漏洞,导致远程代码执行。
0x02 漏洞分析
漏洞产生位置
漏洞产生在安装文件中,而前面代码只是做了简单的安装判断和跨站请求过滤,只需要对finish,REFEREER进行构造即可绕过。
接着向下分析,这里反序列化的参数是可以直接通过cookie或者post由用户控制的,所以我们只需要找到可利用的方法即可。
我们知道反序列化是将一个休眠对象(字符串)激活为一个对象,激活过程中会调用几种方法,我们只需要找到能够利用的方法即可。
这里主要方法有1
2
3__wakeup()
__construct()
__toString()
对前两种方法进行全局搜索后均没有找到可以利用的地方。__toString()方法在类被做字符串处理时会被调用,如字符串拼接、输出操作等。而下面在创建新的Typecho_Db对象时,其构造函数中刚好对反序列化的内容进行了字符串拼接操作,给toString方法的利用带来了可能。
但是在搜索toString方法时,因为水平不足并没有发现可以利用的点,这里向各位大神表示敬佩。
在Typecho_Feed的toString方法中第358行$item[‘author’]调用screenName属性,如果该实例化对象用于从不可访问的属性读取数据,便会触发get()魔术方法。那么便可以进一步搜索__get()方法。
然后找到Typecho_Request类中的__get方法
继续跟踪get
最终在_applyFilter方法中找到可以利用的点,call_user_func
1 | //exp |
0x03 修复方法
删除install.php