hosttools

package
v0.3.95 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2026 License: AGPL-3.0 Imports: 4 Imported by: 0

Documentation

Overview

Package hosttools:宿主工具体检 + 安装配方。

二进制部署形态下,ARTEX 直接跑在操作系统里——宿主装了什么渗透工具, worker 就能通过 Bash 工具直接调用什么。这里用 exec.LookPath 探测一份 常用工具清单(可用/缺失+安装提示),注入 graph_overview 让模型派意图时 知道家底,并通过 /api/tools/inventory 暴露给前端展示。

同一份清单同时驱动「一键安装」:每条工具带一个 Kind + 配方(apt 包名 / GitHub Release 资产模板 / pip 包 / 仅手工),由特权助手 artex-hostd 按 配方执行。**体检清单和安装器共用这一个 catalog**,不存在"页面上列了、 安装器却不会装"的漂移。

LookPath 只扫 PATH,单次微秒级,无需缓存。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Arch added in v0.3.20

func Arch() string

Arch 归一化为 Release 资产里用的架构名。

func ArchAlt added in v0.3.46

func ArchAlt() string

ArchAlt 返回另一种架构命名:amd64→x86_64、arm64→aarch64。

GitHub 上各项目的资产命名不统一:ProjectDiscovery 系用 amd64/arm64, gitleaks/amass 用 x86_64/aarch64,chisel 的部分资产用 x86/arm。 模板里用 {arch}/{arch2}/{arch3} 分别对应这三套。

func ArchShort added in v0.3.46

func ArchShort() string

ArchShort 返回更短的架构命名:amd64→x86、arm64→arm。

func ArchX64 added in v0.3.46

func ArchX64() string

ArchX64 返回 gitleaks 用的命名:amd64→x64、arm64→arm64。

这是第四套命名——实测 gitleaks 的资产是 gitleaks_8.30.1_linux_x64.tar.gz 与 ..._linux_arm64.tar.gz,即 amd64 叫 x64、arm64 叫 arm64。

func CategoryLabel added in v0.3.52

func CategoryLabel(c Category) string

CategoryLabel 分类的中文标签(页面展示)。

func Summary

func Summary() map[string]any

Summary 注入 graph_overview / API 的紧凑形态: available 是可直接调用的二进制名清单;missing 带安装提示; hint 给模型一句话用法约定。

available 里每项都带**用途**("name: 用途"),不只给名字。 理由很实际:目录里现在有 30+ 个工具,模型只看到名字(chisel / dalfox / feroxbuster…)根本判断不出该在什么场景调哪一个,只能瞎试或者干脆不用。 带上用途后"派意图选手段以家底为准"才真正成立。

func SummaryText

func SummaryText() string

SummaryText 纯文本形态(提示词注入用):一行一个可用工具,带用途。

只列【可用】的:缺失的工具模型既不能调,也不该在提示里占位置(一次 worker 运行的 system prompt 里放几十条「未安装」纯属浪费上下文)。 用途必须带上——只给名字的话模型判断不出该在什么场景调哪个 (chisel / dalfox / feroxbuster 这类尤其明显)。

曾经这个函数定义了却没有调用方:工具清单只进了 planner 的唤醒提示, 而真正动手的 worker 看不到它——于是新装的一批工具一次都没被用起来。

Types

type Category added in v0.3.52

type Category string

Category 攻击面分类。Kind 说「怎么装」,Category 说「干什么用在哪」—— 目录里有 39 个工具,平铺成一张表没法看:用户要回答的是「Web 侧我有哪些家伙」, 而不是「一共有 39 行」。页面上按 Category 分组,模型侧的清单不受影响。

const (
	CatNetwork  Category = "network"  // 端口扫描/连通性/基础网络
	CatWeb      Category = "web"      // Web 侧的探测、爆破、扫描
	CatDNS      Category = "dns"      // 资产测绘与域名枚举
	CatCred     Category = "cred"     // 在线爆破、离线破解、横向移动
	CatCode     Category = "code"     // 源码/密钥泄露、代码审计
	CatPivot    Category = "pivot"    // 内网穿透、代理转发
	CatOOB      Category = "oob"      // 带外通道、通知
	CatExploit  Category = "exploit"  // 框架与二进制利用
	CatMaterial Category = "material" // 字典、语料
	CatRuntime  Category = "runtime"  // 脚本、证书、HTTP 等基础能力
	// CatMiddleware 是中间件协议专项工具。
	//
	// 为什么单列一类(2026-10-22 调研):近 30 天 NVD 上 CVSS≥9.0 的高危
	// 漏洞,中间件占了很大一块——apache/http_server、apache/cxf(SOAP)、
	// mariadb、rabbitmq_server、moquette(MQTT)、gitlab、splunk、f5/big-ip、
	// fortinet/fortimail…而通用扫描器(nmap/nuclei)对这类**协议型**中间件
	// 要么不认、要么只做通用探测。
	//
	// 这里的工具是**协议客户端库**——不是「一键打洞」的漏洞利用器,而是让
	// Agent 能直接跟中间件说话:枚举配置、读队列、订阅主题、调管理 API。
	// 「怎么打」仍由 Agent 结合漏洞情报决定。
	CatMiddleware Category = "middleware" // 中间件协议专项(MQTT/AMQP/DB/SOAP/设备等)
)

type Kind added in v0.3.20

type Kind string

Kind 安装方式。manual = 官方只提供交互式安装器,不做一键。

const (
	KindApt    Kind = "apt"    // 系统包管理器(apt/dnf)
	KindGitHub Kind = "github" // GitHub Release 单文件
	KindPip    Kind = "pip"    // pip / pipx
	KindManual Kind = "manual" // 不提供一键安装
)

type Tool

type Tool struct {
	ID   string `json:"id"`   // 稳定标识(与 Bin 相同)
	Name string `json:"name"` // 工具名(展示用)
	Bin  string `json:"bin"`  // PATH 里探测的二进制名

	Available   bool     `json:"available"`
	Installable bool     `json:"installable"`       // 能否一键安装
	Purpose     string   `json:"purpose"`           // 干什么用(给模型看)
	Install     string   `json:"install,omitempty"` // 缺失时展示的安装提示
	Kind        Kind     `json:"kind"`
	Category    Category `json:"category"` // 攻击面分类(页面分组用)

	// kind=apt: 各包管理器下的包名
	Apt string `json:"-"`
	Dnf string `json:"-"`

	// kind=github: owner/repo + 资产名模板({ver} 不带 v,{arch} = amd64|arm64)
	// + 压缩包内二进制名(空 = 与 Bin 同名)
	Repo      string `json:"-"`
	AssetTmpl string `json:"-"`
	BinInZip  string `json:"-"`

	// kind=pip
	Pip string `json:"-"`

	// PipLibrary 标记这个 pip 包是**纯库**(没有命令行入口)。
	//
	// 为什么需要这个区分(2026-10-22 实测):pipx 只能装「带 CLI 入口的应用」,
	// 装纯库会直接失败并报:
	//
	//	No apps associated with package gmqtt or its dependencies. If you are
	//	attempting to install a library, pipx should not be used.
	//
	// 中间件协议工具(gmqtt/pika/pymongo/zeep…)全是纯库——它们是给 Agent
	// 在脚本里 import 的,不是命令行工具。装它们必须走 pip。
	//
	// 现有那些有 CLI 的(wafw00f/netexec/semgrep/pwntools)继续走 pipx:
	// 隔离环境不会污染系统 Python,正是我们想要的。
	PipLibrary bool `json:"-"`
}

Tool 一条体检结果 + 安装配方。

func Catalog added in v0.3.20

func Catalog() []Tool

Catalog 返回目录的副本(含派生字段,未探测可用性)。

func Inventory

func Inventory() []Tool

Inventory 探测全部目录项(顺序与 catalog 一致)。

func Lookup added in v0.3.20

func Lookup(id string) (Tool, bool)

Lookup 按 id 取配方;ok=false 表示不在白名单内——这是特权助手唯一的 输入校验依据:凡是这里查不到的 id 一律拒绝执行。

func (Tool) AvailableInPath added in v0.3.20

func (t Tool) AvailableInPath() bool

AvailableInPath 该工具当前是否已在 PATH 内。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL