**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶信息收集 ➢ Linux权限提升 ➢ Linux系统枚举-Ⅲ 🔥🔥🔥
▶ 漏洞检测
▶ 初始立足点▶ 权限提升
▶ 横向移动▶ 报告/分析
▶ 教训/修复
目录
[1.2 Linux系统枚举](#1.2 Linux系统枚举)
[1.2.2 手动枚举Linux系统](#1.2.2 手动枚举Linux系统)
[1.2.2.7 枚举定时任务](#1.2.2.7 枚举定时任务)
[3.风险点分析:弱权限 + 高权限执行](#3.风险点分析:弱权限 + 高权限执行)
[1.2.2.8 枚举已安装应用程序](#1.2.2.8 枚举已安装应用程序)
[1.主流 Linux 包管理器及查询命令](#1.主流 Linux 包管理器及查询命令)
[1.2.2.9 检查文件和目录权限](#1.2.2.9 检查文件和目录权限)
[1.2.2.10 检查挂载/未挂载的驱动器(文件系统)](#1.2.2.10 检查挂载/未挂载的驱动器(文件系统))
[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)
1.Linux权限提升
本系列内容围绕以下四大部分展开,本文是第一部分:++Linux系统枚举++。
| 攻击向量 | 核心概念 | 典型检查/利用方法 | 关键风险点 |
|---|---|---|---|
| 1. 系统枚举 | 全面侦查,像侦探一样收集一切可能指向弱点的线索。 | - 检查系统配置、用户与组、历史命令。 - 枚举运行服务、网络连接、进程。 - 列出安装软件、内核版本、计划任务。 | 信息收集不全面,导致错过关键漏洞入口。 |
| 2. 暴露的机密信息 | 系统或应用中意外留存的可直接利用的敏感数据。 | - 查找 配置文件中的硬编码密码。 - 搜索 日志文件中的敏感数据或错误信息。 - 检查环境变量中的密钥、令牌或密码。 | 访问凭证直接泄露,提供最直接的攻击突破口。 |
| 3. 不安全的文件权限 | 文件或目录的权限设置不当,允许低权限用户进行越权操作。 | - 全局可写文件/目录 :任何用户可修改,用于注入恶意代码或替换文件。 - 不当所有权 :低权限用户拥有关键系统文件,可直接修改。 - SUID/SGID滥用:高权限程序存在漏洞或配置错误,可被利用来获取其权限。 | 通过文件系统层面的配置错误,绕过权限限制。 |
| 4. 利用系统组件 | 利用操作系统内核、系统服务或第三方应用程序中存在的漏洞。 | - 脆弱服务 :攻击以高权限(如root)运行的未更新或配置不当的服务。 - 内核漏洞 :利用操作系统内核本身的漏洞直接提权。 - 软件漏洞:利用第三方应用(如编辑器、数据库)的漏洞执行高权限代码。 | 利用代码层面的漏洞,实现权限的实质性提升。 |
1.2 Linux系统枚举
1.2.2 手动枚举Linux系统
接前文。
1.2.2.7 枚举定时任务
在权限提升攻击中,攻击者经常将目光投向系统定时任务 。Linux 系统通过 cron 调度任务,若配置不当或文件权限脆弱,这些文件就可能被低权限用户篡改,从而在高权限下执行恶意代码。
1.Cron任务存放位置
定时任务脚本通常按执行频率归类存放在 /etc/cron.* 目录下:
| 目录 | 执行频率 | 说明 |
|---|---|---|
/etc/cron.hourly |
每小时 | 每小时执行一次的任务 |
/etc/cron.daily |
每天 | 每天执行一次的任务 |
/etc/cron.weekly |
每周 | 每周执行一次的任务 |
/etc/cron.monthly |
每月 | 每月执行一次的任务 |
/etc/crontab |
系统级 | 管理员自定义任务,常以 root 运行 |
📌 重点关注 :系统管理员经常在 /etc/crontab 文件中添加自定义 的定期任务。应该仔细检查这些自定义任务的不安全文件权限,因为大多数任务以root身份运行。
2.查看定时任务
①查看当前用户的 cron 任务(普通权限)
bash
$ crontab -l
仅输出注释行或空,表示当前用户未配置个人定时任务。
②查看所有用户的 cron 任务(需 root 权限)
bash
$ sudo crontab -l

此时可能发现高权限(root权限)下运行的备份脚本等敏感任务。这是一个以root权限执行的每分钟的定期任务。
3.风险点分析:弱权限 + 高权限执行
若上述脚本文件(如 user_backups.sh)权限配置不当 (例如:普通用户可写 ),攻击者即可修改脚本内容 ,待下次 cron 自动执行时,恶意代码将以 root 身份 运行,从而实现权限提升。
🧠 检查清单
-
查看
/etc/cron.*目录下所有可执行脚本 -
检查
/etc/crontab中的自定义任务 -
使用
crontab -l和sudo crontab -l对比查看 -
重点审计以 root 运行的脚本文件的权限(是否普通权限可写)
-
确认脚本文件非全局可写 ,且属主为 root(即可利用)
1.2.2.8 枚举已安装应用程序
在权限提升过程中,攻击者常通过已安装应用程序及其版本来定位已知漏洞并寻找利用代码。手动枚举虽然基础,却是验证信息准确性的必要环节。
为什么要枚举已安装应用?
-
发现运行中的服务及其版本(如 Apache、MySQL、Samba 等)
-
将版本号与 CVE 漏洞库匹配,寻找可利用的提权路径
-
确认前期信息收集(如端口监听)的准确性
1.主流 Linux 包管理器及查询命令
Linux的系统使用各种软件包管理器。每种软件包管理器的基本查询命令不同,如下:
| 发行版家族 | 包管理器 | 列出所有已安装软件包的命令 | 示例输出(片段) |
|---|---|---|---|
| Debian/Ubuntu | dpkg |
dpkg -l |
ii apache2 2.4.38 |
| Red Hat/CentOS | rpm |
rpm -qa |
httpd-2.4.6-97.el7 |
💡 记住:系统管理员可能未移除默认安装的软件,这些软件往往是漏洞的温床。
2.枚举所有已安装的应用程序
在基于 Debian 10 的目标机器上执行:
bash
$ dpkg -l

这一结果证实了前期端口扫描的推断 ------该Debian 10服务器确实运行着 Apache2 Web 服务,且版本明确。
1.2.2.9 检查文件和目录权限
常用权限查找参数: 使用find 命令的权限查找
| 参数 | 含义 | 示例用法 |
|---|---|---|
-writable |
当前用户可写的文件/目录 | find / -writable |
-readable |
当前用户可读的文件/目录 | find / -readable |
-type d |
限定查找目录(directory) | find / -type d |
-type f |
限定查找普通文件(file) | find / -type f |
2>/dev/null |
丢弃权限拒绝的错误输出,保持干净 | find / -writable 2>/dev/null |
在权限提升过程中,不安全的文件/目录权限是高频突破口。攻击者往往寻找两类目标:
-
可写的脚本/二进制文件 :若这些文件在高权限上下文(如 root)中执行,可被篡改实现提权。
-
可读的敏感文件 :可能泄露硬编码凭据(数据库、服务账号等)。
⚠️ 手动遍历整个文件系统不现实,必须自动化优先。
1.枚举所有可写目录
bash
$ find /-writable -type d 2>/dev/null

命令拆解:
-
/→ 从根目录开始递归 -
-writable→ 匹配当前用户拥有写权限的条目 -
-type d→ 只保留目录类型 -
2>/dev/null→ 将错误输出**"2"** (如无权访问的目录)重定向到黑洞
2.输出与发现
发现点:/home/joe/.scripts
-
这是一个用户主目录下的脚本存放目录。
-
在 1.2.2.7 枚举定时任务 中,该目录恰好是 以 root 运行的 cron 脚本 所在位置。
-
说明该目录可写 ,则普通用户可修改脚本内容 ,待 cron 下次执行时以 root 权限运行恶意代码 → 权限提升。
🔒 防御建议:
严格控制高权限执行脚本的存放目录权限,避免普通用户可写。
定期使用
find审计全局可写目录,尤其关注与计划任务关联的路径。对于必须保留的可写目录,考虑挂载选项
nosuid、noexec增强安全性。
1.2.2.10 检查挂载/未挂载的驱动器(文件系统)
在大多数系统上,驱动器会在启动时自动挂载 。因此,很容易忘记未挂载的驱动器可能包含有价值的信息。未挂载的磁盘分区、外部存储设备或配置失误的挂载点,往往隐藏着备份数据、配置文件、凭据等敏感信息,可能成为攻击者扩大战果的关键跳板。应该始终寻找未挂载的驱动器,并检查挂载权限。
1.关于挂载等的概念
①驱动器 vs 文件系统
| 维度 | 驱动器(Disk Drive) | 文件系统(File system) |
|---|---|---|
| 本质 | 物理存储设备(硬件) | 数据组织方式(软件逻辑) |
| 常见类型 | HDD、SSD、USB 闪存、光盘、网络存储 | ext4、XFS、Btrfs、F2FS |
| 作用 | 提供原始存储空间 | 在分区上建立结构,实现文件的存储、检索、管理 |
| 关系 | 可被划分为多个分区 | 依附于某个分区,每个分区需格式化为一种文件系统,它决定数据如何写入和读取 |
| 形象比喻 | 🏢 一栋空大楼 | 🗂️ 大楼内的档案柜与索引系统 |
Linux 常见文件系统一览(仅部分)
| 文件系统 | 全称/说明 | 特点 | 适用场景 |
|---|---|---|---|
| ext4 | Fourth Extended Filesystem | Linux 默认,稳定、兼容性好 | 通用桌面/服务器 |
| XFS | XFS | 高性能、支持大文件、动态 inode 分配 | 大型服务器、数据库 |
| Btrfs | B-tree Filesystem | 支持快照、压缩、自修复,功能丰富 | 高级存储场景 |
| F2FS | Flash-Friendly File System | 针对 NAND 闪存优化,减少写入放大 | SSD、SD卡、U盘 |
②驱动器和文件系统的工作流程

📋 分区与格式化------让空白空间"可用"
| 步骤 | 操作 | 说明 |
|---|---|---|
| 分区 | 将驱动器划分为多个逻辑区域 | 每个分区可独立使用,例如:/dev/sda1、/dev/sda2 |
| 格式化 | 在分区上创建文件系统 | 写入门数据结构(如 inode、目录表),使分区能够存储文件 |
| 文件系统选择 | 根据用途选择 ext4、XFS、Btrfs、F2FS 等 | 不同文件系统有不同性能、可靠性、特性 |
💡 关键 :分区是物理切分,文件系统是逻辑格式化,两者结合才能存储文件。
🔌 挂载(Mounting)------接入系统树
| 问题 | 答案 |
|---|---|
| 什么是挂载? | 将设备/分区上的文件系统连接到操作系统目录树的过程 |
| 挂载点是什么? | 一个空目录,挂载后该目录即为该文件系统的入口 |
| 挂载后的效果? | 用户通过挂载点目录访问设备中的文件,如同访问本地文件夹一样 |
| 常用命令 | mount - 查看当前挂载;mount /dev/sdb1 /mnt - 手动挂载 |
| 自动挂载配置 | /etc/fstab 文件定义开机自动挂载规则 |
③完整流程速览(5步)
| 步骤 | 动作 | 关键操作 | 结果 |
|---|---|---|---|
| ① | 连接 | 通过 SATA、USB、NVMe 等接口接入设备 | 系统识别块设备(如 /dev/sda) |
| ② | 分区 | 使用 fdisk、parted 等工具划分区域 |
生成分区(如 /dev/sda1) |
| ③ | 格式化 | mkfs.ext4 /dev/sda1 等命令 |
创建文件系统 |
| ④ | 挂载 | mount /dev/sda1 /mnt/data |
接入目录树,可访问 |
| ⑤ | 存取文件 | 用户/程序读写数据 | 正常文件操作 |
2.挂载的示例
通用服务器 ------ 分离 /home 与 /var
目的:将用户数据和日志数据分离到独立分区,避免根目录占满。
bash
# 查看挂载情况(使用 mount 或 df -hT)
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 20G 15G 4.2G 79% /
/dev/sdb1 xfs 100G 30G 70G 30% /home
/dev/sdc1 ext4 50G 45G 2.8G 95% /var
| 设备 | 文件系统 | 挂载点 | 用途说明 |
|---|---|---|---|
/dev/sda1 |
ext4 |
/ |
根文件系统,存放系统程序 |
/dev/sdb1 |
xfs |
/home |
用户家目录,适合大文件存储 |
/dev/sdc1 |
ext4 |
/var |
日志、缓存,容量需监控 |
!核心理解:
-
逻辑关系 (目录树视角)
/是整个文件系统的根目录 。
/home和/var是根目录下的两个普通子目录 。因此,
/home和/var是/的子节点 ,三者构成父子关系。 -
物理关系 (存储设备视角)
/dev/sda1上的文件系统挂载到/,提供根目录的初始内容。
/dev/sdb1上的文件系统挂载到/home------ 这个操作将/home目录"覆盖"为一个独立的挂载点 。从此,访问/home实际上是在读写/dev/sdb1上的数据,而不是/dev/sda1上的/home目录。同理,
/dev/sdc1挂载到/var,使/var独立。 -
目录树挂载示意图
bash
文件系统层次结构(逻辑视图) 实际存储设备(物理视图)
/
├── bin/ → 来自 /dev/sda1
├── etc/ → 来自 /dev/sda1
├── home/ ──────────────→ 来自 /dev/sdb1 (独立分区)
├── var/ ──────────────→ 来自 /dev/sdc1 (独立分区)
└── usr/ → 来自 /dev/sda1
✅ 结论 :
/home和/var在路径上从属于/,但存储上可完全独立 。这种设计允许不同用途的数据分离到不同磁盘或分区,实现:容量隔离、性能优化、故障隔离。
3.为什么必须理解这些概念
-
未挂载的分区 = 可能被遗忘的"数据金矿",常含配置文件、备份凭据。
-
挂载权限错误 = 普通用户可读写本该受限(无权访问)的文件系统。
-
识别文件系统类型 = 推测系统用途,选择针对性的漏洞利用方式。
4.枚举实践
核心命令速查表:
| 命令 | 作用 | 典型输出示例 |
|---|---|---|
cat /etc/fstab |
查看开机自动挂载的配置(静态挂载表) | UUID=xxx / ext4 defaults 0 1 |
mount |
列出当前已挂载的所有文件系统(动态状态) | /dev/sda1 on / type ext4 (rw) |
lsblk |
以树状图显示所有可用块设备(包括未挂载分区) | sda 8:0 0 20G 0 disk ├─sda1 ... └─sda2 ... |
💡 组合技 :先用
lsblk发现未挂载分区,再用mount确认未挂载,最后手动挂载深入检查。

🔹 /etc/fstab ------ 预期挂载清单: 仅列出系统启动时会自动挂载 的设备,不代表当前所有可用磁盘。
bash
# <file system> <mount point> <type> <options> <dump> <pass>
UUID=xxxx-xxxx / ext4 defaults 0 1
UUID=yyyy-yyyy none swap sw 0 0
🔹 mount ------ 当前已挂载状态: 反映此时此刻 的挂载情况,与 /etc/fstab 可能不一致。
bash
/dev/sda1 on / type ext4 (rw,relatime)
/dev/sda2 on /boot type ext2 (rw)
🔹 lsblk ------ 完整块设备拓扑

bash
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 31G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 975M 0 part [SWAP] <--- ❗ 未挂载
sr0 11:0 1 1024M 0 rom
⚠️ 重点关注 :没有
MOUNTPOINT的分区(如sda5)------ 它们已被系统识别,但未挂载使用,很可能存放着备份、日志、旧数据等。
🔐 为什么这很重要?
-
管理员可能只记得配置自动挂载,却忘记了手工挂载的数据盘。
-
未挂载分区往往权限检查更宽松 ,甚至包含旧版本软件的明文凭据。
-
即使分区已加密,挂载点权限配置不当也可能导致普通用户可访问敏感数据。
🎯 攻击者视角 :一个未挂载的
/backup分区,可能就是通往 root 权限的捷径。🛡️ 防御者视角 :定期运行
lsblk审计所有磁盘分区,确保未使用分区已安全卸载或加密锁定。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。
