声明:
由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。
笔记内容来源于各类网课。
环境:
XSS Challenges Stage #4:http://xss-quiz.int21h.jp/ , Firefox浏览器,BurpSuite
一、概述
隐藏提交参数中的XSS。
二、表单隐藏域和SVG
隐藏域是用来收集或发送信息的不可见元素,对于网页的访问者来说,隐藏域是看不见的。当表单被提交时,隐藏域就会将信息用你设置时定义的名标和值发送到服务器上。
SVG意为可缩放矢量图形(Scalable Vector Graphics)。SVG使用XML格式定义图像。SVG文件可通过以下标签嵌入HTML文档:
<embed>、<object> 或者<iframe> 。也可以使用<svg>标签插入。
利用svg中的事件(例如onload)触发JS脚本。
<svg onload=alert(1); />
更多关于svg的信息。
三、XSS探测过程
1. 正常的数据提交
提交数据123abc。
2. 代码审查
通过代码审查和POST请求分析,发现一个隐藏域,和两个数据回显的地方。
我们通过BurpSuite进行抓包,依次尝试是否有注入点。
首先是对p1参数:
强制识别为字符串,无法进行注入。
然后是对p2参数:
强制识别为字符串,无法注入。
最后是对p3参数:
我们的脚本成功注入input的value属性中。我们使用闭合引入script和闭合引入事件都可实现XSS。
我们尝试使用闭合引入script进行触发。
hackme"> <script>alert(1);</script>
成功执行JS脚本。
3. 构造Payload
我们可使用BurpSuite抓包,使p3为如下值:
p3 = hackme"> <script>alert(document.domain);</script>
成功嵌入JS脚本、并执行。
或者使用svg标签尝试注入脚本。
p3=hackme"> <svg onload=alert(document.domain)>
同样成功注入JS脚本,并执行。