**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶信息收集 ➢ Linux权限提升 ➢ Linux系统枚举-Ⅳ 🔥🔥🔥
▶ 漏洞检测
▶ 初始立足点▶ 权限提升
▶ 横向移动▶ 报告/分析
▶ 教训/修复
目录
[1.2 Linux系统枚举](#1.2 Linux系统枚举)
[1.2.2 手动枚举Linux系统](#1.2.2 手动枚举Linux系统)
[1.2.2.11 检查设备驱动程序和内核模块](#1.2.2.11 检查设备驱动程序和内核模块)
[1.2.2.12 寻找 SUID/SGID 权限文件](#1.2.2.12 寻找 SUID/SGID 权限文件)
[1.什么是 SUID 与 SGID权限](#1.什么是 SUID 与 SGID权限)
[2.安全风险:SUID 提权](#2.安全风险:SUID 提权)
[1.2.3 自动化枚举](#1.2.3 自动化枚举)
[1.2.3.1 使用 unix-privesc-check 自动化枚举](#1.2.3.1 使用 unix-privesc-check 自动化枚举)
[4.输出示例:发现 /etc/passwd 可写](#4.输出示例:发现 /etc/passwd 可写)
[1.2.3.2 其他自动化脚本](#1.2.3.2 其他自动化脚本)
[3.自动化 + 手动 = 最佳实践](#3.自动化 + 手动 = 最佳实践)
[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)
1.Linux权限提升
本系列内容围绕以下四大部分展开,本文是第一部分:++Linux系统枚举++。
| 攻击向量 | 核心概念 | 典型检查/利用方法 | 关键风险点 |
|---|---|---|---|
| 1. 系统枚举 | 全面侦查,像侦探一样收集一切可能指向弱点的线索。 | - 检查系统配置、用户与组、历史命令。 - 枚举运行服务、网络连接、进程。 - 列出安装软件、内核版本、计划任务。 | 信息收集不全面,导致错过关键漏洞入口。 |
| 2. 暴露的机密信息 | 系统或应用中意外留存的可直接利用的敏感数据。 | - 查找 配置文件中的硬编码密码。 - 搜索 日志文件中的敏感数据或错误信息。 - 检查环境变量中的密钥、令牌或密码。 | 访问凭证直接泄露,提供最直接的攻击突破口。 |
| 3. 不安全的文件权限 | 文件或目录的权限设置不当,允许低权限用户进行越权操作。 | - 全局可写文件/目录 :任何用户可修改,用于注入恶意代码或替换文件。 - 不当所有权 :低权限用户拥有关键系统文件,可直接修改。 - SUID/SGID滥用:高权限程序存在漏洞或配置错误,可被利用来获取其权限。 | 通过文件系统层面的配置错误,绕过权限限制。 |
| 4. 利用系统组件 | 利用操作系统内核、系统服务或第三方应用程序中存在的漏洞。 | - 脆弱服务 :攻击以高权限(如root)运行的未更新或配置不当的服务。 - 内核漏洞 :利用操作系统内核本身的漏洞直接提权。 - 软件漏洞:利用第三方应用(如编辑器、数据库)的漏洞执行高权限代码。 | 利用代码层面的漏洞,实现权限的实质性提升。 |
1.2 Linux系统枚举
1.2.2 手动枚举Linux系统
接前文。
1.2.2.11 检查设备驱动程序和内核模块
在权限提升过程中,利用内核模块或设备驱动程序的已知漏洞 是高级攻击者的常用手法。
可以手动枚举已加载的内核模块 ,并提取模块详细信息,为后续漏洞匹配奠定基础。
1.内核模块概述
①什么是内核模块?
🔧 **Linux的内核模块(Kernel Module,*.ko文件):**可在Linux内核中动态加载/卸载的代码片段。它们通常用于扩展内核的功能,而不需要重启或重新编译内核。通过内核模块,用户和开发者可以在运行时增加、修改或删除内核的功能。
另,在Windows 中的"对等物"是***.sys文件**。
②内核模块的核心作用?
| 作用分类 | 具体说明 | 示例模块 |
|---|---|---|
| 🖥️ 硬件支持 | 为显卡、网卡、存储设备等提供驱动程序 | nvidia、e1000 |
| 📁 文件系统 | 支持不同文件系统类型(如 NTFS、FAT、EXT) | ntfs3、ext4 |
| 🌐 网络协议 | 实现额外的网络协议或功能 | ip_vs、bridge |
| 🛡️ 其他扩展 | 安全性、监控、性能优化等 | audit、kvm |
③内核模块的三大特点?
| 序号 | 特点 | 说明 |
|---|---|---|
| 1 | 动态加载与卸载 | 无需重启,按需加载/卸载,灵活应对变化 |
| 2 | 模块化管理 | 内核只保留基础功能,其他功能以模块形式按需添加,节约资源 |
| 3 | 依赖自动处理 | 模块间可存在依赖关系,内核自动加载所需依赖模块 |
④内核模块的文件格式?
内核模块以**.ko** (Kernel Object)为扩展名,是经过编译的二进制文件,存放于 **/lib/modules/$(uname -r)/**目录下。形如:
bash
$ file /lib/modules/5.10.0/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
e1000.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), BuildID[sha1]=..., not stripped
**⑤形象比喻:**内核 = 公司管理层,内核模块 = 外部部门
-
内核:始终运行,负责公司最基础的运作。
-
内核模块 :仅在需要时加载(聘用) ,任务结束后卸载(解聘),不干扰核心运转。
-
动态性:无需关停公司即可调整部门配置。
内核模块加载与卸载就像公司在不同时间根据需求选择外部部门。
比如:
当公司需要开拓新市场时,市场部门(内核模块)就会被引入。
当市场推广活动结束后部门可以临时退出,公司的管理层可以继续运作。
加载模块:类似于公司在需要时邀请新的外部部门进来帮助工作。
卸载模块:当任务完成后,外部部门可以被临时解雇,资源得到释放。
2.为什么要检查内核模块
-
内核模块运行在最高特权级(Ring 0) ,一旦存在漏洞,可导致本地权限提升 或容器逃逸。
-
攻击者需要获取目标上加载的模块列表 及版本信息,才能定位对应的利用程序。
-
即使模块本身无漏洞,其依赖关系 或错误配置也可能成为突破口。
3.枚举实践
①列出当前已加载的内存模块
bash
$ lsmod

| 列名 | 说明 |
|---|---|
| Module | 内核模块名称(如 libata、ext4) |
| Size | 模块占用的内存大小(字节) |
| Used by | 依赖该模块的其他模块或进程计数;若 >0,表示正被使用 |
📌 用途 :快速识别当前活跃的模块,尤其关注第三方/非标准模块。
②查询指定模块的详细信息
bash
$ /sbin/modinfo libata

| 字段 | 说明 |
|---|---|
| filename | 模块文件路径 |
| version | 模块版本号(漏洞匹配的关键) |
| license | 许可证类型(GPL 等) |
| author | 模块作者 |
| depends | 依赖的其他模块(可追溯攻击面) |
| parm | 模块可接受的参数(可能暴露配置缺陷) |
⚠️ 注意 :
modinfo需要完整路径(如/sbin/modinfo)或在 PATH 中;部分发行版需要-b指定备用内核目录。
🛡️ 防御视角:
定期审计已加载模块,移除非必需 或不再维护的第三方驱动。
使用
modprobe黑名单机制禁用高危模块。及时更新内核及模块至最新稳定版本,修复已知漏洞。
1.2.2.12 寻找 SUID/SGID 权限文件
在 Linux 权限体系中,SUID 与 SGID 是两类特殊的可执行文件权限 ,允许普通用户以文件所有者/组的身份 运行程序。若配置不当,它们将成为攻击者从普通用户通往 root 的直通车。
1.什么是 SUID 与 SGID权限
| 权限标志 | 全称 | 作用 | 表示位置 |
|---|---|---|---|
| SUID | Set User ID | 执行时以文件所有者的 UID 运行,而非执行者的 UID | 所有者执行位 (-rwsr-xr-x) |
| SGID | Set Group ID | 执行时以文件所属组的 GID 运行;对目录则继承所属组 | 组执行位 (-rwxr-sr-x) |
🔣 权限位显示规则
-
小写
s:SUID/SGID 生效,且文件可执行 (如-rwsr-xr-x) -
大写
S:SUID/SGID 生效,但文件不可执行 (如-rwSr--r--)------ 通常无意义
原理:eUID 与权限继承
-
通常进程的有效用户 ID (eUID) = 执行者的 UID
-
若文件设置 SUID ,则 eUID = 文件所有者 UID
-
若所有者是 root → 普通用户执行该文件时,进程以 root 权限运行
✅ 正常流程 :用户 A 运行程序 → 进程以 用户A 的权限执行
⚠️ SUID 流程 :用户 A 运行 root:root 且带 SUID 的程序 → 进程以 root 权限执行
2.安全风险:SUID 提权
如果一个 root 拥有的 SUID 二进制文件 存在漏洞或++可被篡改++ ,攻击者就能通过该程序以 root 身份执行任意命令 ,从而完全控制整个系统。
因此,在枚举阶段,要重点枚举此类权限。
典型利用场景:
-
漏洞利用(如缓冲区溢出)
-
调用其他程序(如
system()) -
文件读写操作(如 SUID 的
cp、vim等)
3.枚举实践
查找 SUID/SGID 文件。
bash
# 查找所有设置了 SUID 位的普通文件(忽略错误)
$ find / -perm -u=s -type f 2>/dev/null
# 查找所有设置了 SGID 位的普通文件
$ find / -perm -g=s -type f 2>/dev/null
# 同时查找 SUID 或 SGID
$ find / -perm /6000 -type f 2>/dev/null

命令拆解:
-
/→ 从根目录开始递归 -
-perm -u=s→ 精确匹配SUID 位设置 -
-type f→ 只查找普通文件(排除目录) -
2>/dev/null→ 丢弃"权限不足"错误,保持输出清晰
4.示例输出与利用思路
bash
$ find / -perm -u=s -type f 2>/dev/null
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/gpasswd
/bin/su
/bin/mount
/bin/umount
/bin/cp <--- ⚠️ 如果 cp 被设置 SUID......
如果 /bin/cp 是 SUID root :普通用户可利用它覆盖系统敏感文件,例如:
bash
$ cp /etc/passwd /tmp/passwd
# 编辑 /tmp/passwd 移除 root 密码
$ cp /tmp/passwd /etc/passwd # 以 root 权限覆盖
→ 从而无密码切换至 root。
防御要点:
-
SUID/SGID 是 Linux 强大的权限机制,但也常成为提权突破口。
-
枚举 SUID 文件是权限提升阶段的标准动作。
-
重点关注 root 所有者 + 可执行 + 非必要 的 SUID 二进制文件。
-
防御建议:移除不必要的 SUID 权限 ,使用
mount -o nosuid挂载非系统分区。
🛡️ 一句话防御 :
每个 SUID root 文件都是系统权柄的延伸,必须像对待 root 密码一样谨慎保护。
至此,关于Linux系统的手动枚举告个段落。接下来,使用自动化工具进行自动枚举。
1.2.3 自动化枚举
1.2.3.1 使用 unix-privesc-check 自动化枚举
手动枚举 Linux 系统存在大量信息,耗时且易遗漏 。unix-privesc-check 是一个预装在 Kali 中的 Bash 脚本 ,专门用于自动化检查类 Unix 系统 的本地权限提升漏洞,快速发现因配置错误导致的可利用点。
1.脚本基本信息
| 属性 | 说明 |
|---|---|
| 名称 | unix-privesc-check |
| 路径 | /usr/bin/unix-privesc-check(Kali 预装) |
| 类型 | Bash 脚本 |
| 目标 | Linux / Unix 系统 |
| 功能 | 检查系统配置错误(如文件权限、SUID、服务配置等),定位可提权的脆弱点 |
2.运行模式
| 模式 | 命令示例 | 特点 |
|---|---|---|
| 标准模式 | unix-privesc-check standard |
✅ 速度优化,误报较少 |
| 详细模式 | unix-privesc-check detailed |
🔍 输出更详细的检查信息 |

💡 建议 :初次扫描使用 标准模式,快速获得高可信结果。
3.典型用法:传输脚本至目标并执行
由于目标通常无此脚本,需从 Kali 传输 到目标主机(如 Joe 的机器),然后运行并保存输出。
bash
# 目标主机上执行(标准模式,输出重定向)
$ ./unix-privesc-check standard > output.txt

✅ 优点:
-
全自动扫描
-
输出可离线分析
-
避免手工逐项检查的遗漏
4.输出示例:发现 /etc/passwd 可写
该脚本对常见文件的权限进行多次检查。例如,下面的摘录显示非root用户可写的配置文件:

🧨 风险解读
-
/etc/passwd若任何用户可写,攻击者可直接:-
移除 root 密码
-
添加新用户(UID 0)
-
无密码切换至 root
-
-
这是典型的权限配置错误,可被轻松利用。
1.2.3.2 其他自动化脚本
除了 unix-privesc-check,社区还提供了多款专门用于 Linux 权限提升枚举 的自动化脚本,其中 LinEnum 与 LinPEAS 是目前最活跃、更新最频繁的工具。
1.常用自动化工具速览
| 工具名称 | 类型 | 特点 |
|---|---|---|
| LinEnum | Bash 脚本 | 经典提权枚举脚本,输出清晰,检查项目全面 |
| LinPEAS | Bash 脚本 | PEAS 家族成员,颜色高亮,检测项更细,积极维护 |
| unix-privesc-check | Bash 脚本 | 预装在 Kali,标准/详细双模式,误报较少 |
✅ 三者均无需安装 ,直接传输到目标即可运行,是渗透测试人员标准弹药。
2.自动化工具的局限性
🧠 关键认知 :没有万能脚本 。每个系统都有独特的配置、定制化路径、手工部署软件 ,自动化工具必然会遗漏部分漏洞点。
| 局限性 | 说明 |
|---|---|
| 规则固化 | 脚本基于预设检查规则,无法覆盖非常规配置 |
| 误报与漏报 | 标准模式减少误报,但可能跳过真实漏洞;详细模式则增加噪音 |
| 无法理解业务上下文 | 无法判断某个文件是否本应可写,无法识别后门或隐藏依赖 |
| 对抗性检测 | 若目标被植入反枚举机制,自动化脚本可能被欺骗或绕过 |
3.自动化 + 手动 = 最佳实践
-
自动化 :快速覆盖通用脆弱点(SUID、可写文件、内核版本等)
-
手动 :深挖自动化遗漏的特殊目录、自定义服务、遗留备份
💬 强调 :
"检查只能通过手动检查才能捕捉到的独特配置非常重要。"
接下来,将根据枚举获得的信息来采取行动,以提升我们的特权。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。
