一键导入
kali-ctf
CTF-mcp 项目的统一 Kali CTF 技能。用于任何 CTF 题目求解:将本地题目附件和题目 URL 作为输入,仅在本地执行 nginx 文件服务器上传与 frpc 穿透,所有侦察、分析、利用和取 flag 全程通过远端 Kali API 执行。运行前先读取当前工作区的 setting.md。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
CTF-mcp 项目的统一 Kali CTF 技能。用于任何 CTF 题目求解:将本地题目附件和题目 URL 作为输入,仅在本地执行 nginx 文件服务器上传与 frpc 穿透,所有侦察、分析、利用和取 flag 全程通过远端 Kali API 执行。运行前先读取当前工作区的 setting.md。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
统一 CTF 调度入口。用于题型未明确时的首轮研判与分流,在 CTF-mcp 项目中将题目附件/URL 从本地输入转为远端 Kali 可执行任务,并把执行路由到 ctf-web、ctf-pwn、ctf-reverse、ctf-crypto、ctf-forensics、ctf-misc。
Crypto 题专项方法。用于经典密码、RSA/ECC、PRNG、格攻击与协议误用类题目,并要求在 CTF-mcp 项目中仅通过远端 Kali API 执行分析和求解脚本。
Forensics 题专项方法。用于磁盘、内存、流量、日志、隐写取证等任务,并要求在 CTF-mcp 项目中仅通过远端 Kali API 完成分析、提取和验证。
Misc 题专项方法。用于 jail、编码、脚本陷阱、协议小游戏、杂项自动化等任务,并要求在 CTF-mcp 项目中仅通过远端 Kali API 执行求解流程。
Pwn 题专项方法。用于栈溢出、格式化字符串、堆利用、ROP、沙箱绕过等内存破坏类题目,并要求在 CTF-mcp 项目中仅通过远端 Kali API 执行分析和利用。
Reverse 题专项方法。用于可执行文件、字节码、混淆逻辑、校验器还原等任务,并要求在 CTF-mcp 项目中仅通过远端 Kali API 完成分析与求解。
| name | kali-ctf |
| description | CTF-mcp 项目的统一 Kali CTF 技能。用于任何 CTF 题目求解:将本地题目附件和题目 URL 作为输入,仅在本地执行 nginx 文件服务器上传与 frpc 穿透,所有侦察、分析、利用和取 flag 全程通过远端 Kali API 执行。运行前先读取当前工作区的 setting.md。 |
确保:
ctf-skills 。所有环境参数必须从以下文件读取,不在技能内硬编码:
./setting.md(当前工作区)字段定义:
Api_Base:远端 API 基础地址FRP_Address:frps 地址FRP_token:frp 认证 tokenFile_Base:附件下载基地址(例如 http://14.1.99.251/files)nginx 文件服务器上传 与 frpc 隧道命令。checksec、gdb、pwntools、sqlmap、nmap、exploit 脚本等解题动作。可选设备:
backend-cloud:后端云服务器(Api_Base 对应 Kali 容器,默认设备)。i9-12900k:你的本地高性能工作站。gpu-cloud:高性能 GPU 云主机(固定环境:CUDA 13.0 + Python 3.12 + Ubuntu 22.04)。选择规则:
backend-cloud。gpu-cloud。i9-12900k。停机交接规则(必须执行):
backend-cloud 时,AI 不继续自动解题。File_Base)。后台运行与监控规范(必须给出):
nohup + 日志重定向 + PID 文件。ps -fp $(cat run.pid)tail -f run.logkill $(cat run.pid)chmod +x run_task.sh
nohup bash run_task.sh > run.log 2>&1 & echo $! > run.pid
交接输出最小模板(必须给出):
目标设备:i9-12900k 或 gpu-cloud下载包 URL:<File_Base>/<handoff-bundle>一键后台运行命令:可直接复制运行(nohup ... & echo $! > run.pid)监控命令:ps/tail/kill 三条预计耗时:粗略区间回传内容:需要你回传的文件/日志路径本机只允许两类命令:
nginx 文件服务器上传命令(如 scp/rsync 上传到 /srv/ctf-files/)frpc 穿透命令(含生成/读取 frpc 配置)除上述白名单外,其余本机命令一律视为违规,尤其禁止:
python exploit.py、pwntools、gdb、checksecsqlmap、ffuf、nmap、niktostrings、binwalk、radare2、ghidra、volatility执行规则:
/api/kali/exec 远端执行。attempts.log 记录“违规动作 + 回滚措施 + 后续改正路径”。SETTINGS_FILE="setting.md"
[ -f "$SETTINGS_FILE" ] || { echo "missing $SETTINGS_FILE"; exit 1; }
FRP_ADDRESS="$(awk -F': *' '/^FRP_Address:/{print $2}' "$SETTINGS_FILE")"
FILE_BASE="$(awk -F': *' '/^File_Base:/{print $2}' "$SETTINGS_FILE")"
[ -n "$FILE_BASE" ] || FILE_BASE="http://${FRP_ADDRESS}/files"
LOCAL_FILE="/ABS/PATH/TO/FILE"
BASE_NAME="$(basename "$LOCAL_FILE")"
FILE_NAME="$(date +%s)-$RANDOM-${BASE_NAME}"
scp "$LOCAL_FILE" "root@${FRP_ADDRESS}:/srv/ctf-files/${FILE_NAME}"
echo "${FILE_BASE%/}/${FILE_NAME}"
说明:
<File_Base>/<文件名>/tmp/workspace/current上传后清理(强制):
ssh "root@${FRP_ADDRESS}" "rm -f /srv/ctf-files/${FILE_NAME}"
attempts.log 并在任务结束前重试删除。cat > /tmp/frpc-ctf.toml <<'EOF'
serverAddr = "<FRP_Address from setting.md>"
serverPort = 7000
transport.tcpMux = false
auth.method = "token"
auth.token = "<FRP_token from setting.md>"
[[proxies]]
name = "ctf-rev"
type = "tcp"
localIP = "127.0.0.1"
localPort = <LOCAL_PORT>
remotePort = <REMOTE_PORT>
EOF
frpc -c /tmp/frpc-ctf.toml
基础地址:读取 setting.md 的 Api_Base
并发约束:
/api/kali/exec 或 /api/kali/read 必须显式携带 container 字段。多容器并发命名规范(必须遵守):
ai-<agent>-<cat>-<seq><agent>:AI 实例代号(如 a、b、c)<cat>:题型代号(web / pwn / rev / crypto / forensics / misc)<seq>:三位递增编号(001、002...)ai-a-web-001ai-b-pwn-001ai-c-rev-002seqGET /api/containers,若同名已存在则递增编号重试POST /api/containersPOST /api/kali/exec,参数:{ "container": "<name>", "cmd": "...", "timeout": 30 }POST /api/kali/read,参数:{ "container": "<name>", "path": "relative/path" }GET /api/callbacksSETTINGS_FILE="setting.md"
[ -f "$SETTINGS_FILE" ] || { echo "missing $SETTINGS_FILE"; exit 1; }
API_BASE="$(awk -F': *' '/^Api_Base:/{print $2}' "$SETTINGS_FILE")"
AGENT_TAG="a" # a/b/c...
CAT_TAG="web" # web/pwn/rev/crypto/forensics/misc
SEQ="001" # 三位编号,冲突时递增
CONTAINER_NAME="ai-${AGENT_TAG}-${CAT_TAG}-${SEQ}"
WORKDIR="/tmp/workspace/current"
未通过任一项时,禁止进入“统一执行流程”。
SETTINGS_FILE="setting.md"
[ -f "$SETTINGS_FILE" ] || { echo "missing setting.md"; exit 1; }
for k in Api_Base FRP_Address FRP_token File_Base; do
v="$(awk -F': *' -v key="$k" '$1==key {print $2}' "$SETTINGS_FILE" | tr -d '\r' | sed 's/^ *//;s/ *$//' | sed 's/^\"//;s/\"$//')"
[ -n "$v" ] || { echo "missing $k in setting.md"; exit 1; }
done
echo "settings ok"
API_BASE="$(awk -F': *' '/^Api_Base:/{print $2}' setting.md | tr -d '\r' | sed 's/^ *//;s/ *$//' | sed 's/^\"//;s/\"$//')"
FILE_BASE="$(awk -F': *' '/^File_Base:/{print $2}' setting.md | tr -d '\r' | sed 's/^ *//;s/ *$//' | sed 's/^\"//;s/\"$//')"
echo "$API_BASE" | grep -Eq '^https?://[^ ]+$' || { echo "Api_Base invalid: $API_BASE"; exit 1; }
echo "$FILE_BASE" | grep -Eq '^https?://[^ ]+$' || { echo "File_Base invalid: $FILE_BASE"; exit 1; }
FILE_SERVER_BASE="$(echo "$FILE_BASE" | sed -E 's#/files/?$##')"
curl -fsS "${API_BASE%/}/healthz" >/dev/null || { echo "api healthz failed: ${API_BASE%/}/healthz"; exit 1; }
curl -fsS "${FILE_SERVER_BASE%/}/healthz_files" >/dev/null || { echo "file server health failed: ${FILE_SERVER_BASE%/}/healthz_files"; exit 1; }
echo "control-plane ok"
API_BASE="$(awk -F': *' '/^Api_Base:/{print $2}' setting.md)"
CONTAINER_NAME="ai-a-web-001"
curl -sS -X POST "${API_BASE%/}/api/containers" \
-H 'Content-Type: application/json' \
-d "{\"name\":\"$CONTAINER_NAME\",\"image\":\"ctf-kali:latest\"}" >/dev/null
curl -sS -X POST "${API_BASE%/}/api/kali/exec" \
-H 'Content-Type: application/json' \
-d "{\"container\":\"$CONTAINER_NAME\",\"cmd\":\"id && pwd\",\"timeout\":30}"
通过标准:
healthz 正常;id && pwd 返回非错误结果。本地输入:读取题目附件路径、题目 URL、端口信息。强制自检:执行并通过“强制自检环节”。设备判定:按“设备选择与停机交接”规则决定目标设备。分支A(目标=backend-cloud):继续后续远端自动解题流程。分支B(目标!=backend-cloud):执行交接准备、上传交接包、输出执行指引后停止等待用户。本地传输:上传附件到 nginx 文件服务器并得到 File_Base/文件名 直链。远端落地:通过 /api/kali/exec 在 Kali 下载到 /tmp/workspace/current 并校验。源文件清理:下载校验成功后,立即删除 /srv/ctf-files/<文件名>。题型判定:判断为 Web/Pwn/Reverse/Crypto/Forensics/Misc。远端解题:仅通过 /api/kali/exec 执行完整分析与利用。按需穿透:需要反连或端口映射时,在本地使用 frpc。结果回收:通过 /api/kali/read 和 /api/callbacks 读取证据与 flag。为避免遗留文件,建议在文件服务器配置定时清理(TTL):
sudo crontab -e
*/10 * * * * find /srv/ctf-files -type f -mmin +30 -delete
在正式解题前先做一次最小检查,避免把网络/容器问题误判为题目问题:
GET /healthz 应返回 {"status":"ok"}POST /api/containers 创建目标容器(使用并发命名)POST /api/kali/exec 执行 id && pwd 验证执行链路每次尝试后都记录一条日志,至少包含:
假设:当前漏洞假设或利用路径。动作:实际执行的命令/API 调用。结果:关键输出、错误信息、是否推进。结论:该路径是继续、暂挂还是放弃。下一步:下一条待验证路径。推荐保存到远端:
echo "[2026-04-18 10:00] 假设=JWT伪造 动作=... 结果=签名校验失败 结论=暂挂 下一步=测SSTI" >> /tmp/workspace/current/attempts.log
满足任一条件立即换方向:
转向时必须先记录:
为避免并发任务互相污染,结束时执行:
attempts.log、关键脚本、flag 证据到 current/seqSETTINGS_FILE="setting.md"
[ -f "$SETTINGS_FILE" ] || { echo "missing $SETTINGS_FILE"; exit 1; }
API_BASE="$(awk -F': *' '/^Api_Base:/{print $2}' "$SETTINGS_FILE")"
CONTAINER_NAME="ai-a-web-001"
curl -sS -X POST "$API_BASE/api/containers" \
-H 'Content-Type: application/json' \
-d "{\"name\":\"$CONTAINER_NAME\",\"image\":\"ctf-kali:latest\"}"
SETTINGS_FILE="setting.md"
[ -f "$SETTINGS_FILE" ] || { echo "missing $SETTINGS_FILE"; exit 1; }
API_BASE="$(awk -F': *' '/^Api_Base:/{print $2}' "$SETTINGS_FILE")"
CONTAINER_NAME="ai-a-web-001"
curl -sS -X POST "$API_BASE/api/kali/exec" \
-H 'Content-Type: application/json' \
-d "{\"container\":\"$CONTAINER_NAME\",\"cmd\":\"id && pwd\",\"timeout\":30}"
SETTINGS_FILE="setting.md"
[ -f "$SETTINGS_FILE" ] || { echo "missing $SETTINGS_FILE"; exit 1; }
API_BASE="$(awk -F': *' '/^Api_Base:/{print $2}' "$SETTINGS_FILE")"
CONTAINER_NAME="ai-a-web-001"
curl -sS -X POST "$API_BASE/api/kali/read" \
-H 'Content-Type: application/json' \
-d "{\"container\":\"$CONTAINER_NAME\",\"path\":\"current/output.txt\"}"