渗透测试MCP服务器

一个基于Kali Linux的教育性Web渗透测试MCP服务器,使用临时Docker容器与Claude Code集成,提供行业标准安全工具进行授权安全测试。

  • by MaorOhana
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 MaorOhana/pentest-docker-mcp

使用说明

最重要的MCP服务器

基于Kali Linux的模型上下文协议(MCP)服务器,用于教育网络渗透测试,使用临时Docker容器直接与Claude Code集成。

概述

此服务器允许Claude Code与行业标准安全工具进行交互,以便在本地实验室环境中进行授权的安全测试。与典型的MCP实现不同,此服务器使用 临时容器架构 每次扫描都在一个具有完整功能的隔离的、短暂的Docker容器中运行,然后立即终止。

可用工具

  • nmap_scan:支持SYN扫描的服务发现和端口扫描
  • 展示:Web服务器配置错误和漏洞扫描
  • sqlmap_scan:自动SQL注入检测
  • dirb_scan:内容发现(目录暴力破解)
  • searchsploit_query:本地漏洞数据库查找

⚠️ 安全与道德

重要:仅在您拥有或有明确书面许可进行测试的系统上使用这些工具。此服务器专为家庭实验室或沙箱环境中的教育目的而设计。

未经授权访问计算机系统是非法的。

建筑

Claude Code Session
  ↓
MCP Server (runs on host)
  ↓
For each command:
  ↓
  Fresh Docker Container with Capabilities
    ↓
  Execute Command (nmap, nikto, etc.)
    ↓
  Return Results
    ↓
  Container Auto-Terminates & Removes

证券收益

✅ 短暂隔离 -每次扫描都在一个新鲜的容器中运行 ✅ 无持久状态 -容器使用后立即销毁 ✅ 全功能 -NET_RAW、NET_ADMIN用于特权扫描 ✅ 自动清理 -无集装箱残留物 ✅ 最小攻击面 -无状态安全模型

先决条件

  1. Docker 桌面版 (或Docker引擎)

    • 下载:https://www.docker.com/products/docker-desktop
    • 验证: docker --version
  2. Python 3.8+

    • 验证: python3 --version
  3. Claude 代码命令行界面

    • 安装: curl -fsSL https://claude.ai/install.sh | sh
    • 验证: claude --version (应显示2.0.5+)
  4. MCP Python库

    • 将在安装步骤中安装

安装指南

步骤1:克隆存储库

git clone https://github.com/MaorOhana/pentest-docker-mcp.git
cd pentest-docker-mcp

第二步:构建Docker镜像

此映像包含所有安全工具(Nmap、Nikto、Sqlmap、Dirb、Searchsploit):

docker build -t pentest-mcp-server:latest .

# Verify the image was created
docker images | grep pentest-mcp-server

构建时间:约10-15分钟(下载Kali Linux和安全工具)

步骤3:在主机上安装MCP依赖项

MCP服务器在您的主机上运行(不在Docker中),因此我们需要安装它的依赖项:

pip3 install "mcp[cli]>=1.2.0" --user

步骤4:配置Claude代码

将pentest服务器添加到您的Claude Code MCP配置中:

# Copy the .mcp.json to your project directory
cp .mcp.json /path/to/your/project/.mcp.json

# Or manually create .mcp.json with:
cat > .mcp.json << 'EOF'
{
  "mcpServers": {
    "pentest-server": {
      "command": "/absolute/path/to/pentest-docker-mcp/run-pentest-server.sh",
      "type": "stdio"
    }
  }
}
EOF

重要:替换 /absolute/path/to/pentest-docker-mcp 你的实际路径。

要获取绝对路径,请执行以下操作:

cd /path/to/pentest-docker-mcp
pwd
# Use this output in the command path above

步骤5:使包装脚本可执行

chmod +x run-pentest-server.sh

步骤6:测试安装

# Test that the server starts correctly
echo '{"jsonrpc":"2.0","id":1,"method":"ping"}' | ./run-pentest-server.sh

# You should see a JSON response like:
# {"jsonrpc":"2.0","id":1,"result":{}}

步骤7:启动Claude代码

cd /path/to/your/project
claude code

当系统提示有关新MCP服务器时,选择:

❯ 1. Use this and all future MCP servers in this project

步骤8:验证集成

在Claude Code会话中,键入:

