SUID/SGID位检测与全盘扫描:GTFONow二进制权限漏洞检测代码实现
SUID/SGID位检测与全盘扫描GTFONow二进制权限漏洞检测代码实现【免费下载链接】GTFONowAutomatic privilege escalation for misconfigured capabilities, sudo and suid binaries using GTFOBins.项目地址: https://gitcode.com/gh_mirrors/gt/GTFONowGTFONow 是一款运行在 Linux/Unix 系统上的SUID/SGID 二进制权限漏洞检测工具它以 GTFOBins 漏洞库为引擎自动扫描系统中的 SUID、SGID 位、Linux Capabilities 和 sudo 配置找出可被利用的本地提权点并一键给出可用的利用载荷。对刚接触渗透测试的新手来说它把「找漏洞 查利用方法 执行利用」这三步合并成了一条命令。本文带你读懂它最核心的SUID/SGID 位检测逻辑和全盘扫描实现。先搞懂什么是 SUID / SGID 位Linux 文件权限除了 rwx还有两个特殊位权限位符号八进制作用风险SUIDs4000执行该程序时临时获得文件属主的权限属主是 root 时可被利用获得 root shellSGIDs2000执行该程序时临时获得文件属组的权限可获得高权限组的身份用ls -l观察时它们会显示为-rwsr-xr-x 1 root root ... /usr/bin/find # SUID 位属主 root -rwxr-sr-x 1 root root ... /usr/bin/uuencode # SGID 位 为什么危险普通用户执行 SUID root 的find时进程会以 root 身份运行。而find恰好支持-exec参数——于是一个普通用户就能执行任意 root 命令。这就是 SUID 权限位检测与利用的经典场景。GTFONow 的两级 SUID/SGID 检测流程GTFONow 对 SUID/SGID 的检测分为「快速扫描」和「全盘扫描」两级流程图如下┌─────────────────────────────────────────────────────────────┐ │ 第 1 级默认PATH 快速扫描 check_suid_bins() │ │ 遍历内置 GTFOBins 候选表suid_bins→ 在 PATH 中定位 │ │ → check_suid_sgid() 按位检测 S_ISUID / S_ISGID │ │ → 命中则匹配 GTFOBins 利用载荷 │ ├─────────────────────────────────────────────────────────────┤ │ 第 2 级--level 2全盘扫描 check_suid_full_disk() │ │ find / -perm -4000 → 全盘找出所有 SUID 文件 │ │ find / -perm -2000 → 全盘找出所有 SGID 文件 │ │ → 跳过 PATH 内已检测项 → 逐个查 GTFOBins 库匹配载荷 │ └─────────────────────────────────────────────────────────────┘ ↓ 结果排序root 属主 / Shell 类载荷优先 → 交互式选择或自动利用核心检测函数check_suid_sgid()所有检测最终都汇聚到一个 30 行的函数check_suid_sgid()。它的原理非常朴素——用os.stat()拿到文件权限位再做两次**按位与bitwise AND**判断is_suid bool(mode stat.S_ISUID) # 检测 SUID 位4000 is_sgid bool(mode stat.S_ISGID) # 检测 SGID 位2000如果命中函数还会顺带查出文件的属主名和属组名通过pwd.getpwuid()/grp.getgrgid()并返回形如{SUID: True, SGID: False, Owner: root, Group: root}的结构。这个属主信息很关键SUID 位只有当属主是root时才最有价值后续的结果展示和排序都会用到它。快速扫描在 PATH 中「按名单排查」check_suid_bins() 的思路是「名单制」程序内置了一张由 GTFOBins 持续更新的候选表suid_bins约 100 多个已知可利用的二进制见 gtfonow/gtfonow.py#L2095。函数逐一遍历这张表用get_binary_path()相当于 Python 版which在PATH环境变量里定位二进制调check_suid_sgid()判断 SUID/SGID 位是否被设置命中则把该二进制的全部 GTFOBins 载荷展开记入提权候选列表。之所以只查 PATH是因为普通用户只能直接执行 PATH 中的程序——PATH 之外的 SUID 文件虽然也可能有用但默认扫描不必全盘遍历保证速度。全盘扫描find 两条命令找出「漏网之鱼」加上--level 2后check_suid_full_disk() 接手更彻底的搜索核心就是两条经典 find 命令find / -perm -4000 -type f 2/dev/null # 全系统找 SUID 文件 find / -perm -2000 -type f 2/dev/null # 全系统找 SGID 文件实现细节见 gtfonow/gtfonow.py#L4010-L4015。随后它做三件事去重跳过已经在 PATH 中检测过的二进制is_binary_in_path()判断匹配把文件名对照suid_bins载荷表命中则附上利用载荷未命中的会打印提示「发现 SUID/SGID 文件但暂无已知 GTFOBins 利用」提醒人工关注记录同样通过check_suid_sgid()补全属主/属组信息。 全盘扫描的价值很多系统会把特殊工具放在/opt、/usr/local等非 PATH 目录只有全盘扫描才能抓到这些「漏网之鱼」。运行效果与结果排序获取源码并运行git clone https://gitcode.com/gh_mirrors/gt/GTFONow cd GTFONow python gtfonow/gtfonow.py --level 2 -v # level 2 全盘扫描程序结束时会打印编号列表例如[1] find Shell、[2] dd Arbitrary write。排序逻辑在 order_priv_escs()属主为 root 的 SUID 二进制排在最前user_priority 0载荷类型按 Shell 任意读 任意写 权限变更 排序。也就是说列表第一项基本就是「最容易拿到 root」的路径。常用参数参数说明--level 1/21 为快速扫描默认2 增加全盘 SUID 与 Capability 扫描--risk 1/21 为安全操作默认2 允许修改文件等激进操作CTF 场景常用--auto跳过交互自动执行利用-v输出 DEBUG 级日志方便学习检测过程动手验证看看测试是怎么写的如果想直观理解检测函数最好的入口是 gtfonow/tests/test_privesc.py 中的test_check_suid_bins()第 14 行它断言扫描结果里包含{Binary: find, Path: /usr/bin/find, Type: SUID/SGID Binary, SUID: root, ...}这样的记录——正是check_suid_bins()的真实输出形态。小结位检测原理os.stat()取权限位mode stat.S_ISUID / S_ISGID两次按位与一行代码判定 SUID/SGID 位。两级扫描默认按 GTFOBins 名单快速扫 PATH--level 2用find / -perm -4000/-2000全盘扫描补齐 PATH 之外的目标。结果优先root 属主 Shell 类载荷排最前新手直接选第一项即可。项目亮点单文件、纯标准库、兼容 Python 2/3 与任意 Unix 架构可无文件化直接管道执行。⚠️ 安全提醒GTFONow 设计用于 CTF 与获得授权的渗透测试pentest环境请勿对未授权系统运行--risk 2会修改目标文件务必确认你理解它的行为。【免费下载链接】GTFONowAutomatic privilege escalation for misconfigured capabilities, sudo and suid binaries using GTFOBins.项目地址: https://gitcode.com/gh_mirrors/gt/GTFONow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
