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 函数,如下图:
局搜索发现报错是位于 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文件中。
大致意思是调用实例化 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 函数,向下看:
开资源,这两种方式都是打开资源的一种方式?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函数:
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行后:如下图
Http/Client/Adapter/Curl.php中第41行开始,一直到51行,都没有对传入的url进行检测,
到51行后:如下图
SSRF漏洞具体利用
我们先看一下业务的逻辑,位于 var/Widget/XmlRpc.php 的 2046 行的 pingbackPing 函数:
如果实例化类失败,返回 '源地址服务器错误',如果探测成功,并且返回码为 200 则返回
'源地址不支持 PingBack ' ,如果探测成功,但返回码不是 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>'
</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。
错误”利用二:攻击Redis,利用 Redis 默认空密码的特性,直接打内网,一般大型网站才会用
Redis。