Typecho 博客漏洞getshell利用详情



            Typecho是由type和echo两个词合成的,来自于开发团队的头脑风暴。Typecho基于

PHP5开发,支持多种数据库,是一款内核强健﹑扩展方便﹑体验友好﹑运行流畅的轻量级

开源博客程序。这段时间Typecho博客系统在2017年10月份里连续爆出了两个高位漏洞并可

以获取shell权限,先是SSRF漏洞可打内网,再是反序列化直接前台getshell漏洞,我们来分

析下这个Typecho 博客网站的源代码,对漏洞进行详解。官方人员已经对这些漏洞进行的及

时的修补并且推出了最新的版本,如果有用到这个博客源码的公司或者个人站长,请尽快升

级到最新版本。
 
 
SSRF漏洞
 
受影响的版本是Typecho 1.0 (14.10.10),首先是显示了 “源地址服务器错误” 的报错,经过全

局搜索发现报错是位于 var/Widget/XmlRpc.php 的 2046 行的 pingbackPing 函数,如下图:


 


 
调用了get的提交方法,如果失败则返回“源地址服务器错误”的报错,我们跟进get方法看一下,

大致意思是调用实例化 var/Typecho/Http/Adapter/ 目录下的Typecho_Http_Client_Adapter_

Curl和类Typecho_Http_Client_Adapter_Socket 类,分别位于Curl.php和Socket.php文件中。
 
如果 Curl存在就使用Curl的 curl_setopt 函数打开资源,否则使用Socket的 fsockopen 函数打

开资源,这两种方式都是打开资源的一种方式?Sine安全公司是一家专注于:服务器安全、

网站安全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务提供商。

一般来说 Curl 都是存在的,所以我们继续回到 var/Widget/XmlRpc.php 的2046行的

pingbackPing 函数,向下看:

 

 
$http->setTimeout(5)->send($source);
 
直接在Curl.php和Sockt.php中是找不到send函数的,send函数是在这两个类继承的 Typecho_

Http_Client_Adapter类中在 var/Typecho/Http/Client/Adapter.php中的第300行可以看到

send函数:
 
第338行,$response = $this->httpSend($url); 调用了本类的httpSend函数,转向var/Typecho/

Http/Client/Adapter/Curl.php中第41行开始,一直到51行,都没有对传入的url进行检测,

到51行后:如下图
 

 
SSRF漏洞具体利用
 
我们先看一下业务的逻辑,位于 var/Widget/XmlRpc.php 的 2046 行的 pingbackPing 函数:
 
 
如果实例化类失败,返回 '源地址服务器错误',如果探测成功,并且返回码为 200 则返回

'源地址不支持 PingBack ' ,如果探测成功,但返回码不是 200 ,则返回 '源地址服务器错误'    
 
所以我们探测端口主要就是通过返回码 200 这个地方。Sine安全公司是一家专注于:服务器

安全、网站安全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务

提供商。
 
利用一:端口检测
 
根据回显的不同,检测端口是否开启
 
payload:
 
curl "https://sinesafe.com/action/xmlrpc" -d '<methodCall><methodName>pingback.ping

</methodName><params><param><value><string>http://127.0.0.1:3333</string>

</value>

</param><param><value><string>joychou</string></value></param></params>

</methodCall>'
 
如果端口开启,则返回“源地址不支持PingBack”,如果端口没有开启,则返回 “源地址服务器

错误”利用二:攻击Redis,利用 Redis 默认空密码的特性,直接打内网,一般大型网站才会用

Redis。
分享: