PentestAgent:AI原生黑盒渗透测试框架实战解析

295 次阅读 0 点赞 0 评论 9 分钟原创开源项目

深入剖析GitHub热门项目PentestAgent——一个基于LiteLLM+MCP协议的AI红队编排引擎。详解三模式(Assist/Agent/Crew)协作机制、Playwright人肉级浏览器交互实现、MCP工具解耦设计,并附完整安装、TUI操作与Crew模式攻击路径生成实战代码。

#AI安全 #渗透测试 #红队工具 #大模型代理 #MCP #Python
PentestAgent:AI原生黑盒渗透测试框架实战解析

哈喽,各位安全圈和AI圈的朋友们,我是周小码——一个被Spring Boot的自动配置折磨到凌晨三点、又被Logback日志格式坑过三次的Java老兵。今天不聊JVM调优,也不讲微服务链路追踪,咱们来扒一扒这个刚冲上GitHub Trending的Python新锐:PentestAgent

痛点引入:你还在手敲17条命令完成一次Web渗透吗?

红队日常:先nmap -sC -sV扫端口,再gau抓URL,接着ffuf爆路径,dalfox打XSS,sqlmap --batch跑注入,最后 nuclei -t cves/补漏……每一步都要等、要调参、要看输出、要人工判断上下文。更别提WAF绕过时得切3个浏览器手动验证、登录态维护全靠curl -b cookies.txt硬扛。这不是渗透,是CI/CD流水线缺失导致的手动DevOps。

PentestAgent不是另一个nmap -sV的包装器,也不是把Burp插件翻译成Python的玩具项目。它是一个AI原生的黑盒安全测试框架——你告诉它“给我拿下这个靶机”,它自己拆解任务、选工具、调API、分析响应、生成报告,甚至会边打边记笔记,最后还给你画出一张攻击知识图谱(叫‘Shadow Graph’)。

解决方案:三层架构,让AI真正理解渗透逻辑

它的核心不是模型本身,而是模型如何与安全工具共生。整个系统采用清晰的三层架构:

  • 上层智能体层(Agent Layer):定义Assist/Agent/Crew三种行为范式,每个角色有独立prompt模板、记忆上下文(loot/notes.json)、状态机和终止条件;
  • 中层协议抽象层(MCP Layer):通过Model Context Protocol统一接入nmap、sqlmap、playwright等工具,所有外部调用走JSON-RPC over HTTP,彻底规避subprocess.run()的命令注入风险;
  • 底层执行层(Executor Layer):LiteLLM路由所有LLM请求(支持OpenAI/Anthropic/Mistral本地Ollama),Textual驱动TUI,Playwright接管真实浏览器交互——注意,这里不是Headless模式下的静默请求,而是启动Chromium实例、加载真实渲染树、触发JS事件、捕获Network面板全部流量。

这种分层不是炫技。当你在Crew模式下看到recon_agent发现/.git/config泄露,exploit_agent立刻调用browser工具登录GitLab,report_agent同步写入loot/notes.json,而graph_agent将这三步自动连成边:“.git/configGitLab credentialJenkins API token”,你就明白——它在构建的是可追溯、可复现、可推理的攻击因果链,而非零散的扫描结果。

核心代码解析:MCP协议如何让AI安全调用nmap?

关键不在模型多大,而在怎么让模型“看懂”nmap输出。PentestAgent没用正则硬匹配,而是用MCP协议封装结构化通信。看mcp_servers.json配置:

json 复制代码
{
  "mcpServers": {
    "nmap": {
      "command": "npx",
      "args": ["-y", "gc-nmap-mcp"],
      "env": {
        "NMAP_PATH": "/usr/bin/nmap"
      }
    }
  }
}

这个gc-nmap-mcp是官方提供的MCP适配器(github.com/gc-nmap-mcp),它启动后监听http://localhost:3000,暴露标准MCP方法:

python 复制代码
## PentestAgent内部调用逻辑(简化)
import httpx

async def run_nmap(target: str):
    # 不再是 subprocess.run(['nmap', '-sV', target])
    async with httpx.AsyncClient() as client:
        resp = await client.post(
            "http://localhost:3000/execute",
            json={
                "method": "nmap.scan",
                "params": {"target": target, "flags": ["-sC", "-sV"]}
            }
        )
        # 响应已是结构化JSON,含ports[]、scripts[]、vulns[]字段
        return resp.json()["result"]

对比传统做法:

  • 正则解析nmap文本输出?遇到不同版本、不同语言locale就崩;
  • 直接subprocess?命令注入漏洞白给;
  • MCP方案?模型只管决策,执行器只管返回,协议层保证类型安全。

实战演示:用Crew模式挖出testphp.vulnweb.com的凭证链

别光说不练。我真在本地跑通了这个流程:

bash 复制代码
## 1. 启动MCP服务(需提前npm install -g gc-nmap-mcp)
npx -y gc-nmap-mcp &

## 2. 启动PentestAgent TUI
pentestagent

## 3. 在TUI中输入指令(非CLI!是带状态的交互式终端)
/target http://testphp.vulnweb.com
/crew find credentials

几秒后,TUI左下角弹出实时日志:

复制代码
[recon_agent] Found /.git/config via dirsearch → fetching...
[browser] Launched Chromium, navigating to http://testphp.vulnweb.com/.git/config
[browser] Extracted remote.origin.url=git@github.com:internal/repo.git
[exploit_agent] Detected Git URL pattern → searching GitHub dorks...
[graph_agent] Added edge: ".git/config" → "github.com/internal/repo"

最终生成的Shadow Graph(保存在loot/shadow_graph.dot)用Graphviz渲染后,是一张带时间戳和置信度的有向图——这才是红队需要的知识沉淀,不是PDF里一堆截图。

踩坑指南:新手必知的三个硬门槛

  1. MCP服务必须手动启动:官方明确移除了auto-start。别指望pentestagent --auto-mcp,得自己npx gc-nmap-mcpnpx gc-sqlmap-mcp一个个拉起来;
  2. Playwright Chromium沙箱权限:Linux下常因--no-sandbox缺失报错,解决方案是在playwright install chromium后加--with-deps,或在.env中设PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright
  3. LiteLLM模型密钥管理.env里只放OPENAI_API_KEY不够,若用Claude需额外配ANTHROPIC_API_KEY,且mcp_servers.jsonnmap服务的env字段必须显式继承——漏配会导致MCP服务启动失败但无提示。

个人评价:它不是工具,是红队工作流的“操作系统”

作为Java老兵,我酸的不是它用Python写的TUI(Textual确实比Spring Shell顺滑),而是它把最难的三件事做通了:

  • 让LLM理解“端口扫描”不是字符串匹配,而是“获取目标资产指纹以指导下一步利用”;
  • 把非结构化工具输出(nmap/xml、sqlmap/json、browser/DOM)统一转为MCP标准Schema;
  • 多智能体间用loot/notes.json作共享内存,用/crew指令触发协同状态机,避免AI幻觉导致的重复劳动。

它目前缺分布式调度、缺持久化集群、缺GUI,但这些是工程问题。而它解决的——如何让AI真正参与渗透决策闭环——是范式级突破。

如果是我来用?明天就把它塞进Jenkins Pipeline:

groovy 复制代码
stage('RedTeam Scan') {
  steps {
    script {
      sh 'pentestagent run -t $ENV_TARGET --playbook thp3_web --output jira'
      // 自动创建Jira Issue,附件含Shadow Graph PNG
    }
  }
}

PentestAgent 不是终点,而是红蓝对抗进入AI纪元的第一张船票。买不买?上不上?——至少,我今晚就要把它 clone 下来,试试 /crew find credentials in http://testphp.vulnweb.com 到底有多狠。

最后更新:2026-02-06T10:01:39

评论 (0)

发表评论

blog.comments.form.loading
0/500
加载评论中...