Linux 提权原理及十种提权姿势详解
作者:廖林 Ivens
链接:https://zhuanlan.zhihu.com/p/304572787
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这篇文章摘录至《渗透测试方法论之 Linux 提权》,目前该课程已上线蓝桥教育平台,其中梳理了 Linux 提权的十种方法,并且每个提权场景都会搭配相应的在线实战实验,能帮助你更好的理解提权的原理,掌握提权的方法和技巧。
课程制作非常不易,共花费了我十多个周末来修修改改,课程价格实惠就几十块钱,如果对你有帮助的话,就请支持我一下吧,真心的感谢!
课程上线首周有八折优惠,加上我的专属优惠码(7MaDpzNc)还能折上折哦!
渗透测试方法论之 Linux 提权实战www.lanqiao.cn/courses/2650

在开始学习 Linux 提权之前,我们需要先理解什么是提权?为什么要进行提权?
0x1 什么是提权?
一次完整的渗透测试流程,应该包含以下 8 个步骤:

在渗透测试前期,我们会想尽办法通过「某个漏洞攻击」获取到目标主机系统上的一个 shell 用于执行系统命令,从而达到控制目标主机的目的,也就是图中的第4步。
当我们获取到的初始 shell 为低权限用户时,需要想办法提升权限为高权限用户,这个过程就叫做系统权限提升,简称「提权」 (对应图中第5步)。
0x2 为什么 shell 会有高低权限的区别?
有些同学会有一个疑惑:为什么同样是通过漏洞攻击获取到的 shell ,有时候是低权限,有时候又是高权限呢?
下面以一个简单的例子来说明:

通常情况下 Web 服务架构如上图所示:后端 linux 服务器通过 Tomcat 中间件提供 Web 服务。
如今的计算机操作系统都是基于多用户设计的,通常一台计算机上同时存在着多个不同权限的系统用户,而在 Linux 服务器上,每个服务都需要先赋予某个用户权限才能运行。
用户权限定义:「用户权限」是用来控制某个系统用户被允许做哪些操作和不允许做哪些操作。
假设 tomcat 服务以普通用户 web-user的权限运行并提供 Web 服务,此时如果黑客通过 Web 漏洞获取到 shell,此 shell 就是一个 web-user用户权限的 shell——此时就需要提权。
反之,若 tomcat 是以 root 用户权限运行,那黑客获取到的 shell 就是 root 权限。
0x3 为什么要提权?
在渗透测试中,高权限 shell 能带来以下好处:
- 高权限能对更多的文件进行「增删改查」操作,便于进一步收集主机系统中的敏感信息
- Linux 系统的 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展
- Windows 系统中的 system 权限可提取内存中的密码 Hash,可进一步用于域渗透
简而言之,获取更高权限的 shell,能为渗透测试后期的工作带来便利。
0x4 Linux 提权之暴力破解提权
摘录至蓝桥教育平台《渗透测试方法论之 Linux 提权》第十二章,内容会有所删减。
在前面的实验中,我们已经为大家介绍了多种 Linux 提权方法,这些方法已经覆盖到了实战中的绝大部分场景,但如果你遇到前面所有的方法都无法成功提权时,别忘了还有一种最原始但有用的方法可以尝试——暴力破解。
通常来说,可以通过两种途径暴力破解 root 用户的密码:
- 通过 su 命令爆破 root 密码
- 通过 SSH 协议爆破 root 密码
下面我依次为大家介绍这两种方法。
4.1 通过 su 命令暴破 root 密码
Linux su 命令用于切换为其他使用者身份,除 root 外,其他用户使用时需要输入将要切换的「目标用户」的密码。
su 命令暴力破解使用的工具是 sucrack 。
sucrack 介绍和安装
sucrack 是一个多线程的Linux工具,用于通过 su 爆破本地用户密码。
因为 su 命令需要从 TTY shell 获取用户输入,因此不能只用一个简单的 shell 脚本来完成爆破,sucrack 是采用 c 语言编写的工具,并且支持多线程,爆破效率非常高。
sucrakck 官方地址如下:
https://leidecker.info/projects/sucrack.shtml

