mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-09-05 01:16:38 +02:00
Add files via upload
This commit is contained in:
+6
-123
@@ -1,124 +1,7 @@
|
||||
# Skills 系统使用指南
|
||||
# Skills 目录(Agent Skills / Eino)
|
||||
|
||||
## 概述
|
||||
|
||||
Skills系统允许你为角色配置专业知识和技能文档。当角色执行任务时,系统会将技能名称添加到系统提示词中作为推荐提示,AI智能体可以通过 `read_skill` 工具按需获取技能的详细内容。
|
||||
|
||||
## Skills结构
|
||||
|
||||
每个skill是一个目录,包含一个`SKILL.md`文件:
|
||||
|
||||
```
|
||||
skills/
|
||||
├── sql-injection-testing/
|
||||
│ └── SKILL.md
|
||||
├── xss-testing/
|
||||
│ └── SKILL.md
|
||||
└── ...
|
||||
```
|
||||
|
||||
## SKILL.md格式
|
||||
|
||||
SKILL.md文件支持YAML front matter格式(可选):
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: skill-name
|
||||
description: Skill的简短描述
|
||||
version: 1.0.0
|
||||
---
|
||||
|
||||
# Skill标题
|
||||
|
||||
这里是skill的详细内容,可以包含:
|
||||
- 测试方法
|
||||
- 工具使用
|
||||
- 最佳实践
|
||||
- 示例代码
|
||||
- 等等...
|
||||
```
|
||||
|
||||
如果不使用front matter,整个文件内容都会被作为skill内容。
|
||||
|
||||
## 在角色中配置Skills
|
||||
|
||||
在角色配置文件中添加`skills`字段:
|
||||
|
||||
```yaml
|
||||
name: 渗透测试
|
||||
description: 专业渗透测试专家
|
||||
user_prompt: 你是一个专业的网络安全渗透测试专家...
|
||||
tools:
|
||||
- nmap
|
||||
- sqlmap
|
||||
- burpsuite
|
||||
skills:
|
||||
- sql-injection-testing
|
||||
- xss-testing
|
||||
enabled: true
|
||||
```
|
||||
|
||||
`skills`字段是一个字符串数组,每个字符串是skill目录的名称。
|
||||
|
||||
## 工作原理
|
||||
|
||||
1. **加载阶段**:系统启动时,会扫描`skills_dir`目录下的所有skill目录
|
||||
2. **执行阶段**:当使用某个角色执行任务时:
|
||||
- 系统会将角色配置的skill名称添加到系统提示词中作为推荐提示
|
||||
- **注意**:skill的详细内容不会自动注入到系统提示词中
|
||||
- AI智能体需要根据任务需要,主动调用 `read_skill` 工具获取技能的详细内容
|
||||
3. **按需调用**:AI可以通过以下工具访问skills:
|
||||
- `list_skills`: 获取所有可用的skills列表
|
||||
- `read_skill`: 读取指定skill的详细内容
|
||||
|
||||
这样AI可以在执行任务过程中,根据实际需要自主调用相关skills获取专业知识。即使角色没有配置skills,AI也可以通过这些工具按需访问任何可用的skill。
|
||||
|
||||
## 示例Skills
|
||||
|
||||
### sql-injection-testing
|
||||
|
||||
包含SQL注入测试的专业方法、工具使用、绕过技术等。
|
||||
|
||||
### xss-testing
|
||||
|
||||
包含XSS测试的各种类型、payload、绕过技术等。
|
||||
|
||||
## 创建自定义Skill
|
||||
|
||||
1. 在`skills`目录下创建新目录,例如`my-skill`
|
||||
2. 在该目录下创建`SKILL.md`文件
|
||||
3. 编写skill内容
|
||||
4. 在角色配置中添加该skill名称
|
||||
|
||||
```bash
|
||||
mkdir -p skills/my-skill
|
||||
cat > skills/my-skill/SKILL.md << 'EOF'
|
||||
---
|
||||
name: my-skill
|
||||
description: 我的自定义技能
|
||||
---
|
||||
|
||||
# 我的自定义技能
|
||||
|
||||
这里是技能内容...
|
||||
EOF
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- **重要**:Skill的详细内容不会自动注入到系统提示词中,只有技能名称会作为提示添加
|
||||
- AI智能体需要通过 `read_skill` 工具主动获取技能内容,这样可以节省token并提高灵活性
|
||||
- Skill内容应该清晰、结构化,便于AI理解
|
||||
- 可以包含代码示例、命令示例等
|
||||
- 建议每个skill专注于一个特定领域或技能
|
||||
- 建议在skill的YAML front matter中提供清晰的 `description`,帮助AI判断是否需要读取该skill
|
||||
|
||||
## 配置
|
||||
|
||||
在`config.yaml`中配置skills目录:
|
||||
|
||||
```yaml
|
||||
skills_dir: skills # 相对于配置文件所在目录
|
||||
```
|
||||
|
||||
如果未配置,默认使用`skills`目录。
|
||||
- 每个技能为**子目录**,根上必须有 **`SKILL.md`**(YAML front matter:`name`、`description` + Markdown 正文),见 [agentskills.io](https://agentskills.io/specification.md)。
|
||||
- **目录名须与 `name` 一致**。
|
||||
- **运行时加载**:在 **Eino DeepAgent(多代理)** 会话中由 ADK **`skill` 中间件**渐进披露(系统提示中列出各 skill 的 name/description,模型再调用 **`skill`** 工具拉取 `SKILL.md` 全文)。可选开启 **`multi_agent.eino_skills.filesystem_tools`**,使用与本机相同的 `read_file` / `execute` 等访问包内脚本与资源。
|
||||
- **Web 管理**:HTTP `/api/skills/*` 仍用于列表、编辑、上传包内文件(实现为 `internal/skillpackage`,非 MCP)。
|
||||
- **运行时**:多代理(DeepAgent)会话内由 ADK **`skill`** 工具渐进加载;单代理 MCP 循环不含 Skills,需开多代理或后续单代理 Eino 路径。
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
# 表单 / 检查项(示例)
|
||||
|
||||
本文件演示 **Level 3** 资源:与主说明分离,按需通过多代理 **`skill`** 或 HTTP `resource_path=FORMS.md` 加载。
|
||||
|
||||
## 授权检查表
|
||||
|
||||
- 书面授权是否在有效期内?
|
||||
- 测试范围(域名 / IP)是否与授权一致?
|
||||
@@ -0,0 +1,14 @@
|
||||
# API / 参考(示例)
|
||||
|
||||
## HTTP `/api/skills/{id}`
|
||||
|
||||
- `resource_path`:包内相对路径,例如 `FORMS.md`、`scripts/payloads.txt`。
|
||||
- `depth=summary`:仅摘要与目录,适合首轮检索。
|
||||
|
||||
## 多代理运行时
|
||||
|
||||
- 使用 Eino ADK **`skill`** 工具按技能包渐进加载;可选开启 `multi_agent.eino_skills.filesystem_tools` 访问包内文件。
|
||||
|
||||
## 链接
|
||||
|
||||
- [Agent Skills 概览](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview)
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
name: cyberstrike-eino-demo
|
||||
description: 满配示例技能包:SKILL.md + scripts/、references/、assets/ 等可选目录;验证 Eino skill 与 HTTP 包内路径(仅授权安全测试与教学)。
|
||||
---
|
||||
|
||||
# CyberStrike × Eino 满配技能演示
|
||||
|
||||
本包与 [Agent Skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview) 一致:**`SKILL.md` 为清单 + 主说明**(无单独 `SKILL.yaml`)。同目录可有 **`scripts/`**、**`references/`**、**`assets/`** 等任意子目录(只要路径安全、未触达包深度/文件数上限),由 **`ListPackageFiles` / `resource_path`** 与 Eino 本机工具读取。补充说明见 `FORMS.md`、`REFERENCE.md`。
|
||||
|
||||
## 概述
|
||||
|
||||
用于一次性验证:
|
||||
|
||||
- HTTP `GET /api/skills` 列表(`script_count`、`file_count`、`progressive` 等为推导/扫描结果)
|
||||
- `GET /api/skills/cyberstrike-eino-demo?depth=summary|full`
|
||||
- `section=` 对应 `SKILL.md` 中 **`##` 标题**或 ASCII 标题的短 id(例如 `## Payload 样例` 常对应 `section=payload`)
|
||||
- 多代理内 ADK **`skill`** 工具(及可选本机文件工具)读取包内相对路径资源
|
||||
- Eino `FilesystemSkillsRetriever` 对包摘要、`##` 分块、脚本条目的检索
|
||||
|
||||
**硬性要求**:任何测试须取得书面授权,并限定在约定范围与时间窗口内。
|
||||
|
||||
## 授权测试工作流
|
||||
|
||||
1. **范围确认**:域名 / IP、接口列表、禁止动作(DoS、数据拖库等)。
|
||||
2. **基线记录**:对约定资产做只读探测,保存时间戳与原始请求/响应摘要。
|
||||
3. **分类测试**:按漏洞类型拆分任务;高风险操作前二次确认授权边界。
|
||||
4. **证据与报告**:每个发现附带复现步骤、影响、修复建议;敏感数据脱敏。
|
||||
5. **收尾**:删除临时账号、清理测试数据、移交报告。
|
||||
|
||||
## Payload 样例
|
||||
|
||||
以下为 **教学占位**,实际测试需替换为目标上下文且不得用于未授权系统:
|
||||
|
||||
- SQLi 探测(错误型):`"'`(观察是否触发数据库错误信息泄露)
|
||||
- XSS 反射型(无害化):`<script>alert(1)</script>` → 在靶场中应被编码或 CSP 拦截
|
||||
- 路径穿越(只读验证):`....//....//etc/passwd`(仅在授权文件读取场景)
|
||||
|
||||
详细列表见 `scripts/payloads.txt`。
|
||||
|
||||
## references/ 与 assets/
|
||||
|
||||
用于验证非 `scripts/` 的子目录是否被同等对待:
|
||||
|
||||
| 路径 | 用途 |
|
||||
|------|------|
|
||||
| `references/citations.md` | 引用与 HTTP `resource_path` 测试说明 |
|
||||
| `assets/README.txt` | 占位资源(可换成真实二进制做读文件上限测试) |
|
||||
|
||||
## 推荐工具链
|
||||
|
||||
| 阶段 | 工具示例 |
|
||||
|------|-----------|
|
||||
| 代理与重放 | Burp Suite、mitmproxy |
|
||||
| 扫描与目录 | ffuf、nuclei(需调低并发遵守授权) |
|
||||
| 漏洞验证 | 自写 PoC、官方 CLI(sqlmap 等)仅在授权范围内 |
|
||||
| 记录 | Markdown + JSON 片段模板(见 `scripts/report-snippet.json`) |
|
||||
|
||||
## 清单与验证
|
||||
|
||||
- [ ] 已保存书面授权与测试窗口
|
||||
- [ ] `scripts/` 下文件与正文引用一致
|
||||
- [ ] Web 或 `GET /api/skills?...` 可核对索引;多代理会话内用 **`skill`** 工具按包加载以节省 token
|
||||
- [ ] 需要细节时通过 **`skill`** 拉全文,或 HTTP `depth=full`、`section=<标题或短 id>`
|
||||
- [ ] 需要脚本原文时通过本机文件工具或 HTTP `resource_path=scripts/check-env.sh`
|
||||
- [ ] `resource_path=references/citations.md` 与 `resource_path=assets/README.txt` 可读取
|
||||
@@ -0,0 +1,8 @@
|
||||
CyberStrike skill package — assets/ smoke test
|
||||
==============================================
|
||||
|
||||
This plain-text file checks that arbitrary subfolders under a skill package
|
||||
(e.g. assets/) are listed and readable via /api/skills/...?resource_path=...
|
||||
|
||||
You may replace this with real binaries (images, zips, etc.) in authorized tests.
|
||||
Max read size is enforced by the server (see skillpackage default limits).
|
||||
@@ -0,0 +1,13 @@
|
||||
# 引用与外链(示例)
|
||||
|
||||
本文件用于验证技能包内 **`references/`** 目录是否被列表 API、HTTP `resource_path` 及多代理本机文件工具正常识别。
|
||||
|
||||
## 测试方式(授权环境内)
|
||||
|
||||
1. `GET /api/skills/cyberstrike-eino-demo` 响应中的 `package_files` 应包含 `references/citations.md`。
|
||||
2. `GET /api/skills/cyberstrike-eino-demo?resource_path=references/citations.md` 应返回本文内容。
|
||||
3. 多代理且开启 `eino_skills.filesystem_tools` 时,可通过相对路径读取本文件。
|
||||
|
||||
## 占位引用
|
||||
|
||||
- [OWASP Testing Guide](https://owasp.org/www-project-web-security-testing-guide/)(仅作链接格式示例)
|
||||
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# Demo only — not executed by CyberStrike server; safe to display when previewing the skill package.
|
||||
set -euo pipefail
|
||||
echo "cyberstrike-eino-demo / scripts/check-env.sh"
|
||||
echo "Purpose: illustrate bundled script resource in a skill package."
|
||||
echo "This script does not modify the system when shown in a preview or read-only context."
|
||||
uname -s 2>/dev/null || echo "(uname unavailable in display context)"
|
||||
@@ -0,0 +1,4 @@
|
||||
# Placeholder payloads for authorized testing labs only.
|
||||
sqli-probe: '
|
||||
xss-probe: <svg/onload=alert(1)>
|
||||
ssrf-probe: http://127.0.0.1:80 (only if scope explicitly allows loopback)
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"title": "Example finding",
|
||||
"severity": "medium",
|
||||
"affected": "https://example.com/api/v1/search",
|
||||
"summary": "Parameterized query reflects error message; verify with authorized DAST only.",
|
||||
"remediation": "Use prepared statements; generic error pages in production.",
|
||||
"references": ["OWASP SQL Injection"]
|
||||
}
|
||||
Reference in New Issue
Block a user