/mcp

你应该看看 pentest-server 列出了5个可用工具。

使用示例

配置后,在Claude Code对话中自然地使用这些工具:

端口扫描(带SYN扫描)

Scan host.docker.internal with nmap using SYN scan on common ports

或者对于您的Mac本地主机:

Run an nmap SYN scan on host.docker.internal ports 80, 443, 22, 8080

Web漏洞扫描

Run a nikto scan against http://testsite.local to check for web vulnerabilities

目录发现

Use dirb to scan http://localhost:8080 for hidden directories

利用数据库搜索

Search exploitdb for "apache 2.4.49" vulnerabilities

SQL注入测试

Test http://localhost:8080/page?id=1 for SQL injection vulnerabilities with sqlmap

macOS注意:扫描本地计算机

在macOS上,Docker在VM中运行,因此要从容器内部扫描实际的Mac,请使用:

  • host.docker.internal 而不是 127.0.0.1 或 localhost

例子:

Scan host.docker.internal with nmap to see what services are running on my Mac

运作原理

传统方法(未使用)

MCP Server (in Docker) → Persistent Container → All scans run inside
❌ Container stays running
❌ State persists between scans
❌ Higher security risk

我们的方法(短暂容器)

MCP Server (on host) → Each scan:
  1. Spawn fresh container with capabilities
  2. Execute command (e.g., nmap)
  3. Return results
  4. Container terminates & removes
✅ No persistent containers
✅ Fresh environment per scan
✅ Automatic cleanup

验证短暂行为

您可以实时观察容器的创建和销毁:

# Terminal 1: Watch Docker events
docker events --filter 'image=pentest-mcp-server:latest'

# Terminal 2: Run a scan in Claude Code
# You'll see: create → start → die → destroy (all in < 1 second)

检查是否有剩余的容器:

docker ps -a | grep pentest
# Should show no results

结合Docker MCP网关

您可以使用这个pentest服务器 旁边 其他服务器的Docker MCP网关:

{
  "mcpServers": {
    "MCP_DOCKER": {
      "command": "docker",
      "args": ["mcp", "gateway", "run"],
      "type": "stdio"
    },
    "pentest-server": {
      "command": "/path/to/pentest-docker-mcp/run-pentest-server.sh",
      "type": "stdio"
    }
  }
}

这为您提供了:

  • MCP_DOCKER:对于标准服务器(黑曜石、GitHub等),通过网关
  • pentest服务器:直接连接,功能齐全

故障排除

服务器未启动

  1. 检查Python路径:

    which python3
    # Update run-pentest-server.sh if needed
    
  2. 检查MCP库:

    python3 -c "import mcp; print('MCP installed')"
    
  3. 检查Docker镜像:

    docker images | grep pentest-mcp-server
    # Should show: pentest-mcp-server:latest
    

权限错误

如果出现“不允许操作”错误:

# Verify Docker is running
docker ps

# Rebuild the image (includes setcap for nmap)
docker build -t pentest-mcp-server:latest .

工具未出现在/mcp中

  1. 检查.mcp.json路径:

    cat .mcp.json
    # Verify the command path is absolute, not relative
    
  2. 测试包装器脚本:

    ./run-pentest-server.sh
    # Should start the server and wait for input
    
  3. 检查克劳德代码日志:

    claude doctor
    

扫描超时

如果扫描时间过长且超时:

  1. 命令有5分钟的超时时间(300秒)
  2. 要获得更快的扫描速度,请使用目标选项:
    Scan host.docker.internal with nmap -F (fast scan, top 100 ports)
    

集装箱清理问题

如果容器没有被移除:

# Check for stuck containers
docker ps -a | grep pentest

# Force cleanup if needed
docker rm -f $(docker ps -aq --filter "ancestor=pentest-mcp-server:latest")

这 --rm Docker命令中的标志可确保自动清理。

更新服务器

当你对Python服务器代码进行更改时:

# No need to rebuild Docker image for server code changes
# Just restart your Claude Code session

# If you modify Dockerfile or add tools:
docker build -t pentest-mcp-server:latest .

高级配置

修改资源限制

编辑 pentest_server.py 要更改Docker资源限制:

docker_cmd = [
    "docker", "run", "--rm",
    # ... existing flags ...
    "--memory=4g",      # Increase from 2g
    "--cpus=2.0",       # Increase from 1.0
    # ...
]

