news 2026/8/23 16:25:14

SUID3NUM源码解析:一个700行Python脚本如何实现SUID自动提权

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SUID3NUM源码解析:一个700行Python脚本如何实现SUID自动提权

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 程序打印出来,不做任何区分。结果就是:

  • ❌ 一屏全是susudomount这类本来就有 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,无需安装任何第三方依赖,全部基于内置模块(sysostime),克隆下来就能用。

两种运行模式:

模式命令行为
枚举模式python suid3num.py仅列出 SUID 程序并打印提权命令,供手动执行
自动提权模式python suid3num.py -e自动执行所有"无副作用"的 SUID 提权命令 ⚡

⚠️ 官方在README.md中特别提示:如果你不确定-e会做什么,不要带-e参数运行,先看懂再执行。

源码结构:791 行单文件,五张"知识表"

整个项目只有一个核心代码文件 suid3num.py,另有 output.matlab 保存了作者的完整运行样例。

打开源码会发现一个关键设计:前 596 行几乎全是"数据",后 200 行才是"逻辑"。这些数据结构就是脚本的"知识库":

数据结构所在行作用
customSUIDs12~206 行约 190 个自定义 SUID 程序的完整利用命令库
defSUIDBinaries209~258 行Linux 系统自带、不可利用的 SUID 黑名单(susudomount…)
suidExploitation262~328 行安全自动执行的提权命令字典(如bash-p
gtfoBinsSuidsList332~546 行GTFO Bins 中完整 SUID 可利用的程序清单
gtfoBinsLimitedSuidsList549~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参数。

总结:值得初学者借鉴的三个设计点

  1. 极简依赖:只导入sys.argvos.system/popentime.sleep三行,791 行单文件,拿到就能跑——"独立脚本"的教科书级示范
  2. 数据驱动:把知识沉淀成五张字典/列表,扩展新利用方式只需加数据,逻辑代码零改动
  3. 安全分级:区分"可自动执行的无害利用"与"有副作用需人工确认的利用",自动化与安全的边界划得很清楚

如果你在做 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/23 16:22:09

IP-Adapter-FaceID 人脸一致性出图实战:一张照片到多风格人像

IP-Adapter-FaceID 人脸一致性出图实战:一张照片到多风格人像 【免费下载链接】IP-Adapter-FaceID 项目地址: https://ai.gitcode.com/hf_mirrors/h94/IP-Adapter-FaceID 用 Stable Diffusion 给人物换装、换场景,最折磨人的是脸:换一…

作者头像 李华
网站建设 2026/8/23 16:12:20

dingo 数据质量评估:给 LLM 训练数据做体检

dingo 数据质量评估:给 LLM 训练数据做体检 【免费下载链接】dingo Dingo: A Comprehensive AI Data, Model and Application Quality Evaluation Tool 项目地址: https://gitcode.com/gh_mirrors/dingo5/dingo 语料里混着重复文档、乱码、身份证号&#xff…

作者头像 李华
网站建设 2026/8/23 16:12:00

如何10分钟快速部署Sunshine:从零开始的游戏串流完整指南

如何10分钟快速部署Sunshine:从零开始的游戏串流完整指南 【免费下载链接】foundation-sunshine Sunshine fork: an enhanced sunshine, a self-hosted game streaming host for Moonlight with HDR10/HDR Vivid, virtual displays, advanced audio, optimized enco…

作者头像 李华
网站建设 2026/8/23 16:10:22

如何用LLaMA-Factory微调MiniCPM-o-2_6:全模态模型领域适配完整教程

如何用LLaMA-Factory微调MiniCPM-o-2_6:全模态模型领域适配完整教程 【免费下载链接】MiniCPM-o-2_6 项目地址: https://ai.gitcode.com/OpenBMB/MiniCPM-o-2_6 MiniCPM-o-2_6 是 OpenBMB 开源的 8B 全模态多模态模型,支持图像、视频、音频理解与…

作者头像 李华