菜单

跨站脚本 (XSS)

相关源文件

跨站脚本(XSS)是一种通常存在于 Web 应用程序中的计算机安全漏洞。XSS 允许攻击者将客户端脚本注入到其他用户查看的网页中。这可能允许攻击者绕过访问控制、窃取 cookie 和会话令牌等敏感信息、操纵 Web 内容或将用户重定向到恶意网站。

有关 XML 外部实体注入的信息,请参阅XML 外部实体 (XXE) 注入。有关命令注入技术,请参阅命令注入

XSS 攻击类型

XSS 攻击主要有三种类型,每种类型都有不同的特征和攻击向量

来源:XSS Injection/README.md45-53

  • 反射型 XSS:恶意代码嵌入在一个发送给受害者的链接中。当受害者点击该链接时,代码将在其浏览器中执行。此攻击不是持久性的,并且需要受害者与特制的链接进行交互。

  • 存储型 XSS:恶意代码存储在服务器上(例如,数据库、留言板、评论字段)。当受害者查看受影响的页面时,代码将在其浏览器中执行。此攻击是持久性的,并且可以影响多个用户。

  • 基于 DOM 的 XSS:漏洞存在于客户端 JavaScript 代码中。当 Web 应用程序以不安全的方式修改用户浏览器中的文档对象模型 (DOM) 时,通常会使用来自不受信任源的数据。攻击向量不会发送到服务器,这使得检测更加困难。

攻击流程和数据泄露

在利用 XSS 漏洞时,攻击者通常旨在捕获敏感数据或以受害者的身份执行操作。以下是典型的 XSS 攻击进程:

来源:XSS Injection/README.md61-70

概念验证示例

数据抓取器

这些载荷可以捕获受害者浏览器中的敏感信息

来源:XSS Injection/README.md66-69

攻击者可以使用简单的服务器端脚本收集这些数据

来源:XSS Injection/README.md74-80

UI 假冒

此技术会修改页面的 HTML 内容以显示一个伪造的登录表单

来源:XSS Injection/README.md100-103

JavaScript 键盘记录器

捕获受害者的击键记录

来源:XSS Injection/README.md111

识别 XSS 漏洞

在测试 XSS 时,了解载荷将被执行的上下文很重要。使用 alert(document.domain) 而不是仅仅使用 alert(1) 有助于确认执行上下文

来源:XSS Injection/README.md144

用于在沙盒环境中测试

来源:XSS Injection/README.md152

测试工具

一些工具可以帮助识别 XSS 漏洞

工具描述
XSSStrike流行但维护不佳
xsser使用无头浏览器进行检测
Dalfox快速且功能丰富(Go)
XSpear类似于 Dalfox,但基于 Ruby
domdig无头 Chrome XSS 测试器

来源:XSS Injection/README.md165-169

不同上下文中的 XSS

XSS 载荷会因插入的上下文而异。以下是常见场景和相应的载荷:

HTML/应用程序上下文

来源:XSS Injection/README.md176-195 XSS Injection/README.md218-219

常见载荷

基本脚本标签

具有错误事件的图片标签

SVG 元素

来源:XSS Injection/README.md176-207

HTML5 特定向量

HTML5 引入了可用于 XSS 的新标签和事件

来源:XSS Injection/README.md221-236

JavaScript 上下文注入

注入到 JavaScript 上下文时

来源:XSS Injection/README.md278-280

URI 包装器漏洞利用

使用 JavaScript 协议

来源:XSS Injection/README.md288-309

使用 data 协议

来源:XSS Injection/README.md315-317

文件中的 XSS

XML

来源:XSS Injection/README.md341-346

SVG

来源:XSS Injection/README.md389

XSS in PostMessage

通过 postMessage 利用跨域通信

来源:XSS Injection/README.md466-486

盲注 XSS

盲注 XSS 发生于载荷在一个攻击者无法直接看到的环境中执行时,例如管理员面板或日志审查界面。

来源:XSS Injection/README.md492-529

盲注 XSS 工具

一些工具专门用于检测和利用盲注 XSS

来源:XSS Injection/README.md502-504

其他工具包括

  • sleepy-puppy (Netflix)
  • bXSS
  • ezXSS

来源:XSS Injection/README.md509-511

常见的盲注 XSS 目标

  • 联系表单
  • 技术支持系统
  • 日志查看界面
  • 管理面板
  • User-Agent 头处理系统
  • 评论审核系统

来源:XSS Injection/README.md515-525

变异 XSS

变异 XSS 利用浏览器的一些怪癖,在 HTML 标签被安全过滤器处理后重新创建它们

来源: XSS Injection/README.md549

过滤器绕过技术

许多应用程序都实现了旨在阻止恶意输入的 XSS 过滤器。以下是一些常见的绕过技术

区分大小写绕过

来源: XSS Injection/1 - XSS Filter Bypass.md48-49

标签黑名单绕过

来源: XSS Injection/1 - XSS Filter Bypass.md58-59

通过编码绕过

HTML 编码

Unicode 编码

来源: XSS Injection/1 - XSS Filter Bypass.md431-432 XSS Injection/1 - XSS Filter Bypass.md477

Polyglot XSS

Polyglot XSS 有效载荷可以在多种上下文中工作

来源: XSS Injection/2 - XSS Polyglot.md8

实验室和练习

为了获得 XSS 漏洞的实践经验,请尝试以下实验室

  • PortSwigger Web Security Academy XSS 实验室
  • Root Me XSS 挑战(反射型、存储型、DOM 型)

来源: XSS Injection/README.md555-566

参考文献和延伸阅读

有关特定 XSS 技术和真实世界示例的更多信息,请参考

  • 后渗透技术(数据泄露、Cookie 盗窃)
  • 高级过滤器绕过方法
  • 大型平台中的 XSS documented 案例
  • 浏览器特定的怪癖和行为

来源: XSS Injection/README.md570-607