php反序列化漏洞 freebuf,Typecho反序列化漏洞导致前台getshell

*本文原创作者:VIPKID安全团队,本文属FreeBuf原创奖励计划,未经许可禁止转载

最早知道这个漏洞是在一个微信群里,说是install.php文件里面有个后门,看到别人给的截图一看就知道是个PHP反序列化漏洞,赶紧上服务器看了看自己的博客,发现自己也中招了,相关代码如下:

0818b9ca8b590ca3270a3433284dd417.png

然后果断在文件第一行加上了die:

今天下午刚好空闲下来,就赶紧拿出来代码看看。

漏洞分析

先从install.php开始跟,229~235行:

0818b9ca8b590ca3270a3433284dd417.png

要让代码执行到这里需要满足一些条件:

0818b9ca8b590ca3270a3433284dd417.png

首先是$_GET['finish']不为空,其次是referer需要是本站,比较容易实现。

继续跟反序列化的地方:

$config = unserialize(base64_decode(Typecho_Cookie::get('__typecho_config')));

首先使用Typecho_Cookie的get方法获取__typecho_config,get方法如下:

0818b9ca8b590ca3270a3433284dd417.png

可以看到给$value赋值这一行,如果$_COOKIE里面没有就从$_POST里面获取,所以我们测试漏洞的时候直接POST也是可以的,不用每次设置Cookie了。

反序列化漏洞要利用势必离不开魔术方法,我之前收集了一些和PHP反序列化有关的PHP函数:

0818b9ca8b590ca3270a3433284dd417.png

下面这一行中,如果我们反序列化构造一个数组,其中adapter设置为一个类,那么就可以触发这个类的__toString()方法。

然后我们全局搜索__toString()方法,发现两个有搞头的文件:

/var/Typecho/Feed.php

/var/Typecho/Db/Query.php

我这里跟一下Feed.php,查看Feed.php的__toString()方法,其中第290行:

0818b9ca8b590ca3270a3433284dd417.png

其中调用了$item['author']->screenName,$item是$this->_items的foreach循环出来的,并且$this->_items是Typecho_Feed类的一个private属性。

我们可以利用这个$item来调用某个类的__get()方法,上面说过__get()方法是用于从不可访问的属性读取数据,实际执行中这里会获取该类的screenName属性,如果我们给$item['author']设置的类中没有screenName就会执行该类的__get()方法,我们继续来全局搜索一下__get()方法。

发现/var/Typecho/Request.php中的__get()方法如下:

public function __get($key)

{

return $this->get($key);

}

跟进$this->get()方法如下:

0818b9ca8b590ca3270a3433284dd417.png

这里没什么问题,但最后一行:

return $this->_applyFilter($value);

跟进一下发现:

0818b9ca8b590ca3270a3433284dd417.png

这个foreach里面判断如果$value是数组就执行array_map否则调用call_user_func,这俩函数都是执行代码的关键方法。而这里$filter和$value我们几乎都是可以间接控制的,所以就可以利用call_user_func或者array_map来执行代码,比如我们设置$filter为数组,第一个数组键值是assert,$value设置php代码,即可执行。

然后我们来完成Exploit如下:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

然后运行该php,使用输出的payload访问:

0818b9ca8b590ca3270a3433284dd417.png

至此该漏洞复现成功。

修复方法

官方今天发布了1.1Beta版本修复了该漏洞,升级该版本,链接:http://typecho.org/archives/133/

也可以删除掉install.php和install目录。

*本文原创作者:VIPKID安全团队,本文属FreeBuf原创奖励计划,未经许可禁止转载

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值