在实战环境中,靶机可能是无法连接外网的,因此我们可以使用如下两种方法安装 sucrack:
- 下载
sucrack源码并上传到靶机上,再编译运行。 - 下载
sucrack源码,在本地编译好之后再上传到靶机运行。
本课程旨在为大家演示 sucrack 的用法,因此为了方便我们直接使用 apt 安装 sucrack :
sudo apt install sucrack

如上图所示,安装成功。
sucrack 使用方法
sucrack 的用法非常简单,最基础的命令如下:
sucrack -w 20 wordlists.txt
参数解释:
-w指定线程数wordlists.txt爆破使用的字典
sucrack 默认爆破 root 用户,你也可以使用 -u 指定要爆破的用户:
sucrack -u myuser -w 20 wordlists.txt
我预先准备了一份密码字典用于演示,存放在 /tmp/common-wordlists.txt,同学们也可以使用自己的字典。

使用如下命令尝试爆破 root 密码,线程数保守一点设定为 20:
sucrack -w 20 /tmp/common-wordlists.txt
开始爆破之后,按键盘任意键刷新显示进度:

等待一会,成功破解出 root 用户的密码为 **ly:

然后使用 su root 切换为 root 用户:

sucrack 功能是非常简单强大的,你学会了吗?
4.2 通过 SSH 爆破 root 密码
SSH 服务介绍
SSH 服务的配置文件有为两个,分别是:
- /etc/ssh/ssh_config : 客户端的配置文件
- /etc/ssh/sshd_config : 服务端的配置文件
仅当 /etc/ssh/sshd_config 中 PermitRootLogin 设置为 yes,root 用户才能登录 ssh:

因此,在通过 ssh 爆破 root 用户密码之前,我们需要先使用如下命令来查询靶机是否允许 root 用户通过 ssh 登录:
注意,此时我们已经获取到目标靶机的初始 shell,因此可以直接查看靶机上的 sshd 配置文件,后续的 ssh 爆破也是在本地进行的。
cat /etc/ssh/sshd_config |grep -i permitrootlogin

当 PermitRootLogin 被设置为 yes 时,才用尝试 SSH 暴力破解,否则就没必要在尝试了。
hydra 介绍和使用方法
SSH 协议爆破使用到的工具是 hydra,hydra 是一款非常著名的爆破工具,除了 SSH 协议以外,hydra 还支持众多其他协议例如 RDP、SMB、HTTP、MySQL 等,由于篇幅有限,具体可以参考下面这篇文章:
https://github.com/Jewel591/OSCP-Pentest-Methodologies/blob/master/Password%20Attacks/README.md
hydra 在 Kali Linux 上默认安装,实验主机的 ubuntu 环境也已经提前安装好,爆破 SSH 协议的语法如下:
hydra -l root -P passwords.txt -t 4 -V <IP> ssh
参数解释:
-l: 指定用户名-P: 指定爆破字典-t: 指定爆破线程-V: 查看破解详情、进度
下面我们尝试爆破 root 用户的密码,字典仍然使用 /tmp/common-wordlists.txt :
hydra -l root -P /tmp/common-wordlists.txt -t 64 -V 127.0.0.1 ssh

如上图所示,成功爆破出 root 用户的密码。
注意:如果你使用的 hydra 是 v9.0 之前的版本,在爆破 ssh 协议时很可能会出现误报,请先升级后再使用(实验环境是 v9.2)。
4.3 本章总结
在本节实验中,我们学习了通过两种途径爆破 SSH 服务的方法—— su 和 SSH,并且分别介绍了对应的两种破解工具的使用。
更多提权技巧详解,请见《渗透测试方法论之 Linux 提权》。