添加自定义安全工具

  1. 将工具添加到 Dockerfile:

    RUN apt-get install -y your-tool
    
  2. 重建映像:

    docker build -t pentest-mcp-server:latest .
    
  3. 在中添加工具功能 pentest_server.py:

    @mcp.tool()
    async def your_tool_scan(target: str = "") -> str:
        """Description of your tool."""
        if not target.strip(): return "❌ Error: Target is required."
        logger.info(f"Running your-tool on {target}")
        return run_command_in_container(["your-tool", target])
    

网络配置

服务器使用 --network=host 默认情况下为完全网络访问。要更改:

编辑 pentest_server.py 并修改 docker_cmd 使用不同的网络:

"--network=bridge",  # Isolated network
# or
"--network=your-custom-network",  # Custom Docker network

安全考虑

是什么让它安全

  1. 短命容器:每次扫描都在一个立即销毁的新鲜容器中运行
  2. 无持久状态:扫描之间没有数据持续存在
  3. 独立执行:每个容器都与主机和其他容器隔离
  4. 资源限制:CPU(1核)和内存(2GB)限制可防止资源耗尽
  5. 非root用户:命令以如下方式运行 mcpuser (UID 1000),不是root
  6. 最小功能:仅授予必要的Linux功能(NET_RAW、NET_ADMIN、NET_BIND_SERVICE)
  7. 审计跟踪:所有工具执行都会记录到带有时间戳的stderr中

与Docker MCP网关的比较

功能 Docker MCP网关 我们最重要的服务器
容器生命周期 短暂✓ 短暂✓
能力支持 ❌ 受限 ✓ 完整(NET_RAW等)
用例 通用MCP服务器 安全测试工具
安全模型 沙盒(最低权限) 特权但隔离

Docker MCP网关根据一般安全性的设计限制了功能。我们的服务器授予功能,因为它们 必需的 用于渗透测试工具,但通过短暂的隔离来维护安全性。

卸载

从克劳德代码中删除

# Edit .mcp.json and remove the pentest-server entry
# Or delete the entire .mcp.json if it only contains pentest-server
rm .mcp.json

删除Docker镜像

docker rmi pentest-mcp-server:latest

删除存储库

cd ..
rm -rf pentest-docker-mcp

卸载MCP库(可选)

pip3 uninstall mcp -y

常见问题解答

Q: 为什么不使用Docker MCP网关? A: 网关出于安全考虑限制了Linux的功能。像nmap这样的渗透测试工具需要NET_RAW功能来进行SYN扫描和其他特权操作。

Q: 赋予容器这些功能安全吗? A: 是的,当与临时容器一起使用时。每个容器都是隔离的,作为非根运行,有资源限制,使用后立即销毁。没有持续的攻击面。

Q: 我可以在生产中使用这个吗? A: 这是为 仅限教育和授权的安全测试。切勿在非自有或未经明确许可的系统上使用。

Q: 为什么服务器在主机上运行,而不是在Docker中运行? A: 基于主机的MCP服务器为每个命令生成临时Docker容器。这为我们提供了两全其美的选择:轻量级的服务器管理和隔离的特权执行。

Q: 如何扫描我的Mac本地主机? A: 使用 host.docker.internal 而不是 127.0.0.1macOS上的Docker在VM中运行,因此容器需要这个特殊的主机名才能到达您的Mac。

Q: 我可以同时运行多个扫描吗? A: 是的!每次扫描都有自己的容器,因此它们并行运行而不受干扰。

贡献

欢迎投稿!请确保:

  • 新工具遵循临时容器模式
  • 维护安全最佳实践
  • 工具包括正确的错误处理
  • 文档已更新

许可证

仅供教育使用。负责任和合乎道德地使用。

免责声明

此工具仅用于授权的安全测试和教育目的。用户有责任在执行任何安全测试之前确保他们有适当的授权。作者对误用或非法使用本软件不承担任何责任。

资源

  • Claude代码文档: https://code.claude.com/docs/en/mcp
  • 模型上下文协议: https://modelcontextprotocol.io
  • Docker文档: https://docs.docker.com
  • Kali Linux工具: https://www.kali.org/tools/
  • 开放式Web应用程序安全项目: https://owasp.org

致谢

内置: