SaraaIhab/Linspect-LinuxInspector
GitHub: SaraaIhab/Linspect-LinuxInspector
一个用于Linux系统权限提升枚举的安全审计脚本。
Stars: 0 | Forks: 0
# linspect.py — Linux 权限提升枚举工具
## 概述
`linspect.py` 是一个手动 Linux 权限提升枚举工具,也是 [LinPEAS](https://github.com/carlospolop/PEASS-ng) 的基准比较工具。它系统地审计 Linux 系统中常见的错误配置和漏洞,这些可能允许低权限用户提升至 root 权限。
该工具完全使用 Python 3 标准库编写 — 无需任何外部依赖项。
## 工作原理
主要导入项包括 `subprocess`,用于从 Python 脚本内部运行 shell 命令;`os`,用于与操作系统和平台交互;以及 `platform`,用于获取系统信息(如主机名)。开头定义的常量,如 `GREEN = "\033[92m"` 和 `CYAN = "\033[96m"` 是 ANSI 转义码,其目的是使输出结果更易于人类阅读和快速查看。
主要有四个辅助函数。首先,`run()` 作为 Python 代码与外部 shell 之间的网关,设置了 10 秒超时,以避免被缓慢的命令阻塞。其次,`section()` 用于打印标题,让最终用户知道当前扫描正在运行哪个部分。这是一个纯装饰性的函数。第三,`finding()` 使用开头定义的 ANSI 转义码打印发现结果。最后,`record()` 将所有发现结果存储在一个字典中,准备用于 JSON 导出。
## 10 个检查模块
### 1. `check_system_info()` — 系统信息
通过运行 `whoami` 和 `os.getuid()` 来识别当前用户,并运行 `id` 列出所有组成员身份,以收集有关机器的上下文信息。如果 UID 为零,则用户已经是 root,此时工具会通知无需进行权限提升,且持久化向量更为相关。
### 2. `check_kernel()` — 内核漏洞匹配
字典中存储了四个最知名的内核漏洞。工具运行 `uname -r` 获取完整的内核字符串,并检查它是否与四个漏洞前缀中的任何一个匹配。如果发现匹配,则标记为严重警告。否则,会提醒用户未找到自动匹配。此函数还检查并显示已安装的 `sudo` 版本。
### 3. `check_suid()` — SUID / SGID 二进制文件
运行 `find / -perm -4000` 和 `find / -perm -2000` 来查找设置了 SUID 或 SGID 位的文件。SUID 位允许二进制文件以其所有者(通常是 root)的权限运行。虽然对于像 `/bin/passwd` 这样的命令是合法的,但对于像 `find` 这样的实用程序是危险的,因为它可能生成一个特权 shell。找到的二进制文件会与策划的 `GTFOBIN_SUID` 列表进行交叉参考 — 任何匹配项都被标记为 CRITICAL。
### 4. `check_world_writable()` — 全局可写文件与目录
运行 `find / -writable -type f`(排除 `/proc`、`/sys` 和 `/dev` 等虚拟文件系统)来查找任何人都可以写入的文件。结果会与敏感路径列表(`/etc`、`/opt`、`/var/www` 等)进行交叉参考 — 任何匹配项都被标记为 CRITICAL,因为由 root 拥有的进程读取全局可写的配置文件是一个直接的权限提升向量。
### 5. `check_cron()` — Cron 任务分析
Cron 任务是基于时间的调度器,按设定的时间间隔运行预定义任务。工具检查三个来源:
- `/etc/crontab`:检查系统范围的 cron 任务
- `/etc/cron.d/`:一个 cron 目录的存放位置
- `/var/spool/cron/crontabs`:检查每个用户的 cron 任务
如果 cron 任务引用的任何脚本是全局可写的,则任何用户都可以注入将以 root 权限执行的命令。
### 6. `check_sudo()` — Sudo 配置
运行 `sudo -l` 并检查两种危险模式:
- **NOPASSWD**:用户可以无需密码以 root 权限运行某些命令
- **ALL**:广泛的权限,表明用户可以以 root 权限运行任何命令
### 7. `check_services()` — 服务与进程
运行 `ps aux | grep '^root'` 列出所有由 root 拥有的进程,然后搜索可写的 systemd 服务文件。如果可以修改某个 `.service` 文件,则可以在下次服务重启或系统重启时,通过更改其 `ExecStart` 指令以 root 身份执行任何有效负载。
### 8. `check_path()` — PATH 劫持
检查当前用户的 `$PATH` 环境变量中的任何目录是否可写。如果是,攻击者可以植入一个具有常见名称(例如 `ls`、`id`)的恶意二进制文件,当特权进程调用时,该文件会替代真实命令执行。如果 `$PATH` 中包含 `.`(当前目录),也会进行标记。
### 9. `check_interesting_files()` — 凭据与密钥
搜索高价值目标,包括:
- `~/.bash_history`:命令历史记录,通常包含明文密码
- `id_rsa` / `id_ed25519`:SSH 私钥,可实现横向移动
- `/etc/shadow`:哈希密码(在正常条件下仅 root 可读)
- `.env` 文件:API 密钥和数据库凭据
- `.my.cnf`:通常以明文形式存储的 MySQL 凭据
- 包含单词 `password` 的配置文件
### 10. `check_network()` — 网络暴露
使用 `ss -tlnp` 列出所有正在监听的 TCP 服务。标记绑定到 `127.0.0.1`(回环地址)的服务 — 这些服务不暴露于网络,但本地攻击者可以访问,并且可能通过端口转发加以利用。
## 输出与报告
所有检查完成后,工具会按严重性打印发现摘要:
| 严重性 | 含义 |
|--------|------|
| 💀 CRITICAL | 可直接利用的错误配置 |
| ⚠️ WARNING | 潜在危险 — 需手动审查 |
| ℹ️ INFO | 仅供参考 — 值得注意 |
| ✅ OK | 未检测到问题 |
完整的 JSON 报告将保存到 `/tmp/privesc_report_.json`,以供离线审查或与 LinPEAS 输出进行比较。
## 使用方法
```
# 克隆 repo
git clone https://github.com/SaraaIhab/Linspect-LinuxInspector.git
cd Linspect-LinuxInspector/
# 运行该工具 (Python 3,无需依赖项)
python3 privesc_enum.py
```
## 项目结构
```
privesc_enum/
├── privesc_enum.py # Main enumeration script
├── README.md # This file
├── LICENSE # MIT License
└── sample_output/
└── example_report.json # Example JSON output
```
## 免责声明
此工具**仅供教育目的**,仅限在授权环境中使用,例如:
- 个人家庭实验室
- CTF (Capture The Flag) 挑战赛
- 获得书面许可的渗透测试项目
未经授权对不属于您的系统使用是**非法且不道德的**。作者对任何滥用行为不承担任何责任。
## 许可证
MIT 许可证 — 详情请参阅 [LICENSE](LICENSE)。
标签:Linux权限提升, Python脚本工具, 低权限到root, 内核漏洞检测, 基准测试工具, 安全审计工具, 安全弱点识别, 手动安全审计, 无线安全, 权限提升枚举, 渗透测试辅助, 漏洞扫描工具, 系统信息收集, 系统枚举, 系统配置检查