前言

在渗透测试与内网攻防中,提权(Privilege Escalation)是至关重要的一环。尤其在 Linux 环境中,权限的严格划分虽然提升了系统安全性,但一旦攻击者获得了初始访问权限,他们往往会试图通过各种方式实现权限提升,从而控制整个系统、维持持久化访问,甚至横向移动至更多目标。因此,熟悉并掌握 Linux 提权技术,不仅有助于安全研究人员发现并修复潜在风险,也有助于红队在攻防演练中高效突破系统防线。

本篇文章将从实际出发,系统地介绍 Linux 中常见的提权方式,涵盖信息收集、文件权限分析、内核漏洞利用、配置错误利用、SUID 和 sudo 权限滥用、定时任务劫持、Docker 环境逃逸等关键手段。文章不仅强调技术原理,还辅以典型示例和操作命令,帮助读者建立完整的提权知识体系,提升在真实环境中的渗透测试能力与安全防护意识。

Linux提权原理

Linux 提权主要分为内核提权和其他类型提权。内核提权的优点是针对存在漏洞的内核版本通常可通用利用,但缺点是稳定性差,易导致 shell 丢失或系统崩溃。常见的提权思路包括:先上传信息收集脚本,枚举系统内核和配置;再结合系统开启的服务,进行有针对性的提权操作。

权限划分

用户和组

用户组在 linux 系统上起着重要作用,它们为选定的用户提供了一种彼此共享文件的简便方法。它们还使系统管理员可以更有效地管理用户权限,因为他们可以将权限分配给组而不是单个用户。

Linux 用户分为管理员和普通用户,普通用户又分为系统用户和自定义用户。

1系统管理员:即 root 帐户,UID 号为 0,拥有所有系统权限,它类似于 Windows 系统中的 administrator 帐户,是整个系统的所有者。

2系统用户:Linux 为满足自身系统管理所内建的账号,通常在安装过程中自动创建,不能用于登录操作系统。UID 在 1-499 之间(Centos 7 为 1-999 之间)。像上面的 sshd、 pulse 等等用户即是此类用户。它类似于 Windows 中的 system 帐户,当然权限远没有 system 帐户高。

3自定义用户:由 root 管理员创建供用户登录系统进行操作使用的账号,UID 在 500 以上(CentOS7 为 1000 以上)。它类似于 Windows 系统中 users 用户组中的帐户。

在 Linux 中的每个用户必须属于一个组,不能独立于组外在 Linux 中每个文件有所有者、所在组、其它组的概念同样,用户组的信息我们可以在 /etc/group 中查看

/etc/passwd 文件

在 Linux 的 /etc/passwd 文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。

用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
 

image.png



/etc/shadow 文件

/etc/shadow 文件是 Linux 系统中用于 存储用户加密密码及相关账号安全信息 的配置文件,它是 /etc/passwd 的安全扩展。

用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
 

image.png



加密的密码具有固定格式: $id$salt$encrypted

●id 表示加密算法,1 代表 MD5,5 代表 SHA-256,6 代表 SHA-512

●salt 为盐值,系统随机生成

●encrypted 表示密码的 hash 值

文件权限

在 Linux 系统中,一切皆文件,包括普通文件、目录、设备文件、套接字等。文件权限通过 rwx(读、写、执行)三种标志进行控制,对于目录来说,r 表示可以查看该目录下的文件列表(如使用 ls 命令),w 表示可以在该目录下添加、删除、重命名等操作,而 x 则表示是否可以进入该目录成为当前工作目录。如果缺少 x 权限,即使拥有 w 权限,也无法向目录内写入文件。

使用ls -l命令可以查看当前目录文件的权限,ls -la可以查看当前目录全部文件权限(包括隐藏文件)。
 

image.png



以-rw-r--r-- 1 root root 为例,分析每个符号代表的意思。

1第一个位置可以有以下符号- : 代表普通文件 d:代表目录 l:代表软链接 b:代表块文件 c:代表字符设备

2剩下的表示的是文件所属的权限 rw- 表示文件所拥有者的权限。 r-- 表示文件所在组的用户的权限。 r-- 表示其他组的用户的权限。

3后面的数据1代表 如果文件类型为目录,表示目录下的子目录个数。如果文件类型是普通文件,这个数据就表示这个文件的硬链接个数。

4后面两个root的分别含义是第一个为该文件所有者为root 用户,第二个表示该文件所在组为root组。

特殊权限

在 Linux 系统中,除了常规的 rwx 权限外,还存在三种特殊权限:SUID、SGID 和 SBIT,常用于程序或目录的特殊操作控制。

● SUID(Set User ID):应用于可执行文件,当该文件被执行时,临时赋予执行者“文件所有者”的权限,而不是执行者本人的权限,常用于如 passwd 等系统命令。

● SGID(Set Group ID):作用类似于 SUID,不过是切换到“文件所属组”的权限;若用于目录,则新创建的文件会自动继承该目录的所属组。

● SBIT(Sticky Bit):主要用于目录,表示只有文件的所有者或管理员才有权限删除或修改该目录下的文件,常见于 /tmp 目录,用于保护用户的临时文件不被其他用户删除。

信息收集

自动化工具

手动输入命令还是很复杂的,一般还是直接上工具。

github地址
 

image.png



这里只是简单介绍基本的信息,详细的信息搜集会结合具体的提权方式。

手动收集

查看系统信息

用户和群组

查找明文密码

ssh 私钥

Linux提权具体方法

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

内核提权

概述

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

EXP项目地址

1https://github.com/belane/linux-soft-exploit-suggester

2https://github.com/jondonas/linux-exploit-suggester-2

3https://github.com/PenturaLabs/Linux_Exploit_Suggester

4https://github.com/mzet-/linux-exploit-suggester

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

利用过程

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

image.png



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

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

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

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

下载命令

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

/etc/passwd提权

概述

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

利用特征

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

image.png

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

image.png

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

image.png


利用过程

生成伪造 root 账号密码串

使用 openssl 或 python 生成一个加密密码,例如密码为 123456
 

image.png


多种方式生成加密密码。

构造账号条目

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

追加到 /etc/passwd 文件中

使用普通用户直接写入

切换到新账号

Docker提权

概述

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

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

利用特征

使用docker ps -a可以查看container_id
 

image.png


特权容器

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

挂载宿主机目录的容器

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

利用过程

特权容器

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

挂载宿主机目录的容器

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

SUID提权

概述

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

查找root权限的SUID文件

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

image.png



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

高危 SUID 程序

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

/usr/bin/find:利用 -exec 参数执行任意命令,例如 find . -exec /bin/sh ; 即可提权/usr/bin/vim 或 vi:通过命令模式 :!sh 拿到 root shell/usr/bin/python 或 python3:使用 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% 自动化,有效提高了提权的效率与成功率。

Sudo提权

概述

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

利用特征

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

image.png

手工测试结果

image.png

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

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

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


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

image.png

手工查看定时任务的命令vim /etc/crontab
查看test.py文件权限,发现任何用户都可写(具体判断方法可以参考前言提到的文章)。

image.png

提权命令

#!/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")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86420.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86420.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/86420.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【streamlit 动态添加/删除 输入条目items】

如何动态添加添加条目呢?类似下边的效果 pip install streamlit 代码 app.py import streamlit as stdef rule_component(st_ph: st = st):## 添加解析规则, 动态添加元素if

量学云讲堂王岩江宇龙2025年第58期视频 主课正课系统课+收评

量学云讲堂王岩江宇龙2025年第58期视频 主课正课系统课收评资源简介: 课程目录: 江宇龙课程 31枫林阳-股票走势中多空必争的关键要地(1).mp4 32枫林阳-关键要地的直观表现之画线标准.mp4 33枫林阳-提纲举领之量线学习的要点纲要.mp4 34枫林阳-主力攻…

Milvus【部署 03】Linux OpenEuler 环境在线+离线安装及卸载

在线离线安装及卸载 1. 在线安装2. 离线安装3. 卸载 1. 在线安装 [roottcloud milvus]# yum install ./milvus-2.1.4-1.el7.x86_64.rpm安装日志: OS …

< 自用文儿 在 Ubuntu 上安装 Claude Code > 发现了“京东云 JDCloude” 有国内商业云中最低的网络性能

Claude Code: 最近刷屏这个词:Claude Code 以后叫 CC,它是 Anthropic 的一款智能编程工具,几个特点: 在终端运行 像使用命令行工具一样,无需图形用户界面 GUI深度理解整个代码库 使用自然语言 让其修复 b…

Docker部署prometheus+grafana+...

Docker部署prometheusgrafana… prometheus官网 官网 https://prometheus.io/ 中文网址 https://prometheus.ac.cn/ Prometheus简介 Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,由SoundCloud公司开发。 Prometheus基…

Python爬虫实战:研究Spynner相关技术

1 引言 1.1 研究背景与意义 随着互联网的迅速发展,网页内容呈现形式日益复杂。传统的静态网页逐渐被动态网页所取代,大量内容通过 JavaScript 动态生成或 AJAX 异步加载。这使得传统爬虫(如基于 Requests 库的爬虫)难以获取完整的网页信息,因为它们只能获取页面的初始 H…

人工智能训练知识学习-TTS(智能语音合成)

人机对话——TTS(TextToSpeech) 概念: TTS技术,即文本转语音技术,是一种将文字内容转换为语音输出的技术。它通过计算机程序和算法,将文本信息转化为自然流畅的语音信号,让用户能够听到文字内…

【Java高频面试问题】JVM篇

【Java高频面试问题】JVM篇 类加载机制加载(Loading)连接(Linking)‌初始化(Initialization)‌使用(Using)与卸载(Unloading) 类加载器和双亲委派模型类加载器…

DBeaver的sql编辑器文本格式字体大小设置

DBeaver的sql编辑器文本格式字体大小设置。开始就没有找到。早上比较清醒被我发现了。记录下来

自学Java怎么入门

自学Java其实没有想象中那么难,只要找对方法,循序渐进地学习,很快就能上手。下面我结合自己的经验,给你整理一条清晰的学习路径,咱们一步步来。 一、先了解Java能做什么 在开始之前,建议你先看看Java都能…

操作系统面试知识点(1):操作系统基础

目录 1.什么是操作系统: 2.操作系统有哪些功能? 3.常见的操作系统有哪些 4.用户态和内核态 5.内核态权限这么高,为什么不还要用户态? 6.用户态和内核态是如何切换的? 7.系统调用 8,系统调用的过程 ​​​​​​​1.什么是操作系统: (1)操作系统(OS)是管理计算机软硬…

Linux 和 Windows 服务器:哪一个更适合您的业务需求?

在选择服务器操作系统时,Linux 和 Windows 服务器是最常见的两种选择。它们各有特点,适合不同的业务需求和使用环境。本文将详细分析 Linux 和 Windows 服务器的主要差异,包括成本、安全性、性能、定制化能力和用户界面等方面,帮助…

CertiK联创顾荣辉将于港大活动发表演讲,分享Web3安全与发展新视角

CertiK联合创始人、哥伦比亚大学教授顾荣辉,将于6月30日出席香港大学经管学院主办的“Web3革新与商业机遇”活动,并发表主题演讲《规模化Web3:面向全球受众的创新与安全平衡之道》。 本次活动由港大经管学院高层管理教育主办,Met…

SpringAI系列---【SpringAI如何接入阿里云百炼大模型?】

1.导言 阿里云百炼的通义千问模型支持 OpenAI 兼容接口,您只需调整 API Key、BASE_URL 和模型名称,即可将原有 OpenAI 代码迁移至阿里云百炼服务使用。 如果是要接入阿里云百炼模型,首先推荐使用Spring AI Alibaba,而不是使用Spri…

电子电气架构 --- 实时系统评价的概述

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

Flink SQL执行流程深度剖析:从SQL语句到分布式执行

在大数据处理领域,Flink SQL凭借其强大的处理能力和易用性,成为众多开发者的选择。与其他OLAP引擎类似,Flink SQL的SQL执行流程大致都需要经过词法解析、语法解析、生成抽象语法树(AST)、校验以及生成逻辑执行计划等步…

什么是redis

Redis是一个开源的、基于内存的高性能键值存储数据库,广泛用于缓存、消息队列、会话存储等场景。 - 核心特点: - 内存存储:数据存储在内存中,读写速度极快。 - 键值对:以键值对形式存储数据,键通常是字…

《从0到1:C/C++音视频开发自学指南》

开启自学之旅:为何选择 C/C 音视频开发 在当今数字化时代,音视频开发的应用场景极为广泛,深刻融入了我们生活与工作的方方面面。从火爆的直播行业,无论是电商直播中主播与观众的实时互动,还是游戏直播里精彩赛事的实时…

学习日记-spring-day37-6.25

知识点: 1.使用utillist进行配置 知识点 核心内容 重点 Spring框架中utl名称空间创建List 通过utl名称空间创建并管理集合对象,实现数据复用 utl list与普通list赋值的区别; 名称空间引入方法 无参构造器使用规则 当类中没有其他构造器时&#x…

【Python练习】012. 使用字符串的upper()方法将字符串转换为大写

012. 使用字符串的upper方法将字符串转换为大写 012. 使用字符串的upper()方法将字符串转换为大写示例代码运行结果代码解释 扩展:动态输入字符串示例运行 何时使用upper方法基本用法示例忽略大小写的字符串比较数据清洗标准化 注意事项 012. 使用字符串的upper()方…