portbuster1337/lpe-toolkit

GitHub: portbuster1337/lpe-toolkit

多架构 Linux 本地权限提升工具包,自动检测内核版本并按序尝试漏洞利用以获取 root 权限。

Stars: 315 | Forks: 47

# Linux LPE 工具包 包含 20 个预编译和运行时可编译漏洞利用程序的多架构权限提升工具包。支持 amd64、arm64、386、mips、mipsle、mips64 和 mips64le。检测内核版本,过滤已修复的漏洞利用程序,并按顺序依次尝试,直到获取 root 权限。 ## 快速开始 ``` # 直接运行(如果嵌入了预编译的 binaries,则目标上不需要 gcc) ./lpe-toolkit # dry-run:显示 exploit 计划但不执行 ./lpe-toolkit --dry-run # 跳过特定的 exploits ./lpe-toolkit --skip "dirtyfrag,dirtypipe" # 一旦获得 root 权限即执行命令并显示其输出 ./lpe-toolkit -c "id" # silent automation:抑制除命令结果外的所有输出 ./lpe-toolkit -q -c "whoami" # verbose 输出(包含 exploit 的 stdout/stderr) ./lpe-toolkit -v ``` ## 使用方法 | Flag | 描述 | |------|-------------| | `--dry-run` | 显示哪些漏洞利用程序可用/被跳过 | | `--just-build` | 解析所有漏洞利用程序,打印路径,退出(用于打包) | | `--skip LIST` | 要跳过的漏洞利用程序名称列表(以逗号分隔) | | `-c`, `--command CMD` | 以 root 权限执行 CMD,而不是启动交互式 shell | | `-q`, `--quiet` | 隐藏工具包提示信息;仅显示 root shell 输出或 `获取 root 权限失败` | | `-v`, `--verbose` | 在输出中包含漏洞利用程序的 stdout/stderr(与 `-q` 互斥) | **注意:** `-v` 和 `-q` 是互斥的 —— 如果同时指定两者,工具包将报错退出。 ## 漏洞利用 | # | 名称 | 目标 | 类型 | |---|------|--------|------| | 1 | Copy Fail `CVE-2026-31431` | AF_ALG + splice page-cache write | 预编译 / 编译 | | 2 | Dirty Frag `CVE-2026-43284` | xfrm-ESP/RxRPC page-cache write | 预编译 / 编译 | | 3 | Fragnesia `CVE-2026-46300` | espintcp splice page-cache corruption | 预编译 / 编译 | | 4 | DirtyDecrypt `CVE-2026-31635` | rxgk pagecache write | 预编译 / 编译 | | 5 | Fragnesia v2 | skb_segment GRO coalesce | 预编译 / 编译 | | 6 | PinTheft | RDS zerocopy + io_uring page-cache overwrite | 预编译 / 编译 | | 7 | Dirty Pipe `CVE-2022-0847` | /etc/passwd page-cache overwrite | 预编译 / 编译 | | 8 | CIFSwitch `CVE-2026-46243` | cifs.spnego + NSS namespace confusion | 预编译 / 编译 | | 9 | PwnKit `CVE-2021-4034` | pkexec environment escape | 预编译 / 编译 | | 10 | OverlayFS `CVE-2021-3493` | user-ns mount escape | 预编译 / 编译 | | 11 | OvFS+FUSE `CVE-2023-0386` | FUSE mount escape | 预编译 / 编译 | | 12 | Pack2TheRoot `CVE-2026-41651` | PackageKit D-Bus race → setuid root | 编译 | | 13 | Polkit D-Bus `CVE-2021-3560` | accounts-daemon race | 预编译 / 编译 | | 14 | Docker Socket | writable /var/run/docker.sock | 预编译 / 编译 | | 15 | netfilter OOB `CVE-2021-22555` | ip_tables corruption | 预编译 / 编译 | | 16 | nft UAF2 `CVE-2022-2586` | nftables chain UAF | 预编译 / 编译 | | 17 | pidfd race `CVE-2026-46333` | ssh-keysign/shadow FD theft | 预编译 / 编译 | | 18 | CPU Timer Race `CVE-2025-38352` | POSIX timer race (PoC) | 预编译 / 编译 | | 19 | nft UAF `CVE-2024-1086` | Notselwyn multi-file nftables | 预编译 / 编译 | | 20 | GTFOBins | 80+ passwordless sudo techniques | go-handler | ## 从源码构建 ``` # native build(预编译 C exploits 然后嵌入到 Go binary 中) make # 为所有架构进行 cross-compile(仅限 native 架构的 C exploits) make build-all # 直接从源码运行(在运行时于目标上编译 exploits) make run-source # 清理 build artifacts make clean ``` 环境要求:Go 1.21+、gcc,以及适用于目标架构的交叉编译器: - **arm64**: `aarch64-linux-gnu-gcc` - **386**: `i686-linux-gnu-gcc` - **mips**: `mips-linux-gnu-gcc` - **mipsle**: `mipsel-linux-gnu-gcc` - **mips64**: `mips64-linux-gnuabi64-gcc` - **mips64le**: `mips64el-linux-gnuabi64-gcc` ## 预编译二进制文件打包 `--just-build` 参数会解析所有可用的漏洞利用程序并打印它们的路径。可使用它来验证在运行时哪些内容可用。 每个版本的预编译二进制存档都包含一个静态链接的 Go 二进制文件,其中嵌入的 C 漏洞利用程序已针对所有受支持的架构(amd64、arm64、386、mips、mipsle、mips64、mips64le)进行了预编译。 ## 架构 - **`toolkit.go`**:核心漏洞利用定义、内核版本解析、二进制文件解析、GTFOBins sudo 滥用处理器、用于非交互式命令执行的 `execCommandAsRoot()`,以及 `msg()`/`say()` 详细程度辅助工具 - **`main.go`**:带有 flags(`-c`、`-q`、`-v`、`--skip`、`--dry-run`、`--just-build`)和信号处理的 CLI 入口点 - **`build-exploits.sh`**:用于 C 漏洞利用程序的交叉编译脚本 - **`exploits/`**:通过 `//go:embed` 嵌入的 C 源码文件和预编译二进制文件 ### 显著变更 - **cve_2026_41651.c**:添加了 Pack2TheRoot —— 原始 D-Bus 客户端(无需 libdbus)利用 PackageKit `InstallFiles` SIMULATE/NONE flags 触发竞争,从而以 root 权限执行 postinst,并在 `/var/tmp/.suid_bash` 处投放 setuid-root bash - 所有漏洞利用程序(包括仅泄露/仅 PoC)现在都会生成 root shell 或执行请求的命令 - **cve_2026_46333.c**:添加了 `try_passwd_root()` —— 从 `passwd` 窃取可写的 `/etc/shadow` fd,写入已知的密码哈希,然后生成 `su -`;失败时回退到仅泄露方法 - **cve_2025_38352.c**:添加了 dirtypipe 风格的 `/etc/passwd` `splice()` 覆盖 → `root::0:0:` → 生成 `su -` - **Command 模式**:page-cache 漏洞利用使用 `--corrupt-only` 跳过交互式 PTY 桥接;`execCommandAsRoot()` 通过管道将命令传递给 `su` stdin 以实现可靠的非交互式执行
标签:CSV导出, Web报告查看器, 多架构, 客户端加密, 提权, 日志审计