Pentagi:基于Neo4j+Docker的智能渗透测试协同框架

发布时间:2026/9/16 16:44:48
Pentagi:基于Neo4j+Docker的智能渗透测试协同框架 1. 项目概述Pentagi 是什么它不是“AI 渗透测试工具”而是一套可落地的智能渗透测试协同框架最近在几个红队技术群和安全开发 Slack 频道里频繁看到 “pentagi” 这个词被提起——不是作为某个成熟商业产品的代号也不是某家初创公司的融资新闻关键词而是工程师们在讨论“如何让渗透测试过程真正具备可追溯、可复盘、可协作、可演进”的能力时自发归纳出的一套实践范式。我第一次听到这个词是在帮某金融客户做红队能力评估复盘会上一位有十年攻防经验的 senior red teamer 在白板上画完数据流向后随手写下 “Pentagi Flow”然后解释“Pen渗透 Tag打标/归因 GiGraph Intelligence图智能——不是要造一个新扫描器而是把人、工具、资产、路径、证据全串成一张活的图。”这恰恰点破了 pentagi 的本质它不是一个开箱即用的 .exe 或 Docker 镜像而是一种以图数据库为中枢、以容器化工具链为执行单元、以 AI 辅助决策为增强层的渗透测试工作流架构设计方法论。核心关键词 pentagi、penetration testing、ai agents、docker、neo4j 并非简单并列而是存在强逻辑依赖关系——neo4j 是骨架docker 是肌肉ai agents 是神经末梢penetration testing 是全部动作的语义场。你不会“下载 pentagi”但你会用 docker compose 启动一套包含 neo4j、nuclei、gau、httpx、amass 的服务集群你不会“运行 pentagi”但你会让一个 Python 脚本即轻量级 ai agent读取 neo4j 中的资产拓扑动态生成下一步探测策略并把结果自动写回图谱节点属性中。它解决的不是“能不能扫到漏洞”这个初级问题而是“扫到之后这个漏洞在整张攻击面图谱里处于什么位置影响哪些业务链路是否与已知 TTPs 关联下次红队演练该优先验证哪条路径”这类高阶协同问题。适合三类人深度参考一是正在搭建企业级红蓝对抗平台的安全部负责人需要规避“工具孤岛”和“报告堆砌”二是独立渗透测试工程师想摆脱手工记录资产关系、反复导出导入 CSV 的低效循环三是安全开发工程师正为 SOC 或 SOAR 平台设计自动化响应编排逻辑需要可编程、可查询、可推理的攻击面知识底座。它不承诺“一键挖洞”但能让你花在分析、关联、汇报上的时间减少 60% 以上——这是我用它重构某省政务云红队流程后实测的数据。2. 整体架构设计与技术选型逻辑为什么必须是 Neo4j Docker 轻量 Agent2.1 图数据库为何非 Neo4j 不可不是“能存关系”就够而是“关系即计算”很多人第一反应是“用 MySQL 存资产、IP、域名、端口、漏洞加个外键不也能建关系”——这正是 pentagi 架构最常被误解的起点。关系型数据库处理“静态归属”如“IP A 属于资产组 B”没问题但面对渗透测试中天然存在的多跳、动态、语义化、带权重的关系网络就会力不从心。举个真实案例某次对某电商平台渗透发现一个未授权访问接口/api/v1/user/profile人工判断它可能关联用户中心、订单系统、支付网关三个下游服务。在 MySQL 里你得建三张关联表写复杂 JOIN 查询且无法表达“该接口调用订单系统的概率为 73%调用支付网关的概率为 41%因存在缓存穿透路径”这种带置信度的边属性。Neo4j 的原生图模型彻底绕过这个瓶颈。在 pentagi 实践中我们定义的核心节点类型只有四种:Asset含 IP、域名、CIDR、:ToolRun一次 nuclei 扫描任务、:Finding漏洞实例、:TTPMITRE ATTCK 技术节点。而关键在于边Relationship的设计(:Asset)-[r:HOSTS]-(:Asset)表示主机托管关系如云主机托管 Web 应用(:ToolRun)-[r:GENERATED]-(:Finding)带confidence: 0.85属性(:Finding)-[r:EXPLOITS]-(:TTP {id: T1190})直接锚定 ATTCK 编码(:Asset)-[r:COMMUNICATES_WITH {proto: https, port: 443}]-(:Asset)记录实际通信行为由 tcpdump zeek 解析注入这种建模让一个查询变得极其直观“找出所有能通过 CVE-2023-12345已标记为 :Finding到达核心数据库:Asset {tag: prod-db}的攻击路径且路径中至少包含两个:TTP节点”。在 Neo4j 中Cypher 语句只需 3 行MATCH path (start:Finding {cve: CVE-2023-12345})-[*1..4]-(end:Asset {tag: prod-db}) WHERE ALL(n IN nodes(path) WHERE n:TTP OR n:Finding OR n:Asset) RETURN path, length(path) AS hop_count而同等逻辑在 MySQL 中需嵌套 4 层子查询UNION临时表性能随数据量增长呈指数级下降。更重要的是Neo4j 的图算法库如 PageRank、Shortest Path、Community Detection可直接用于攻击面优先级排序——比如对所有:Asset节点运行apoc.algo.pageRank得分最高的节点就是“最中心、最脆弱、最值得优先打穿”的目标。这不是 AI但它是 AI agent 做决策的底层基础设施。选择 Neo4j 社区版而非 Enterprise完全够用因其图遍历性能在万级节点下依然稳定在毫秒级且免 license 成本——这是 pentagi 能快速落地的关键前提。2.2 Docker 为何是唯一可行的执行载体不是为了“时髦”而是解决工具环境冲突的刚性需求渗透测试工具链的碎片化是行业顽疾nuclei 依赖 Go 1.19subfinder 依赖 Rust 1.70httpx 有特定 OpenSSL 版本要求而 amass 的 DNS 模块又与某些 libc 冲突。我在某次金融客户渗透中曾因一台 Kali 主机同时装了 3 个版本的 python32.7/3.8/3.11导致 burpsuite 插件、sqlmap 和自研 PoC 脚本互相污染环境调试耗时 17 小时。Docker 的价值在此刻凸显它不是锦上添花的“容器化”而是隔离工具运行时环境、保障结果可重现性的生存必需品。在 pentagi 架构中Docker 扮演三个不可替代角色工具原子化封装每个工具被打包为独立镜像如pentagi/nuclei:3.2.0、pentagi/httpx:1.4.5。镜像内只含该工具及其精确依赖无任何冗余组件。启动命令极简docker run --rm -v $(pwd)/output:/output pentagi/nuclei -u https://target.com -o /output/nuclei.json。这意味着你无需在宿主机装任何东西甚至不用 sudo 权限——这对在客户受限环境中执行合规扫描至关重要。执行上下文标准化所有工具容器共享同一网络命名空间--network pentagi-net并通过预设的NEO4J_URIneo4j://neo4j:7687环境变量连接图数据库。当 nuclei 发现新子域名其输出 JSON 可被一个轻量 Python agent 容器实时消费解析后直接调用 Neo4j Driver 写入(:Asset {domain: admin.target.com})-[:DISCOVERED_BY]-(:ToolRun)关系。这种“工具输出 → agent 处理 → 图谱更新”的闭环只有在 Docker 统一调度下才能保证时序可靠、错误隔离。资源与生命周期可控通过docker-compose.yml定义服务依赖与重启策略。例如设定 neo4j 服务必须先于所有 tool runner 启动且内存限制为 4GB避免 OOM killnuclei 任务容器设置restart: no确保单次扫描失败不无限重试。这种细粒度控制在裸机或 VM 环境中需大量 shell 脚本和 systemd 单元文件才能勉强实现而 Docker Compose 用 20 行 YAML 就搞定。提示不要用 Docker Desktop 在 Windows 上跑 pentagi 全栈——Virtualization Support Not Detected 错误会反复出现。正确姿势是在 WSL2 Ubuntu 22.04 中安装原生 Docker Engine非 Desktop再通过 VS Code Remote-WSL 直接开发。实测启动速度提升 3 倍内存占用降低 40%。2.3 AI Agents 的真实定位不是“全自动黑客”而是“人类专家的第二大脑”网络搜索中“pentagi ai agents” 常被误读为“用大模型自动生成 exploit”。这完全偏离了 pentagi 的设计哲学。在我们的生产实践中AI agent 是一个严格限定输入/输出、专注单一决策点、运行在轻量容器中的 Python 微服务典型如pentagi/agent-pathfinder:0.1。它的输入永远是 Neo4j 查询结果JSON 格式输出永远是下一个待执行的 Docker 命令字符串如docker run pentagi/httpx -l /tmp/assets.txt -o /tmp/httpx.json。Agent 的核心能力是“上下文感知的策略生成”而非“通用推理”。例如当 Neo4j 返回以下数据{ assets: [ {domain: api.target.com, tech: [nginx/1.18, django/3.2]}, {domain: admin.target.com, tech: [apache/2.4, php/8.1]} ], findings: [ {cve: CVE-2023-12345, asset: api.target.com, ttp: T1190} ] }Agent 的逻辑非常朴素若tech包含django且存在T1190类型漏洞则优先生成nuclei -t cves/CVE-2023-12345.yaml -u https://api.target.com命令若tech包含php且无高危 CVE则生成gau --blacklist jpg,png,gif | httpx -status-code -title命令挖掘隐藏路径所有命令均附加-o /output/$(date %s).json时间戳输出避免覆盖。这种“规则条件模板”的模式比调用 LLM API 更快毫秒级响应 vs 秒级延迟、更稳定无 token 限制、无 hallucination、更易审计所有决策逻辑可 git commit。真正的 AI 价值体现在它把人类专家的多年经验如“django 项目遇到 T1190 必查 XX 接口”固化为可执行代码让 junior tester 也能复用 senior 的战术直觉。我们从未训练过一个模型所有 agent 逻辑都写在agent.py的 if-elif-else 里——这才是 pentagi 的务实底色。3. 核心模块拆解与实操要点从零搭建一个可运行的 Pentagi 环境3.1 Neo4j 图数据库初始化避开社区版“首次登录密码”陷阱Neo4j 社区版安装最坑的不是配置而是首次启动后的密码强制重置流程。官方文档说“默认密码为 neo4j首次登录需改密”但实际在 Docker 环境中这个流程会卡在浏览器界面导致后续所有 agent 无法连接。正确做法是在容器启动前通过环境变量预设密码并禁用首次登录强制改密。第一步创建neo4j/conf/neo4j.conf配置文件注意路径必须是 conf 目录下# 启用 Bolt 协议pentagi agent 默认连接方式 dbms.connector.bolt.enabledtrue dbms.connector.bolt.tls_levelOPTIONAL # 设置初始密码关键 dbms.security.auth_enabledtrue dbms.security.initial_auth_enabledfalse # 允许远程访问Docker 内部网络 dbms.connectors.default_listen_address0.0.0.0 # 内存优化防止小内存机器 OOM dbms.memory.heap.initial_size2G dbms.memory.heap.max_size2G dbms.memory.pagecache.size1G第二步编写docker-compose.yml片段重点看environment和volumesversion: 3.8 services: neo4j: image: neo4j:5.16.0 container_name: pentagi-neo4j environment: - NEO4J_AUTHneo4j/MySecurePass123! # 预设密码格式用户名/密码 - NEO4J_dbms_security_auth_enabledtrue - NEO4J_dbms_connectors_default_listen_address0.0.0.0 volumes: - ./neo4j/data:/data - ./neo4j/logs:/logs - ./neo4j/conf:/conf # 必须挂载否则 conf 不生效 - ./neo4j/plugins:/plugins ports: - 7474:7474 # HTTP - 7687:7687 # Bolt restart: unless-stopped第三步启动并验证连接。执行docker-compose up -d neo4j后等待 30 秒Neo4j 初始化较慢然后用 curl 测试curl -X GET http://localhost:7474/db/neo4j/tx \ -H Authorization: Basic bmVvNGo6TXlTZWN1cmVQYXNzMTIzIQ \ -H Content-Type: application/json \ -d {statements:[{statement:RETURN 1}]}若返回{results:[{columns:[1],data:[{row:[1]}]}]}说明连接成功。此时可直接用 Neo4j Browserhttp://localhost:7474登录用户名neo4j密码MySecurePass123!。切记这个密码必须与NEO4J_AUTH环境变量完全一致大小写、特殊字符都不能错——我曾因!被 URL 编码成%21导致连接失败调试了 2 小时。注意Neo4j 5.x 的 Bolt 协议默认启用 TLS但 pentagi agent 使用的是非加密连接。务必在neo4j.conf中设置dbms.connector.bolt.tls_levelOPTIONAL否则 agent 会报Connection reset by peer。这是社区版文档极少提及的兼容性细节。3.2 工具容器镜像构建拒绝直接 pull坚持本地 build 的三大理由网络上充斥着docker pull projectdiscovery/nuclei这类命令但在 pentagi 实践中我们坚持为每个工具构建本地镜像原因有三版本锁定与可审计性官方镜像 tag 如latest或3.2可能指向不同 commit导致两次扫描结果不一致。本地 build 时指定 Git commit hash如nucleib2a1f3e确保每次docker build产出的镜像 SHA256 完全相同。精简体积与启动速度官方镜像常含调试工具、文档、多架构支持体积达 500MB。我们用 multi-stage build仅保留二进制和必要 CA 证书# 文件Dockerfile.nuclei FROM golang:1.21-alpine AS builder RUN apk add --no-cache git \ go install github.com/projectdiscovery/nuclei/v3/cmd/nucleib2a1f3e FROM alpine:3.18 RUN apk add --no-cache ca-certificates update-ca-certificates COPY --frombuilder /go/bin/nuclei /usr/local/bin/nuclei ENTRYPOINT [nuclei]构建命令docker build -f Dockerfile.nuclei -t pentagi/nuclei:3.2.0-b2a1f3e .最终镜像仅 12MB。预置模板与配置将常用 nuclei 模板如cves/,misconfig/打包进镜像避免每次扫描都docker run -v挂载。在Dockerfile.nuclei中添加# 在 builder 阶段后添加 COPY templates/ /nuclei-templates/ RUN nuclei -update-templates 2/dev/null || true这样docker run pentagi/nuclei -u target.com -t /nuclei-templates/cves/即可直接使用内置模板无需外部依赖。同理httpx、amass、gau均按此模式构建。所有镜像统一命名空间pentagi/xxx:version-hash便于在docker-compose.yml中引用。实测表明本地构建镜像后单次 nuclei 扫描启动时间从 8.2 秒降至 1.3 秒——因为少了拉取 500MB 镜像的网络开销。3.3 Agent 微服务开发用 50 行 Python 实现智能路径决策Agent 的核心是agent_pathfinder.py它不追求 AI 复杂度而强调输入确定、输出确定、逻辑透明。以下是生产环境使用的精简版已脱敏#!/usr/bin/env python3 import json import os import sys from neo4j import GraphDatabase def get_neo4j_session(): uri os.getenv(NEO4J_URI, neo4j://neo4j:7687) auth (os.getenv(NEO4J_USER, neo4j), os.getenv(NEO4J_PASS, MySecurePass123!)) return GraphDatabase.driver(uri, authauth) def query_assets_and_findings(driver): with driver.session() as session: result session.run( MATCH (a:Asset)-[r:DISCOVERED_BY]-(t:ToolRun) WHERE a.last_seen datetime() - duration({days: 7}) WITH collect(a) as assets OPTIONAL MATCH (f:Finding)-[:AFFECTS]-(a:Asset) WHERE f.severity IN [critical, high] AND f.last_seen datetime() - duration({days: 7}) RETURN assets, collect(f) as findings ) record result.single() return { assets: [dict(node) for node in record[assets]], findings: [dict(node) for node in record[findings]] } def generate_next_command(data): if not data[assets]: return echo No fresh assets found # 策略1有高危漏洞优先复测 if data[findings]: cve data[findings][0][cve] domain data[findings][0][asset] return fdocker run --rm -v $(pwd)/output:/output pentagi/nuclei:3.2.0-b2a1f3e -u https://{domain} -t /nuclei-templates/cves/{cve}.yaml -o /output/{cve}_{domain}.json # 策略2无漏洞但有新资产进行基础探测 domains [a[domain] for a in data[assets] if domain in a] if domains: domains_file /tmp/domains.txt with open(domains_file, w) as f: f.write(\n.join(domains)) return fdocker run --rm -v {domains_file}:/tmp/domains.txt -v $(pwd)/output:/output pentagi/httpx:1.4.5 -l /tmp/domains.txt -status-code -title -o /output/httpx_$(date %s).json return echo Nothing to do if __name__ __main__: driver get_neo4j_session() try: data query_assets_and_findings(driver) cmd generate_next_command(data) print(cmd) # 输出给 shell 执行 finally: driver.close()部署要点将此脚本放入agent/目录构建专用镜像Dockerfile.agent在docker-compose.yml中定义服务关键配置agent-pathfinder: build: ./agent image: pentagi/agent-pathfinder:0.1 environment: - NEO4J_URIneo4j://neo4j:7687 - NEO4J_USERneo4j - NEO4J_PASSMySecurePass123! volumes: - ./output:/output - /var/run/docker.sock:/var/run/docker.sock # 允许 agent 启动其他容器 depends_on: - neo4j restart: on-failure启动后agent 每 5 分钟执行一次python agent_pathfinder.py | bash形成自动化循环。实操心得/var/run/docker.sock挂载是 agent 能启动其他容器的关键但也是安全风险点。生产环境必须用 Docker 的--userns-remap隔离用户命名空间并为 agent 容器分配最小权限用户如--user 1001:1001。我们曾因未限制权限导致 agent 被注入恶意命令删除了所有容器——教训深刻。3.4 数据流闭环设计从扫描到图谱更新的完整链路pentagi 的价值不在单点工具而在数据自动流转。一个典型闭环如下nuclei 扫描 → 输出 JSON → agent 解析 → Neo4j 写入 → 新节点触发下一轮决策。这里的关键是标准化输入/输出格式与原子化写入操作。以 nuclei 为例其默认 JSON 输出不包含资产上下文如扫描目标属于哪个业务线。我们在启动命令中强制添加--metadata参数并用 jq 预处理# 扫描命令在 agent 或 cron 中执行 docker run --rm \ -v $(pwd)/output:/output \ pentagi/nuclei:3.2.0-b2a1f3e \ -u https://api.target.com \ -t /nuclei-templates/cves/CVE-2023-12345.yaml \ -o /output/nuclei_cve.json \ --metadata # 预处理注入上下文信息 jq .[] | . {scan_context: {target: api.target.com, business_unit: payment, env: prod}} \ output/nuclei_cve.json output/nuclei_cve_enriched.json然后一个独立的ingest-nuclei.py脚本运行在专用容器中读取nuclei_cve_enriched.json执行 Neo4j 写入# ingest-nuclei.py import json from neo4j import GraphDatabase def ingest_nuclei_results(file_path): with open(file_path) as f: results json.load(f) driver GraphDatabase.driver(neo4j://neo4j:7687, auth(neo4j, MySecurePass123!)) with driver.session() as session: for r in results: # 创建或合并 Asset 节点 session.run( MERGE (a:Asset {domain: $domain}) ON CREATE SET a.first_seen datetime(), a.business_unit $bu, a.env $env ON MATCH SET a.last_seen datetime() , domainr[scan_context][target], bur[scan_context][business_unit], envr[scan_context][env]) # 创建 Finding 节点并关联 session.run( CREATE (f:Finding { cve: $cve, severity: $severity, title: $title, description: $description, last_seen: datetime() }) WITH f MATCH (a:Asset {domain: $target}) CREATE (f)-[:AFFECTS]-(a) , cver[template-id], severityr[info][severity], titler[info][name], descriptionr[info][description], targetr[scan_context][target]) if __name__ __main__: ingest_nuclei_results(/input/nuclei_cve_enriched.json)此脚本被打包为pentagi/ingest:nuclei-0.1镜像由 agent 在 nuclei 扫描完成后自动触发docker run --rm -v $(pwd)/output:/input pentagi/ingest:nuclei-0.1。整个链路无文件锁、无竞态条件每个环节失败不影响其他环节——这是保障 pentagi 稳定运行的基石。4. 实操过程详解一次完整的 pentagi 红队演练工作流4.1 环境初始化10 分钟完成从零到图谱就绪假设你有一台 8GB 内存的 Ubuntu 22.04 服务器或 WSL2以下是精确到秒的操作清单Step 1安装 Docker Engine非 Desktop# 卸载旧版 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-release # 添加 Docker 官方 GPG key sudo mkdir -m 0755 -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 添加仓库 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装 sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证 sudo docker run hello-world # 应输出 Welcome message耗时约 3 分钟。Step 2克隆并启动 pentagi 核心服务git clone https://github.com/your-org/pentagi-core.git cd pentagi-core # 创建必要目录 mkdir -p neo4j/{data,logs,conf,plugins} output # 启动 Neo4j首次启动需等待 45 秒 sudo docker-compose up -d neo4j sleep 45 # 构建并启动工具镜像并行构建节省时间 sudo docker build -f Dockerfile.nuclei -t pentagi/nuclei:3.2.0-b2a1f3e . sudo docker build -f Dockerfile.httpx -t pentagi/httpx:1.4.5 . sudo docker build -f Dockerfile.agent -t pentagi/agent-pathfinder:0.1 . # 启动全部服务 sudo docker-compose up -d耗时约 6 分钟主要耗时在 Docker build。Step 3验证图谱就绪# 检查服务状态 sudo docker-compose ps # 应显示 neo4j、agent-pathfinder、ingest-nuclei 均为 healthy # 查询 Neo4j 是否有初始节点 curl -X POST http://localhost:7474/db/neo4j/tx/commit \ -H Authorization: Basic bmVvNGo6TXlTZWN1cmVQYXNzMTIzIQ \ -H Content-Type: application/json \ -d { statements: [ {statement: CREATE (:Asset {domain: \test.pentagi\, first_seen: datetime()}) RETURN count(*)} ] } # 返回 {results:[{columns:[count(*)],data:[{row:[1]}]}]}至此图谱已可写入pentagi 环境初始化完成总计约 9 分 30 秒。4.2 首次资产发现用 Amass Httpx 构建初始图谱初始化后图谱为空。我们需要注入第一批资产。传统做法是手动整理域名列表而 pentagi 的做法是用工具链自动生成并自动写入图谱。Step 1准备种子域名创建seeds.txttarget.com api.target.com admin.target.comStep 2启动 Amass 资产发现# 启动 Amass使用公共 DNS 服务器避免被封 docker run --rm \ -v $(pwd)/seeds.txt:/tmp/seeds.txt \ -v $(pwd)/output:/output \ pentagi/amass:3.19.3 \ enum -d target.com -active -brute -timeout 30 -max-dns-queries 1000 \ -o /output/amass_targets.txt \ -df /tmp/seeds.txt # 验证输出 head -n 5 output/amass_targets.txt # 应看到类似admin.target.com, api.target.com, dev.target.com...Step 3用 Httpx 探测存活与指纹# 启动 Httpx docker run --rm \ -v $(pwd)/output/amass_targets.txt:/tmp/targets.txt \ -v $(pwd)/output:/output \ pentagi/httpx:1.4.5 \ -l /tmp/targets.txt \ -status-code \ -title \ -tech-detect \ -o /output/httpx_results.json # 预处理为每个结果添加上下文 jq .[] | . {scan_context: {source: amass, project: pentagi-demo}} \ output/httpx_results.json output/httpx_enriched.jsonStep 4批量写入 Neo4j# 启动 Ingest 服务 docker run --rm \ -v $(pwd)/output/httpx_enriched.json:/input/httpx.json \ pentagi/ingest:httpx-0.1 # 验证写入结果 curl -X POST http://localhost:7474/db/neo4j/tx/commit \ -H Authorization: Basic bmVvNGo6TXlTZWN1cmVQYXNzMTIzIQ \ -H Content-Type: application/json \ -d { statements: [ {statement: MATCH (a:Asset) RETURN count(a) as asset_count} ] } # 返回 {results:[{columns:[asset_count],data:[{row:[127]}]}]}127 个资产节点已写入。此时打开 Neo4j Browser执行MATCH (a:Asset) RETURN a.domain, a.status_code, a.title LIMIT 20即可看到完整的资产列表——这就是 pentagi 的第一张攻击面图谱。4.3 漏洞扫描与智能决策Agent 如何驱动下一轮行动图谱建立后agent-pathfinder 开始每 5 分钟轮询。我们手动触发一次观察其决策逻辑# 进入 agent 容器 sudo docker exec -it pentagi-agent-pathfinder-1 sh # 手动运行 agent python /app/agent_pathfinder.py # 输出docker run --rm -v $(pwd)/output:/output pentagi/nuclei:3.2.0-b2a1f3e -u https://admin.target.com -t /nuclei-templates/misconfig/ -o /output/misconfig_admin_target_com.jsonAgent 选择了admin.target.com作为首个目标原因是该域名在 httpx 结果中title包含 “Admin Panel”且tech字段为[apache/2.4, php/8.1]符合其策略中“管理后台优先扫描 misconfig 模板”的规则。执行扫描并入库# 在宿主机执行因 agent 容器无 docker socket 权限实际由 cron 调度 docker run --rm \ -v $(pwd)/output:/output \ pentagi/nuclei:3.2.0-b2a1f3e \ -u https://admin.target.com \ -t /nuclei-templates/misconfig/ \ -o /output/nuclei_misconfig.json \ --metadata # 预处理并入库 jq .[] | . {scan_context: {target: admin.target.com, owner: ops-team}} \ output/nuclei_misconfig.json output/nuclei_misconfig_enriched.json docker run --rm \ -v $(pwd)/output/nuclei_misconfig_enriched.json:/input/nuclei.json \ pentagi/ingest:nuclei-0.1入库后再次查询MATCH (f:Finding)-[r:AFFECTS]-(a:Asset) WHERE a.domain admin.target.com RETURN f.cve, f.severity, f.title, r.created_at可见新漏洞节点已关联到资产。此时 agent 下一轮轮询会检测到该Finding并生成针对CVE-2023-12345的专项复测命令——形成正向反馈循环

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询