245 lines
9.2 KiB
Bash
245 lines
9.2 KiB
Bash
#!/usr/bin/env bash
|
||
# quick-setup.sh — Kali 2026.1 一键初始化
|
||
# 在全新 Kali 系统上运行此脚本,自动完成:
|
||
# 1. 系统更新
|
||
# 2. 安装 Kali 2026.1 新工具
|
||
# 3. 配置 Kali 原生 MCP
|
||
# 4. 安装非预装的逆向工具
|
||
# 5. 刷新工具索引
|
||
# 6. 输出配置报告
|
||
#
|
||
# 用法:
|
||
# sudo bash kali/scripts/quick-setup.sh [--skip-update] [--minimal]
|
||
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
||
# ─── 参数 ──────────────────────────────────────────────────────────────────────────
|
||
|
||
SKIP_UPDATE=false
|
||
MINIMAL=false
|
||
|
||
for arg in "$@"; do
|
||
case "$arg" in
|
||
--skip-update) SKIP_UPDATE=true ;;
|
||
--minimal) MINIMAL=true ;;
|
||
esac
|
||
done
|
||
|
||
# ─── 颜色 ──────────────────────────────────────────────────────────────────────────
|
||
|
||
RED='\033[31m'
|
||
GREEN='\033[32m'
|
||
YELLOW='\033[33m'
|
||
CYAN='\033[36m'
|
||
BOLD='\033[1m'
|
||
RESET='\033[0m'
|
||
|
||
banner() { echo -e "\n${BOLD}${CYAN}═══ $* ═══${RESET}\n"; }
|
||
ok() { echo -e "${GREEN}[✓]${RESET} $*"; }
|
||
warn() { echo -e "${YELLOW}[!]${RESET} $*"; }
|
||
info() { echo -e "${CYAN}[i]${RESET} $*"; }
|
||
|
||
# ─── 检查权限 ──────────────────────────────────────────────────────────────────────
|
||
|
||
if [[ $EUID -ne 0 ]]; then
|
||
echo "请使用 root 权限运行: sudo bash $0"
|
||
exit 1
|
||
fi
|
||
|
||
# ─── 检查 Kali 版本 ────────────────────────────────────────────────────────────────
|
||
|
||
banner "检查系统版本"
|
||
|
||
if [[ -f /etc/os-release ]]; then
|
||
. /etc/os-release
|
||
info "系统: $PRETTY_NAME"
|
||
info "版本: ${VERSION:-unknown}"
|
||
info "内核: $(uname -r)"
|
||
else
|
||
warn "无法检测系统版本,继续执行..."
|
||
fi
|
||
|
||
# ─── 系统更新 ──────────────────────────────────────────────────────────────────────
|
||
|
||
if [[ "$SKIP_UPDATE" != "true" ]]; then
|
||
banner "系统更新"
|
||
apt-get update -qq
|
||
apt-get upgrade -y -qq
|
||
ok "系统已更新"
|
||
else
|
||
info "跳过系统更新 (--skip-update)"
|
||
fi
|
||
|
||
# ─── 安装 Kali 2026.1 新工具 ──────────────────────────────────────────────────────
|
||
|
||
banner "安装 Kali 2026.1 新工具"
|
||
|
||
NEW_TOOLS_2026_1=(
|
||
"adaptixc2"
|
||
"atomic-operator"
|
||
"fluxion"
|
||
"gef"
|
||
"metasploitmcp"
|
||
"sstimap"
|
||
"wpprobe"
|
||
"xsstrike"
|
||
)
|
||
|
||
NEW_TOOLS_2025_4=(
|
||
"evil-winrm-py"
|
||
"hexstrike-ai"
|
||
)
|
||
|
||
for tool in "${NEW_TOOLS_2026_1[@]}" "${NEW_TOOLS_2025_4[@]}"; do
|
||
if dpkg -l "$tool" &>/dev/null 2>&1; then
|
||
ok "$tool 已安装"
|
||
else
|
||
info "安装 $tool ..."
|
||
apt-get install -y -qq "$tool" 2>/dev/null && ok "$tool 安装成功" || warn "$tool 安装失败(可能尚未在你的源中)"
|
||
fi
|
||
done
|
||
|
||
# ─── 安装 Kali 原生 MCP ──────────────────────────────────────────────────────────
|
||
|
||
banner "配置 Kali 原生 MCP"
|
||
|
||
MCP_TOOLS=("mcp-kali-server" "metasploitmcp" "hexstrike-ai")
|
||
|
||
for tool in "${MCP_TOOLS[@]}"; do
|
||
if dpkg -l "$tool" &>/dev/null 2>&1; then
|
||
ok "$tool 已安装"
|
||
else
|
||
info "安装 $tool ..."
|
||
apt-get install -y -qq "$tool" 2>/dev/null && ok "$tool 安装成功" || warn "$tool 安装失败"
|
||
fi
|
||
done
|
||
|
||
# ─── 安装 AD/内网渗透工具 ─────────────────────────────────────────────────────────
|
||
|
||
if [[ "$MINIMAL" != "true" ]]; then
|
||
banner "安装 AD/内网渗透工具"
|
||
|
||
AD_TOOLS=("coercer" "netexec" "responder" "bloodhound" "certipy-ad")
|
||
|
||
for tool in "${AD_TOOLS[@]}"; do
|
||
if dpkg -l "$tool" &>/dev/null 2>&1; then
|
||
ok "$tool 已安装"
|
||
else
|
||
info "安装 $tool ..."
|
||
apt-get install -y -qq "$tool" 2>/dev/null && ok "$tool 安装成功" || warn "$tool 安装失败"
|
||
fi
|
||
done
|
||
fi
|
||
|
||
# ─── 安装非预装逆向工具 ───────────────────────────────────────────────────────────
|
||
|
||
banner "安装逆向分析工具"
|
||
|
||
# jadx(Kali 不预装,从 GitHub 下载)
|
||
if ! command -v jadx &>/dev/null; then
|
||
info "安装 jadx(从 GitHub Release)..."
|
||
bash "$SCRIPT_DIR/bootstrap-reverse.sh" jadx --skip-refresh 2>/dev/null && ok "jadx 安装成功" || warn "jadx 安装失败"
|
||
else
|
||
ok "jadx 已可用"
|
||
fi
|
||
|
||
# Node.js(部分 MCP 需要)
|
||
if ! command -v node &>/dev/null; then
|
||
info "安装 Node.js ..."
|
||
apt-get install -y -qq nodejs npm && ok "Node.js 安装成功" || warn "Node.js 安装失败"
|
||
else
|
||
ok "Node.js 已可用: $(node -v)"
|
||
fi
|
||
|
||
# frida-tools
|
||
if ! command -v frida &>/dev/null; then
|
||
info "安装 frida-tools ..."
|
||
pip3 install --break-system-packages frida-tools 2>/dev/null && ok "frida-tools 安装成功" || warn "frida-tools 安装失败"
|
||
else
|
||
ok "frida 已可用"
|
||
fi
|
||
|
||
# ─── 配置 MCP 客户端 ──────────────────────────────────────────────────────────────
|
||
|
||
banner "配置 MCP 客户端"
|
||
|
||
# 检测实际用户(sudo 下 $HOME 可能是 /root)
|
||
REAL_USER="${SUDO_USER:-root}"
|
||
REAL_HOME="$(getent passwd "$REAL_USER" 2>/dev/null | cut -d: -f6 || true)"
|
||
if [[ -z "$REAL_HOME" || ! -d "$REAL_HOME" ]]; then
|
||
REAL_USER="root"
|
||
REAL_HOME="$(getent passwd root 2>/dev/null | cut -d: -f6 || true)"
|
||
fi
|
||
if [[ -z "$REAL_HOME" || ! -d "$REAL_HOME" ]]; then
|
||
REAL_HOME="/root"
|
||
fi
|
||
|
||
MCP_CONFIG_DIR="$REAL_HOME/.claude"
|
||
MCP_CONFIG="$MCP_CONFIG_DIR/mcp.json"
|
||
|
||
if command -v jq &>/dev/null; then
|
||
mkdir -p "$MCP_CONFIG_DIR"
|
||
|
||
if [[ ! -f "$MCP_CONFIG" ]]; then
|
||
echo '{"mcpServers":{}}' > "$MCP_CONFIG"
|
||
fi
|
||
|
||
# 注册 kali-server
|
||
jq '.mcpServers["kali-server"] = {"command": "kali-server-mcp", "args": ["--port", "5000"]}' "$MCP_CONFIG" > /tmp/mcp-tmp.json && mv /tmp/mcp-tmp.json "$MCP_CONFIG"
|
||
|
||
# 注册 metasploit-mcp
|
||
jq '.mcpServers["metasploit-mcp"] = {"command": "metasploitmcp", "args": ["--transport", "stdio"]}' "$MCP_CONFIG" > /tmp/mcp-tmp.json && mv /tmp/mcp-tmp.json "$MCP_CONFIG"
|
||
|
||
# 注册 hexstrike
|
||
jq '.mcpServers["hexstrike"] = {"command": "hexstrike-ai", "args": []}' "$MCP_CONFIG" > /tmp/mcp-tmp.json && mv /tmp/mcp-tmp.json "$MCP_CONFIG"
|
||
|
||
# 注册 jshook
|
||
jq '.mcpServers["jshook"] = {"command": "npx", "args": ["-y", "@jshookmcp/jshook@0.3.4"], "env": {"JSHOOK_BASE_PROFILE": "search"}}' "$MCP_CONFIG" > /tmp/mcp-tmp.json && mv /tmp/mcp-tmp.json "$MCP_CONFIG"
|
||
|
||
chown "$REAL_USER:$REAL_USER" "$MCP_CONFIG" "$MCP_CONFIG_DIR"
|
||
ok "MCP 配置已写入: $MCP_CONFIG"
|
||
else
|
||
warn "未安装 jq,无法自动配置 MCP。请手动复制 kali/mcp-kali-example.json"
|
||
info "安装 jq: apt install jq"
|
||
fi
|
||
|
||
# ─── 刷新工具索引 ──────────────────────────────────────────────────────────────────
|
||
|
||
banner "刷新工具索引"
|
||
|
||
chmod +x "$SCRIPT_DIR"/*.sh "$SCRIPT_DIR"/lib/*.sh
|
||
sudo -u "$REAL_USER" bash "$SCRIPT_DIR/refresh-tool-index.sh" 2>/dev/null || bash "$SCRIPT_DIR/refresh-tool-index.sh"
|
||
ok "工具索引已刷新"
|
||
|
||
# ─── 输出报告 ──────────────────────────────────────────────────────────────────────
|
||
|
||
banner "配置完成"
|
||
|
||
echo -e "${BOLD}✅ Kali 2026.1 逆向技能路由包已配置完成${RESET}"
|
||
echo ""
|
||
echo " 安装路径: $(cd "$SCRIPT_DIR/../.." && pwd)"
|
||
echo " MCP 配置: $MCP_CONFIG"
|
||
echo " 工具索引: $(cd "$SCRIPT_DIR/../.." && pwd)/skills/tool-index.md"
|
||
echo ""
|
||
echo " Kali 原生 MCP:"
|
||
command -v kali-server-mcp &>/dev/null && echo " ✓ mcp-kali-server" || echo " ✗ mcp-kali-server"
|
||
command -v metasploitmcp &>/dev/null && echo " ✓ metasploitmcp" || echo " ✗ metasploitmcp"
|
||
command -v hexstrike-ai &>/dev/null && echo " ✓ hexstrike-ai" || echo " ✗ hexstrike-ai"
|
||
echo ""
|
||
echo " 2026.1 新工具:"
|
||
for tool in "${NEW_TOOLS_2026_1[@]}"; do
|
||
if dpkg -l "$tool" &>/dev/null 2>&1; then
|
||
echo " ✓ $tool"
|
||
else
|
||
echo " ✗ $tool"
|
||
fi
|
||
done
|
||
echo ""
|
||
echo " 下一步:"
|
||
echo " 1. 告诉你的 AI 客户端读取 kali/RULES-kali.md"
|
||
echo " 2. 或者直接问 AI:'读一下 kali/RULES-kali.md 并执行配置'"
|
||
echo " 3. 之后遇到安全/逆向任务会自动路由"
|
||
echo ""
|