当前位置: 首页 > news >正文

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),仅供参考

http://www.cnnetsun.cn/news/4176464.html

相关文章:

  • IP-Adapter-FaceID 人脸一致性出图实战:一张照片到多风格人像
  • iOS悬浮窗通话怎么做?react-native-agora画中画(PiP)完整实现指南
  • Scout-App偏好设置全解析:托盘驻留、声音提醒与桌面通知的3分钟快速配置指南
  • dingo 数据质量评估:给 LLM 训练数据做体检
  • 如何10分钟快速部署Sunshine:从零开始的游戏串流完整指南
  • 如何用LLaMA-Factory微调MiniCPM-o-2_6:全模态模型领域适配完整教程
  • ol-plot 入门使用指南:三步把标绘工具接到 OpenLayers 地图上
  • 浏览器里改暗黑破坏神2存档:用 d2s-editor 快速调属性、导物品的完整指南
  • TrollInstallerX 安装 TrollStore 完整教程:4 步装好,iOS 14.0-16.6.1 通用
  • 快捷键失灵了?3 分钟用 Hotkey Detective 揪出偷走全局热键的进程
  • 3 步跑通 Beyond Compare 5 密钥生成:BCompare_Keygen 零基础上手指南
  • LiteRT-LM视觉能力实战:多模态LLM在树莓派上识别图像完整指南
  • Windows苹果驱动安装完整指南:1分钟让iPhone USB网络共享跑起来
  • 抖音去水印下载完整指南:一条命令保存单个视频或整站主页
  • miqu-1-70b量化版本终极选择指南:q2_K、q4_k_m、q5_K_M三大档深度对比
  • ExplorerPatcher 任务栏属性窗口无法打开:4 层排查阶梯,一文搞定
  • OpenCore Legacy Patcher:老 Mac 升级最新 macOS Sequoia 的完整方法
  • AIMNet2-rxn 局限性与完整解决方案:突破 H/C/N/O 元素限制的化学反应模拟策略
  • Keep:把 20 条告警压成 1 个事件,AIOps 告警关联的开源解法
  • 商用前必看:flux-RealismLora非商业许可证避坑指南与风险解读
  • MouseJiggler 从安装到防休眠:一份完整的 Windows 实用指南
  • 开源项目caniuse如何保证554个feature数据的准确性:validate-jsons.js校验机制代码实现深度剖析
  • Great Expectations数据契约:4步给数据流水线装上质检闸
  • Awoo Installer 安装使用指南:3 种通道把 NSP、NSZ、XCI、XCZ 一次装进 Switch
  • WechatHook微信自动化完整指南:一文搞懂微信机器人5大核心玩法
  • 隐私优先的开源联系人+短信神器Connect You:从安装到全面上手的完整指南
  • libheif未来发展方向解析:AVIF标准演进与6大新技术支持
  • react-s-alert 全部 12 个配置项详解:stack、beep、offset 参数完全手册
  • 读懂LLaVA-v1.5-13B的config.json:CLIP视觉塔、mlp2x_gelu投影器与LLaMA-2的8个核心配置参数
  • 压缩包密码找回:4 条命令跑完整份字典,不用装任何软件