PingSec 安全日报

root@pingsec:~$
🟡 渗透测试渗透测试工具推荐Claude Code

【教程】Claude Code Skill编写从入门到精通——给AI写操作说明书

📅 2026年6月21日 📁 Hermes Agent ⏱ 5 分钟

适合人群:已使用 Claude Code 的安全研究人员/开发者

前置知识:Markdown 基础语法,了解 Claude Code 基本操作


一、什么是 Skill

Skill(技能) 是一组可复用的指令——以 Markdown 文件封装——教会 Claude Code 如何按你的方式执行特定任务。

通俗理解:

  • 给 AI 写一个「操作说明书」,告诉它遇到某个场景该怎么干
  • 不需要写代码,不需要编译,一个 .md 文件就够了
  • Claude 会在对话中自动识别什么时候该用哪个 Skill

每个 Skill 都是一个标准格式的 Markdown 文件。


二、Skill 文件结构

一个 Skill 就是 SKILL.md 文件,分成两部分:

2.1 YAML 前置数据(Frontmatter)

--- 包裹,告诉 Claude 什么时候用这个 Skill:


---
name: waf-bypass
description: >-
  WAF bypass playbook. Use when encountering WAF blocks during SQL injection,
  XSS testing, or any web app security testing.
---

2.2 Markdown 正文

YAML 之后的部分,告诉 Claude 具体怎么做


# WAF Bypass Playbook

## 检测阶段
1. 发送基础 payload 确认被拦截
2. 识别 WAF 产品类型(查看响应头/Serve/错误页面特征)
3. ...

## 绕过方法
- 全角字符:`%EF%BC%87` 替代单引号
- 双关键字:`ANANDD` 替代 `AND`
- 内联注释:`/*!50000SELECT*/`

三、前置数据字段详解

字段必需说明
name推荐Skill 名称,也是斜杠命令名。默认用目录名。小写+连字符,≤64字符
description✅ 推荐最重要的字段。Claude 根据描述判断是否加载这个 Skill
disable-model-invocationtrue=禁止自动触发,必须手动 /name
user-invocablefalse=从 / 菜单隐藏,仅做后台知识
allowed-toolsSkill 激活时 Claude 可免确认使用的工具(Read/Grep/Glob/Bash/Write等)
argument-hint自动补全提示如 [目标URL]
model覆盖使用的模型
contextfork=在子代理中执行(不占主上下文)
agentcontext: fork 时指定子代理类型(Explore/Coding)

description 是最关键的字段

Claude Code 采用渐进式加载

  1. 启动时:只加载所有 Skill 的 name + description(每个 ~100 token)
  2. 对话中:Claude 读取描述判断哪些 Skill 适合当前场景
  3. 激活时:才加载完整内容

所以 description 决定了 Skill 能不能被自动触发

描述写得好:


description: >-
  SQL injection playbook. Use when input reaches SQL queries, authentication
  logic, sorting, filtering, reporting, or DB-specific blind and out-of-band
  execution paths.

描述写得差:


description: SQL注入测试

差距巨大——第二条 Claude 根本不会自动识别什么时候该用。


四、创建你的第一个 Skill

第 1 步:创建目录


# 个人级(所有项目可用)
mkdir -p ~/.claude/skills/my-tool

# 或项目级(仅当前项目)
mkdir -p .claude/skills/my-tool

第 2 步:写 SKILL.md


---
name: my-tool
description: My custom tool for doing X. Use when the user asks to do X.
---

第 3 步:测试


claude
# 输入:帮我做 X
# Claude 应该自动加载你的 Skill

或者手动调用:


/my-tool 参数1 参数2

第 4 步:迭代优化

  • Claude 该触发没触发 → 扩大 description 范围
  • Claude 不该触发时触发了 → 缩小 description,或加 disable-model-invocation: true
  • 输出格式不对 → 在正文中加示例输出

五、高级特性

5.1 变量替换

Skill 正文中支持动态参数:


---
name: fix-issue
description: Fix a GitHub issue by number
disable-model-invocation: true
---

Fix GitHub issue #$ARGUMENTS following our coding standards:
1. Read the issue with `gh issue view $0`
2. Implement the fix
3. Write tests
4. Commit referencing the issue

执行 /fix-issue 423 时,$ARGUMENTS 替换为 423$0 也替换为 423

变量说明
$ARGUMENTS所有参数
$0 / $ARGUMENTS[0]第1个参数
$1 / $ARGUMENTS[1]第2个参数
${CLAUDE_SESSION_ID}当前会话ID

5.2 动态上下文注入


!`command`

Skill 内容发送给 Claude 之前,shell 命令会先执行,输出替换占位符:


---
name: pr-summary
description: Summarize the current pull request
context: fork
agent: Explore
---

## Current PR Context
- PR diff: !`gh pr diff`
- PR comments: !`gh pr view --comments`
- Changed files: !`gh pr diff --name-only`

## Task
Provide a concise summary of this pull request.

5.3 子代理执行(context: fork)


---
name: deep-scan
description: Deep vulnerability scan. Use for complex multi-step scans.
context: fork
agent: Explore
---

设置 context: fork 后,Skill 在一个独立的子代理中运行:

  • 不占主会话上下文
  • 可以独立使用工具
  • 结果汇总回主会话

agent: Explore = 探索型(擅长分析和研究)

agent: Coding = 编码型(擅长代码修改)

5.4 工具免确认


---
name: batch-scan
description: Batch scan targets.
allowed-tools: Read, Grep, Glob, Bash, Write
---

设置后,这些工具执行时不再弹 Yes/No 确认。

可用的工具名:Read, Grep, Glob, Bash, Write, Agent, Edit, Web, Vagrant, Playwright, Search, MCP_*


六、从 Slash Command 迁移到 Skill

如果你之前用过 .claude/commands/,现在迁移:

对比Slash Commands(旧)Skills(新)
位置.claude/commands/review.md.claude/skills/review/SKILL.md
调用手动 /review自动触发 + 手动 /review
附属文件❌ 不支持✅ 支持
前置数据可选支持调用控制
状态仍可用推荐使用

两种路径都创建 /review 命令。如果同名,Skill 优先。


七、实战:创建一个 Skill

假设你想创建一个「JS 逆向分析 Skill」:

步骤 1:创建目录


mkdir -p ~/.claude/skills/js-reverse

步骤 2:编写 SKILL.md


---
name: js-reverse
description: >-
  JavaScript reverse engineering. Use when analyzing obfuscated JS files,
  extracting API endpoints from SPA bundles, reversing encryption logic,
  or finding hidden routes in frontend code.
allowed-tools: Read, Grep, Glob, Bash
---

# JavaScript Reverse Engineering

## 前置准备

安装依赖

npm list -g js-beautify || npm install -g js-beautify

pip list 2>/dev/null | grep jsbeautifier || pip install jsbeautifier



## 阶段 1:格式化与美化

美化混淆代码

js-beautify target.js > target.beautified.js



## 阶段 2:API 端点提取

提取所有 API 路径

grep -oP '"'"'"'["'"'"']' target.js | sort -u

提取子域名

grep -oP 'https?://[a-zA-Z0-9.-]+' target.js | sort -u



## 阶段 3:敏感信息扫描

API Key / Token

grep -oiP '(sk-[a-zA-Z0-9]{20,}|AKID[a-zA-Z0-9]{16,}|access_key|secret_key|api_key)' target.beautified.js | sort -u

隐藏路由

grep -oiP '(admin|debug|dev|test|internal|staging|dashboard|swagger|api-docs|actuator|health|metrics)' target.beautified.js | sort -u

Base64 编码信息

grep -oP '[A-Za-z0-9+/]{40,}={0,2}' target.beautified.js | sort -u



## 阶段 4:加密逻辑分析
- 搜索 `encrypt` `decrypt` `crypto` `AES` `RSA` `MD5` `SHA`
- 提取密钥和 IV
- 确认加密算法和模式

## 输出格式
按以下格式输出结果:

### 发现的 API 端点
| 端点 | 方法推断 | 说明 |
|------|---------|------|

### 敏感信息
- Key/Token:
- 隐藏路由:
- 子域名:

### 加密逻辑
- 算法:
- 密钥:
- 模式:

步骤 3:测试


claude
# 说:分析这个 JS 文件 target.js
# Claude 应该自动识别并加载 js-reverse Skill

八、Skill 编写最佳实践

✅ 推荐的写法

1. description 要包含触发关键词


description: >-
  Use when analyzing obfuscated JS files, extracting API endpoints...

这样 Claude 看到「JS」「混淆」「API端点」就会自动匹配。

2. 有明确的分步指令


## 阶段 1:XXX
## 阶段 2:XXX
## 输出格式

3. 包含具体命令


# 用户可以直接复制执行的命令

4. 输出格式标准化


## 输出格式
| 字段 | 值 |
|------|-----|

❌ 避免的写法

1. description 太短


description: JS逆向

→ Claude 不知道什么时候该用。

2. 没有具体步骤


分析 JS 文件并提取信息。

→ Claude 还是按自己的思路来,Skill 等于没写。

3. 把项目配置放 Skill 里

→ 技术栈、项目结构等静态信息放 CLAUDE.md,放 Skill 每次加载浪费 token。

内容类型放哪
静态上下文(技术栈/项目结构)CLAUDE.md
重复性工作流(代码审查/挖洞流程)Skill
必须执行的操作(格式化检查/自动测试)Hook

九、Skill vs CLAUDE.md vs Hook

CLAUDE.mdSkillHook
:--:---------:------:-----
作用项目上下文可复用工作流自动操作
加载时机每次启动按需加载事件触发
自动性始终在上下文中Claude 自行判断强制执行
位置项目根目录.claude/skills/*/SKILL.md.claude/hooks/*
适合技术栈/命名规范挖洞流程/代码审查git hook/lint

十一、常见陷阱

#陷阱解决方案
:-:-----:---------
1description 太笼统,Skill 从不自动触发含具体关键词:SQL injection playbook. Use when input reaches SQL queries...
2Skill 在错误场景触发缩小 description 范围,或加 disable-model-invocation: true
3不会用 $ARGUMENTS参考 5.1 节变量替换语法
4Skill 太大(5000+行)一个 Skill 聚焦一个任务,切分成多个
5allowed-tools 没配,每步都弹 Yes/Noallowed-tools: Read, Grep, Glob, Bash
6把项目配置写 Skill 里静态项目信息放 CLAUDE.md
7目录名和 name: 不一致保持一致,否则 / 命令名不确定
8正文没有输出格式约束加入 ## 输出格式 章节

十一、总结速查

一条命令创建新 Skill:


mkdir -p ~/.claude/skills/my-skill && cat > ~/.claude/skills/my-skill/SKILL.md << 'EOF'
---
name: my-skill
description: >-
  What this skill does and when to use it.
  Use when the user asks about X or Y scenario.
allowed-tools: Read, Bash
---

# My Skill

## Steps
1. Do A
2. Do B

## Output Format
...
EOF

一句话精要:

Skill = 给 Claude 写的「工作说明书」——写好 description(触发条件)+ 分步指令(干活流程)+ 输出格式(结果规范),Claude 就能在你需要的时候自动调用它。

← 返回首页