SUID3NUM源码解析:一个700行Python脚本如何实现SUID自动提权
【免费下载链接】SUID3NUMA standalone python script which utilizes python's built-in modules to enumerate SUID binaries, separate default binaries from custom binaries, cross-match those with bins in GTFO Bin's repository & auto-exploit those, all with colors! ( ͡~ ͜ʖ ͡°)项目地址: https://gitcode.com/gh_mirrors/su/SUID3NUM
SUID3NUM 是一款独立运行的 SUID 提权枚举 Python 脚本:它只用标准库就能全盘找出 SUID 二进制,区分系统与自定义程序,自动比对 GTFO Bins 已知可利用清单,并一键输出甚至执行提权命令。今天我们来拆解这个 791 行单文件脚本的完整设计思路,看看它如何把"SUID 自动提权"做成一条流水线。
为什么需要 SUID3NUM:告别"撞墙"式提权
先说背景:Linux 上带有 SUID 位(SetUID,权限 4000)的程序,运行时会以文件所有者(通常是 root)的身份执行。如果某个可提权的 SUID 程序被误配或版本有洞,它就是普通用户拿 root 的捷径。
但传统枚举脚本(如 LinEnum)只会把所有 SUID 程序打印出来,不做任何区分。结果就是:
- ❌ 一屏全是
su、sudo、mount这类本来就有 SUID、且不可利用的系统自带程序 - ❌ 新手对着清单研究 3~4 小时,最后发现"没有可打的目标"
- ❌ 真正"有意思的"自定义 SUID 程序淹没在噪音里
SUID3NUM 要解决的就是这个问题:自动过滤噪音、高亮可打目标、直接给出提权命令,甚至替你执行(-e参数)。
快速上手:SUID3NUM 一键安装与运行
只需三步即可跑起来:
git clone https://gitcode.com/gh_mirrors/su/SUID3NUM cd SUID3NUM python suid3num.py💡 该脚本兼容 Python 2.5~3.7,无需安装任何第三方依赖,全部基于内置模块(sys、os、time),克隆下来就能用。
两种运行模式:
| 模式 | 命令 | 行为 |
|---|---|---|
| 枚举模式 | python suid3num.py | 仅列出 SUID 程序并打印提权命令,供手动执行 |
| 自动提权模式 | python suid3num.py -e | 自动执行所有"无副作用"的 SUID 提权命令 ⚡ |
⚠️ 官方在
README.md中特别提示:如果你不确定-e会做什么,不要带-e参数运行,先看懂再执行。
源码结构:791 行单文件,五张"知识表"
整个项目只有一个核心代码文件 suid3num.py,另有 output.matlab 保存了作者的完整运行样例。
打开源码会发现一个关键设计:前 596 行几乎全是"数据",后 200 行才是"逻辑"。这些数据结构就是脚本的"知识库":
| 数据结构 | 所在行 | 作用 |
|---|---|---|
customSUIDs | 12~206 行 | 约 190 个自定义 SUID 程序的完整利用命令库 |
defSUIDBinaries | 209~258 行 | Linux 系统自带、不可利用的 SUID 黑名单(su、sudo、mount…) |
suidExploitation | 262~328 行 | 可安全自动执行的提权命令字典(如bash→-p) |
gtfoBinsSuidsList | 332~546 行 | GTFO Bins 中完整 SUID 可利用的程序清单 |
gtfoBinsLimitedSuidsList | 549~596 行 | GTFO Bins 中 Limited SUID(受限提权)清单 |
这种"数据与逻辑分离"的写法是它最值得学习的地方:
- 新增可利用程序 = 往字典里加一行,不用改任何逻辑代码
- 五张表分工明确:黑名单负责"降噪",清单负责"命中判定",两个命令字典负责"给答案"
核心流程拆解:四步流水线
main()函数(772 行起)把整个流程串成四步,非常清晰。
第 1 步:全盘扫描 SUID 程序
核心逻辑在list_all_suid_binaries()(620~635 行),真正干活的只是一条 shell:
find / -perm -4000 -type f 2>/dev/null-perm -4000:筛选设置了 SUID 位的文件-type f:只要普通文件(排除目录等)2>/dev/null:丢弃无权限目录的报错噪音
脚本通过os.popen执行这条命令,把结果按行切分成列表返回——几十行的枚举脚本,核心命令其实只有一行。
第 2 步:三分类——黑名单过滤 + GTFO 比对
check_suids_in_gtfo()(638~728 行)是整个脚本的灵魂,逻辑浓缩成一句话:
取文件名的最后一段,先查黑名单,再查 GTFO 清单,输出三个结果。
bin_name = bins.split("/")[::-1][0] # 取路径最后一段作为程序名 if bin_name not in defSUIDBinaries: custom_suid_bins.append(bins) # ① 非系统自带 → 自定义 SUID(重点目标) if bin_name in gtfoBinsSuidsList or bin_name in gtfoBinsLimitedSuidsList: bins_in_gtfo.append(bins) # ② 命中 GTFO Bins → 可直接提权 else: default_suid_bins.append(bins) # ③ 系统自带 → 直接跳过输出时分三段彩色打印,一眼分清轻重缓急:
- 🔵Default Binaries (Don't bother):系统自带,别浪费时间
- 🩵Custom SUID Binaries (Interesting Stuff):自定义程序,值得研究
- 🟢SUID Binaries in GTFO bins list (Hell Yeah!):命中已知利用库,附上 GTFO Bins 对应章节的锚点链接(完整 SUID 或 Limited SUID)
对命中 GTFO 清单但不在suidExploitation(自动执行白名单)里的程序,脚本会从customSUIDs大字典中取出利用步骤,进入"手动利用区"打印——因为这些利用方式会在系统上创建/修改文件,有副作用,必须人来确认。
第 3 步:生成并(可选)自动执行提权命令
exploit_enumerated_suids()(731~769 行)负责最后的临门一脚:
if _bin in suidExploitation: _results = suid_bins + " " + suidExploitation[_bin] # 拼出"程序 + 提权参数" commands.append(_results)- 不带
-e:只把拼好的命令打印出来,提示"请手动执行" - 带
-e:先打印命令、sleep(0.5)留点戏剧感,再调用os.system()真实执行 🎯
比如发现/bin/nc.openbsd可提权时,最终执行的就是nc -e /bin/sh这类命令——一条命令直接拿到 shell。
第 4 步:彩色 Banner 与交互细节
代码后半段还定义了一组 ANSI 转义颜色常量(603~610 行)和 4 行 ASCII Banner(614~617 行),让终端输出自带"黑客风格":不同颜色的段落标记[#][!][~]$分别对应"扫描中""跳过""自定义""可执行",配合分隔线,长输出也层次分明。
main()里还贴心地捕获了KeyboardInterrupt——按Ctrl+C中断时不会抛丑陋的堆栈,而是打出一句俏皮的 "Aye, why you do dis!?"。
看一次真实运行:output.matlab 样例
仓库内置的 output.matlab 是一份完整的运行实录,能直观看到输出结构:
[#] Finding/Listing all SUID Binaries .. ------------------------------ /bin/zsh /bin/umount /bin/su /bin/mount /bin/ping ...先列出全部 SUID 程序,随后依次进入"Default(蓝色)→ Custom(青色)→ GTFO 命中(绿色)→ Manual Exploitation(黄色)"各分区,最后给出可执行命令。新手建议先读一遍这份样例,再去对照源码理解每个分区的由来。
使用注意:OSCP 考试能带吗?
作者在README.md中明确回答:可以。他本人在 OSCP 考试中用过并在报告中注明了出处,但建议考试时不要使用-e自动利用,只保留枚举能力即可。
再强调一次使用原则(摘自官方 Note):
请先了解 SUID 位的工作原理再运行脚本;不知道自己在做什么时,不要带
-e参数。
总结:值得初学者借鉴的三个设计点
- 极简依赖:只导入
sys.argv、os.system/popen、time.sleep三行,791 行单文件,拿到就能跑——"独立脚本"的教科书级示范 - 数据驱动:把知识沉淀成五张字典/列表,扩展新利用方式只需加数据,逻辑代码零改动
- 安全分级:区分"可自动执行的无害利用"与"有副作用需人工确认的利用",自动化与安全的边界划得很清楚
如果你在做 CTF、OSCP 备考或权限提升研究,SUID3NUM 这种"枚举 → 过滤 → 比对 → 利用"的四段式设计,本身就是一个可以套用到其他枚举工具上的优秀模板。
(项目采用 MIT 许可证 发布,可自由使用与二次开发。)
【免费下载链接】SUID3NUMA standalone python script which utilizes python's built-in modules to enumerate SUID binaries, separate default binaries from custom binaries, cross-match those with bins in GTFO Bin's repository & auto-exploit those, all with colors! ( ͡~ ͜ʖ ͡°)项目地址: https://gitcode.com/gh_mirrors/su/SUID3NUM
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考