mcpField
H
hunt-clickjacking

hunt-clickjacking

github.com/elementalsouls安全5.3k198 次安装今天更新
代码仓库

关于 hunt-clickjacking

用于评估网页点击劫持风险的安全技能。它不把缺少防护响应头直接视为漏洞,而是要求在真实浏览器中证明跨站框架内的敏感操作确实可行。

主要功能

  1. 01检查 X-Frame-Options 和 CSP 框架指令
  2. 02在真实浏览器中测试页面嵌入
  3. 03验证跨站登录状态与操作
  4. 04排除只读页面和误报

适用场景

  1. 01评估转账和结账页面
  2. 02审查账户及管理操作
  3. 03验证 OAuth 授权对话框

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/elementalsouls/claude-bughunter --skill hunt-clickjacking

安装后在 Claude Code 中输入/hunt-clickjacking确认已加载。

详细介绍

什么是点击劫持

点击劫持(UI 重整)允许攻击者在恶意网站上通过透明 iframe 加载目标页面。受害者看到的是攻击者的诱饵界面,点击的却是其下方隐藏的目标界面。目标页面无需运行任何 JavaScript。

价值最高的目标:

  • 登录/身份验证页面——使用攻击者的凭据强制登录
  • 转账/结账/“确认付款”按钮
  • 账户设置(更改邮箱、更改密码、禁用 2FA)
  • OAuth/社交登录“授权应用”确认对话框
  • 管理员操作(删除、提升用户权限、更改角色)

防护响应头

有两种机制可以阻止页面被嵌入框架:

X-Frame-Options: DENY              # strongest — blocks all framing
X-Frame-Options: SAMEORIGIN        # allows same-origin frames only
Content-Security-Policy: frame-ancestors 'none'     # CSP equivalent of DENY
Content-Security-Policy: frame-ancestors 'self'     # CSP equivalent of SAMEORIGIN

如果两者都不存在,任何来源都可以将该页面嵌入框架。

如何测试

缺少响应头是开始调查的触发条件,而不是发现本身。分两步进行:

步骤 1——检查响应头(筛查)。 获取目标页面并检查响应头:

curl -sI https://target.example/account/transfer | grep -iE 'x-frame-options|content-security-policy'

如果 X-Frame-Options 和 CSP frame-ancestors 都不存在,该页面就是一个候选目标。如果其中任一项存在且有限制性(DENY/SAMEORIGIN/frame-ancestors 'none'|'self'),则停止测试——该页面已受到保护。

步骤 2——证明页面确实能被嵌入并触发点击(确认实际发现所必需)。 构建一个最简 PoC,并在真实浏览器中加载:

<!doctype html>
<h1>Win a prize — click below</h1>
<iframe src="https://target.example/account/transfer"
        style="opacity:0.1;position:absolute;top:0;left:0;width:1000px;height:800px"></iframe>

必须确认以下所有条件,否则该漏洞无法利用:

  • 页面确实在 iframe 内呈现(没有会清空页面或重定向的防框架 JavaScript,例如 if(top!==self) 跳出框架,或 Sec-Fetch-Dest/JavaScript 框架检查)。
  • 嵌入框架时,敏感操作仍然有效——关键是,该操作必须能够跨站成功。如果操作依赖设置为 SameSite=Lax 或 SameSite=Strict(现代默认值)的会话 Cookie,那么跨站框架请求不会发送该 Cookie,点击劫持就会失败。请验证受害者的已登录状态是否会延续到框架中。
  • 目标是会改变状态的操作(转账、更改设置/邮箱/密码、禁用 2FA、OAuth 授权、管理员操作),而不是只读页面。

策略: 优先针对最敏感的操作页面——严重程度直接取决于受害者被诱骗执行的操作。

误报

  • 缺少框架保护的公开只读页面(首页/营销页面)风险较低或仅具提示意义——没有可被诱骗执行的敏感操作。
  • API 和非 HTML 端点(JSON、图片)不是点击劫持的目标。
  • 仅缺少响应头并不构成发现。 SameSite Cookie、防框架 JavaScript,或不存在任何可在框架中触发的敏感操作,都可能彻底阻止攻击——这就是步骤 2 必不可少的原因。

证明要求

有效的点击劫持报告应展示:(1) 目标页面在真实浏览器中呈现在攻击者控制的 iframe 内;(2) 受害者处于已登录状态时,可通过框架内的点击触发一项敏感的状态更改操作(Cookie 能在跨站上下文中正常发送);(3) 覆盖层的截图或录屏。仅报告缺少响应头,但没有可用的框架 PoC,属于文档质量问题,而不是漏洞。

评论

支持 Markdown