用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/cdxiaodong/cain-agent --skill csrf命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
XSS 测试技能 —— 面向真实业务系统,区分渲染上下文(HTML/属性/JS/CSS/URL),覆盖存储型/反射型/DOM 型,对抗 CSP 与输入过滤,产出可复现 PoC
SSRF 测试技能,覆盖盲 SSRF、内网可达性与七类主流云元数据服务的低影响验证
文件包含检测技能 —— 面向真实业务系统,定位接收文件路径参数的端点(页面渲染/模板加载/配置导入),通过注入路径遍历和 URL 参数探测应用是否未过滤用户输入的文件路径,验证 LFI(本地文件包含)和 RFI(远程文件包含)漏洞,产生可复现 PoC
基于 SOC 职业分类
正在显示 SKILL.md
| name | csrf |
| description | CSRF 检测技能 —— 面向真实业务系统,定位登录后状态改变操作(改资料/转账/删资源)缺失 CSRF Token 或 Referer 校验的端点,通过去 Token / 伪造 Referer 重放确认漏洞,产出可复现 PoC |
| phase | test |
| severity_focus | high |
定位:面向真实授权业务系统的 CSRF 验证,不是跑扫描器出报告。核心在于「识别哪些请求是真正的状态改变操作」并「证明攻击者可以跨站伪造该请求」——重点检测登录后敏感操作(修改用户信息、资金转账、删除资源、权限变更),而非 GET 请求的书签链接。
CSRF(Cross-Site Request Forgery)的本质是:Web 应用在执行状态改变操作时,仅依赖会话 Cookie 鉴别用户身份,而不验证该请求确实由用户主动发起。
GET /account/delete?id=123),攻击者只需诱导受害者访问含 <img src="..."> 的页面即可触发——危害最大但现代框架已少见。<form> + submit() + target=hidden_iframe)。Content-Type: application/json,传统表单无法直接构造——但如果服务端容忍 text/plain 或 application/x-www-form-urlencoded 伪装的 JSON 体,或 CORS 策略允许简单请求跨域,仍可被利用。Origin 或 Referer 头,或校验逻辑有缺陷(如只检查域名包含而非精确匹配、允许空 Referer),导致跨站请求被接受。关键判断依据:去除 CSRF Token 后重放请求,服务端仍然成功执行操作(返回 200 + 成功特征关键字,或数据库状态实际改变),即确认漏洞存在。
满足以下任一信号即应进入本技能(侦察阶段 endpoints.json 标注了候选 CSRF 端点):
Cookie: session=... 或 Authorization: Bearer 头存在,但请求体中没有额外的 CSRF Token 字段。?action=delete&id=...、?do=transfer&amount=...),违反 RESTful 原则。csrf_token / _token / authenticity_token / __RequestVerificationToken 等隐藏字段。Referer: https://evil.com/?target.com 通过了 contains("target.com") 校验)。流程:抓包分析 → 提取状态改变请求 → 去除 CSRF Token / 伪造 Referer → 重放 → 判断是否成功
csrf_token、_token、authenticity_token、__RequestVerificationToken、csrfmiddlewaretoken、_csrf)。Set-Cookie: csrf_token=xxx 且请求体或头中带同值)。X-CSRF-Token、X-XSRF-TOKEN、X-Requested-With)是否被服务端强制校验。核心验证动作——证明「没有 CSRF 防护时操作仍可执行」。
curl 重放去 Token 后的请求,观察响应。"success": true、"code": 0、"message": "操作成功"、"result": "ok")。当 CSRF Token 存在且有效时,测试同源校验是否有缺陷。
curl -H "Referer: https://evil.com/" 重放请求,观察是否被接受。curl 不带 Referer 头(模拟 <meta name="referrer" content="no-referrer"> 场景),观察是否被接受。Referer: https://target.com.evil.com/(利用 contains() 校验缺陷)。Origin 头伪造与缺失。确认漏洞后,构造最小可复现 PoC 证明攻击者可在第三方站点触发该操作。
<img src="https://target.com/account/delete?id=123" style="display:none"><form id="csrf-form" action="https://target.com/api/transfer" method="POST">
<input type="hidden" name="to_account" value="attacker_account">
<input type="hidden" name="amount" value="10000">
</form>
<script>document.getElementById('csrf-form').submit();</script>
text/plain):<form id="csrf-form" action="https://target.com/api/settings" method="POST"
enctype="text/plain">
<input type="hidden"
name='{"email":"attacker@evil.com","padding":"'
value='"}'>
</form>
<script>document.getElementById('csrf-form').submit();</script>
对齐 DESIGN §3.1:L1 快速筛选候选 → L2 确认可利用 → L3 对抗防护绕过。
目标:快速识别哪些端点是状态改变操作且缺少 CSRF Token,不做完整重放。
endpoints.json 筛选 GET 方法且路径含 delete / update / transfer / set / change / remove / admin 等动词的端点——这些是最明显的 CSRF 候选。目标:对 L1 筛选出的候选端点,通过去 Token 重放证明漏洞存在。
curl 重放。目标:当 CSRF Token 防护存在时,测试是否有绕过路径。
_method=PUT / X-HTTP-Method-Override: PUT 绕过只对 POST 做 CSRF 校验但实际路由到 PUT/PATCH/DELETE 的框架。null,部分实现只检查字段存在而非值有效性。# 原始请求(含 Token,从 Burp Copy as curl 获取)
curl -X POST 'https://target.com/api/profile/update' \
-H 'Cookie: session=USER_SESSION_VALUE' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'name=newname&email=new@example.com&csrf_token=TOKEN_VALUE'
# 去 Token 重放(删除 csrf_token 字段)
curl -X POST 'https://target.com/api/profile/update' \
-H 'Cookie: session=USER_SESSION_VALUE' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'name=csrf_test&email=csrf@example.com'
# 伪造 Referer 重放
curl -X POST 'https://target.com/api/profile/update' \
-H 'Cookie: session=USER_SESSION_VALUE' \
-H 'Referer: https://evil.com/' \
-d 'name=csrf_test&email=csrf@example.com'
# GET 型 CSRF 验证
curl 'https://target.com/account/delete?id=999' \
-H 'Cookie: session=USER_SESSION_VALUE'
每个确认的 CSRF 漏洞按以下 Finding 结构输出(result 初值 validation_inconclusive,留给校验流水线):
{
"id": "CSRF-001",
"type": "csrf",
"severity": "high",
"status": "confirmed",
"result": "validation_inconclusive",
"title": "个人资料更新接口存在 CSRF 漏洞",
"endpoint": "POST /api/profile/update",
"description": "该端点修改用户个人信息时未校验 CSRF Token 或 Referer,攻击者可构造跨站请求在用户不知情下修改其邮箱、密码等敏感信息",
"payload": {
"method": "POST",
"url": "/api/profile/update",
"headers": {
"Content-Type": "application/x-www-form-urlencoded"
},
"body": "name=csrf_test&email=attacker@evil.com",
什么才算确认 CSRF(禁止仅凭「请求没有 Token」下结论,要证明去 Token 后操作仍成功执行):
csrf_test_<timestamp>)便于回溯清理。