☰
XSS haozi.me靶场通关笔记:从 0x00 到 0x09 的 Payload 与绕过思路
2026/10/1 8:19:49 网站建设 项目流程

免责声明:本文仅记录个人在授权 XSS 靶场中的学习过程,所有 Payload 仅用于合法测试环境,请勿用于未授权站点。

最近整理之前打过的 XSS 随堂靶场,想着既然打都打了,不如把通关过程整理成一篇博客。本文记录了从0x00到0x09共 10 关的 Payload、绕过思路和简单原理,适合刚接触 XSS 的朋友参考

一、环境说明

  • 靶场类型:XSS 练习靶场 / 随堂靶场

  • 浏览器:Chrome

  • 测试方式:在输入框提交 Payload,观察是否弹窗

  • 目标:理解反射型 XSS 中常见的闭合、过滤绕过与标签解析特性


0x00 无过滤:直接注入 script

考点:没有任何过滤,最基础的反射型 XSS。

Payload:

<script>alert(1)</script>

说明:

输入内容被直接输出到页面中,没有经过 HTML 实体编码,也没有过滤标签。浏览器把<script>当作脚本执行,成功弹窗。


0x01 textarea 标签闭合

考点:输入点位于<textarea>标签内部,需要先闭合标签。

Payload:

</textarea><svg/οnlοad=alert(1)>

说明:

如果直接输入<script>,它会被当成 textarea 的文本内容,而不会被执行。所以要先写</textarea>把前面的标签闭合,再插入 SVG 标签,利用onload事件触发 JS。

原文里写的是<textarea><svg/onload=alert(1)>,更准确地说,核心是先闭合</textarea>,再插入执行代码。


0x02 闭合 input 的 value 属性

考点:输入内容被放在<input>的value属性中。

Payload:

"><script>alert(1);</script>

说明:

输入内容在属性值里,直接写<script>不够,需要先用"闭合 value 属性,再用>闭合 input 标签,然后插入 script。


0x03 过滤括号:使用 JS 标签模板

考点:这一关正则全局过滤了括号()利用 JS 标签模板特性,用反引号代替括号调用函数,alert`1` 等价于 alert(1)

Payload:

<script>alert`1`</script>

所以当括号被过滤时,可以用反引号代替括号。注意这里不是单引号,而是反引号`。


0x04 过滤反引号:throw + window.onerror 绕过

考点:括号和反引号都被过滤,需要换一种方式执行代码。

Payload:

<img src οnerrοr="window.οnerrοr=eval;throw'=alert\x281\x29';">

这里利用了两个点:

  1. window.onerror = eval:把全局错误处理函数设置为eval。

  2. throw抛出字符串'alert(1);',其中括号用\x28、\x29十六进制表示,绕过括号过滤。

当throw触发错误时,window.onerror会接收错误信息,而它此时是eval,从而执行alert(1)。


0x05 注释闭合:使用--!>

考点:输入内容被包裹在 HTML 注释中,且过滤了常规注释闭合符-->。

Payload:

--!><script>alert(1)</script>

说明:

HTML 注释除了常见的-->,还可以用--!>闭合。靶场过滤了-->,但没有过滤--!>,于是可以突破注释,插入脚本。


0x06 换行绕过on...=过滤

考点:正则过滤了auto、on...=和>等敏感内容。

Payload:

onmouseover

=”alert(1)”

也可以写成 URL 编码形式:

onmouseover%0a="alert(1)"

说明:

源码正则过滤了 auto、on...= 和 >。但正则默认不匹配换行符,利用换行(%0a)把敏感词劈开,服务器无法识别,浏览器却能自动拼接执行,尝试在onmouseover和=之间插入换行符,绕过正则on.*=的匹配


0x07 不闭合标签绕过标签过滤

考点:正则/</?[^>]+>/gi会过滤所有<...>或</...>形式。

Payload:

<svg/οnlοad=alert(1)

说明:

正则要求匹配到>才认为是一个完整标签。这里故意不写最后的>,从而绕过过滤。浏览器有很强的容错解析能力,仍然会把<svg/onload=alert(1)解析成 SVG 标签并执行onload。


0x08 style 标签内闭合

考点:输入内容位于<style>标签内,样式标签不能直接执行 JS。

Payload:

</style ><img src="" οnerrοr=alert(1) >

说明:

需要先闭合</style>。这里在style和>之间加一个空格,写成</style >,可以绕过对</style>的精确匹配,浏览器仍能识别为样式结束标签。闭合后再插入<img>,利用onerror执行 JS。


0x09 src 属性突破

考点:输入必须以http://www.segmentfault.com开头,且会被插入到<script src="输入内容">中。

Payload:

http://www.segmentfault.com" οnerrοr="alert(1)

说明:

源码要求输入以http://www.segmentfault.com开头,才会插入<script src="输入内容">,需突破src属性限制,那可以尝试在合法URL后加双引号闭合src,再添加onerror事件进行绕过

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询