aaron-kidwell/goLoL
GitHub: aaron-kidwell/goLoL
一款 Windows 主机扫描工具,整合 LOLBAS 与 LOLDrivers 目录,按当前权限枚举可滥用的系统二进制技术并检测已知恶意或存在漏洞的本地驱动。
Stars: 65 | Forks: 7
# goLoL
**goLoL** 是一款 Windows 主机扫描器,双重支持 **[LOLBAS](https://lolbas-project.github.io/)** 二进制文件和 **[LOLDrivers](https://www.loldrivers.io/)**。它可以列出在当前权限级别下可运行的 LOLBAS 技术(包含 MITRE ATT&CK 映射),并能够扫描本地 `.sys` 文件以匹配存在漏洞或恶意的 LOLDrivers 哈希值。
**注意:** 这不是一个 OPSEC 安全工具。
**作者:** Aaron Kidwell
```
█████ █████
░░███ ░░███
███████ ██████ ░███ ██████ ░███
███░░███ ███░░███ ░███ ███░░███ ░███
░███ ░███░███ ░███ ░███ ░███ ░███ ░███
░███ ░███░███ ░███ ░███ █░███ ░███ ░███ █
░░███████░░██████ ███████████░░██████ ███████████
░░░░░███ ░░░░░░ ░░░░░░░░░░░ ░░░░░░ ░░░░░░░░░░░
███ ░███
░░██████
░░░░░░
```

## 功能
- **实时 LOLBAS 目录**:从 [lolbas-project.github.io](https://lolbas-project.github.io/api/lolbas.json) 拉取最新条目
- **磁盘检测**:将记录的路径解析到本地的 `%WINDIR%`、`%ProgramFiles%`、`%USERPROFILE%` 和 WindowsApps 位置
- **感知权限的过滤**:仅显示在当前级别可运行的技术
- **MITRE ATT&CK 标签**:将技术 ID 映射为可读名称(例如 `T1003.003: NTDS`)
- **灵活的排序**:按二进制文件、权限级别或 ATT&CK 技术分组
- **驱动模式**:对本地 `.sys` 文件进行哈希处理,并与实时的 [LOLDrivers](https://www.loldrivers.io/) JSON 目录进行匹配
- **纯文本输出模式**:仅输出 ASCII 字符,适用于 telnet、reverse shell 和其他不稳定的终端
- **轻量级扫描**:通过 Go API 进行文件系统检查;管理员组检测使用 `net localgroup`(在 Windows 上仅产生一个子进程)
## 权限级别
| 你的上下文 | 你能看到的内容 |
|---|---|
| 标准用户 | 用户级技术 |
| 本地 **Administrators** 组成员 | 用户级 + 管理员级技术 |
| **NT AUTHORITY\\SYSTEM** | 用户级 + 管理员级 + SYSTEM级技术 |
即使你的账户在 Administrators 组中,管理员级命令可能仍然需要提升权限的 shell 才能运行。除非进程 token 是 SYSTEM (`S-1-5-18`),否则 SYSTEM 级条目将被隐藏。
## 环境要求
- **Windows**(主要目标;非 Windows 构建会跳过权限检查)
- **Go 1.21+**(项目使用 Go 1.26.2)
- **网络访问权限**(每次运行都需要获取 LOLBAS/LOLDrivers 目录,不进行离线缓存)
## 安装
**远程安装**(需要 GitHub 上有标记的 release,例如 `v0.1.0`):
```
go install github.com/aaron-kidwell/goLoL@latest
```
二进制文件将放置在你的 `GOPATH/bin`(或 `~/go/bin`)中。在 Windows 上,请确保该目录在你的 `PATH` 中。
**克隆并构建:**
```
git clone https://github.com/aaron-kidwell/goLoL.git
cd goLoL
go build -ldflags="-s -w" -trimpath -o golol.exe .
```
## 用法
`goLoL` 支持两种扫描模式:
- **LOLBAS 模式(默认)**:用于 living-off-the-land 二进制文件和按权限过滤的技术
- **LOLDrivers 模式**:通过 `-driver` 参数匹配存在漏洞或恶意的驱动哈希
请在模块根目录下运行(`internal/` 包有此要求):
```
go run .
```
构建二进制文件(推荐:会剥离调试信息,体积减小约 30%):
```
go build -ldflags="-s -w" -trimpath -o golol.exe .
.\golol.exe
```
`-s -w` 会移除符号表和 DWARF 调试数据。本项目默认的 `go build` 体积约为 9.5 MB;加上这些参数后体积会降至约 6.4 MB。
### 参数
| 参数 | 描述 |
|---|---|
| `-h`, `-help` | 显示帮助 |
| `-driver` | 扫描本地驱动并列出已知的 LOLDrivers 漏洞/恶意匹配项 |
| `-plain` | 仅输出 ASCII 字符(无颜色、Unicode 或光标控制) |
| `-s`, `-search` | 按名称显示单个二进制文件(如 `certutil` 或 `certutil.exe`);如果不在磁盘上则会报告 |
| `-sort` | 排序结果:`binary`(默认)、`privilege` 或 `attack` |
排序别名:`b`、`priv` / `p`、`mitre` / `a`。无效值将打印错误并显示帮助。
### 示例
```
# 默认:按 binary 名称分组 (A-Z)
go run .
# Driver 模式(根据 LOLDrivers hash 扫描本地 .sys 文件)
go run . -driver
# 查询单个 binary
go run . -s certutil
.\golol.exe -s certutil.exe
# 优先 Admin tier,然后是 user tier(以 SYSTEM 身份运行时优先 SYSTEM tier)
go run . -sort privilege
# 按 MITRE ATT&CK ID 排序
go run . -sort attack
# Reverse shell / telnet 友好的输出
go run . -plain
# 组合 flags
go run . -plain -sort attack
```
### 输出示例
计数和二进制文件因主机而异。本 README 顶部的截图展示了交互模式(彩色终端,按二进制文件分组)。
**纯文本模式** (`-plain`):
```
[*] Checking process token...
[*] Fetching LOLBAS catalog...
[+] Found 147 binaries, 299 techniques
==============================================================
Role: administrator
Sort: binary
Binaries: 147
Techniques: 299
==============================================================
[1] Esentutl.exe
Path: C:\Windows\System32\esentutl.exe
...
```
## 工作原理
1. 检测当前进程的权限上下文(标准用户、本地管理员组成员或 SYSTEM)。
2. 在默认模式下,下载并解析 LOLBAS JSON 目录。
3. 对于每个 LOLBAS 条目,将记录的路径重新映射到本地文件系统,并检查该二进制文件是否存在。
4. 按权限级别过滤命令,并根据解析到的磁盘路径进行去重。
5. 在 `-driver` 模式下,下载 LOLDrivers JSON 目录,对本地 `.sys` 文件进行哈希处理,并报告匹配的哈希值。
6. 打印包含路径、ATT&CK 技术、使用场景和示例命令的结果(或者在 `-driver` 模式下打印驱动匹配的元数据)。
| 组件 | 位置 |
|---|---|
| LOLBAS 目录 | `https://lolbas-project.github.io/api/lolbas.json` |
| LOLDrivers 目录 | `https://www.loldrivers.io/api/drivers.json` |
| 权限检测 | `internal/privileges` |
| MITRE 技术名称 | `internal/mitre` |
| 路径解析与输出 | `main.go` |
## 项目布局
```
.
├── docs/
│ └── screenshot.png # README screenshot
├── main.go
├── internal/
│ ├── mitre/
│ │ └── names.go # MITRE ATT&CK ID to label map
│ └── privileges/
│ ├── privileges_windows.go # Token / Administrators group checks
│ └── privileges_stub.go # Non-Windows stub
├── go.mod
└── go.sum
```
## 免责声明
仅供**已授权的**安全测试、实验室使用和教育使用。仅对你拥有或获得明确评估许可的系统运行。LOLBAS 条目描述了可能会被攻击者滥用的技术,请负责任地使用。作者不对滥用行为负责。
技术和元数据来源于 [LOLBAS Project](https://github.com/LOLBAS-Project/LOLBAS) 和 [LOLDrivers](https://github.com/magicsword-io/LOLDrivers)。goLoL 不隶属于这两个项目,也未获得它们的认可。
## 许可证
MIT
标签:API接口, EVTX分析, Go, LOLBAS, LOLDrivers, Ruby工具, Web报告查看器, 主机扫描, 威胁情报, 开发者工具, 日志审计, 知识库安全