跳转至

100 linux security

1 Linux 提权原理及十种提权姿势详解

作者:廖林 Ivens
链接:https://zhuanlan.zhihu.com/p/304572787
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这篇文章摘录至《渗透测试方法论之 Linux 提权》,目前该课程已上线蓝桥教育平台,其中梳理了 Linux 提权的十种方法,并且每个提权场景都会搭配相应的在线实战实验,能帮助你更好的理解提权的原理,掌握提权的方法和技巧。

课程制作非常不易,共花费了我十多个周末来修修改改,课程价格实惠就几十块钱,如果对你有帮助的话,就请支持我一下吧,真心的感谢!

课程上线首周有八折优惠,加上我的专属优惠码(7MaDpzNc)还能折上折哦!

渗透测试方法论之 Linux 提权实战www.lanqiao.cn/courses/2650

在开始学习 Linux 提权之前,我们需要先理解什么是提权?为什么要进行提权?

2 0x1 什么是提权?

一次完整的渗透测试流程,应该包含以下 8 个步骤:

在渗透测试前期,我们会想尽办法通过「某个漏洞攻击」获取到目标主机系统上的一个 shell 用于执行系统命令,从而达到控制目标主机的目的,也就是图中的第4步。

当我们获取到的初始 shell 为低权限用户时,需要想办法提升权限为高权限用户,这个过程就叫做系统权限提升,简称「提权」 (对应图中第5步)。

3 0x2 为什么 shell 会有高低权限的区别?

有些同学会有一个疑惑:为什么同样是通过漏洞攻击获取到的 shell ,有时候是低权限,有时候又是高权限呢?

下面以一个简单的例子来说明:

通常情况下 Web 服务架构如上图所示:后端 linux 服务器通过 Tomcat 中间件提供 Web 服务。

如今的计算机操作系统都是基于多用户设计的,通常一台计算机上同时存在着多个不同权限的系统用户,而在 Linux 服务器上,每个服务都需要先赋予某个用户权限才能运行。

用户权限定义:「用户权限」是用来控制某个系统用户被允许做哪些操作和不允许做哪些操作。

假设 tomcat 服务以普通用户 web-user的权限运行并提供 Web 服务,此时如果黑客通过 Web 漏洞获取到 shell,此 shell 就是一个 web-user用户权限的 shell——此时就需要提权。

反之,若 tomcat 是以 root 用户权限运行,那黑客获取到的 shell 就是 root 权限。

4 0x3 为什么要提权?

在渗透测试中,高权限 shell 能带来以下好处:

  • 高权限能对更多的文件进行「增删改查」操作,便于进一步收集主机系统中的敏感信息
  • Linux 系统的 root 权限可获取 shadow 文件中的密码 Hash,若内网环境中存在「账户/密码复用」的情况,可用于横向扩展
  • Windows 系统中的 system 权限可提取内存中的密码 Hash,可进一步用于域渗透

简而言之,获取更高权限的 shell,能为渗透测试后期的工作带来便利。

4.1 0x4 Linux 提权之暴力破解提权

摘录至蓝桥教育平台《渗透测试方法论之 Linux 提权》第十二章,内容会有所删减。

在前面的实验中,我们已经为大家介绍了多种 Linux 提权方法,这些方法已经覆盖到了实战中的绝大部分场景,但如果你遇到前面所有的方法都无法成功提权时,别忘了还有一种最原始但有用的方法可以尝试——暴力破解。

通常来说,可以通过两种途径暴力破解 root 用户的密码:

  1. 通过 su 命令爆破 root 密码
  2. 通过 SSH 协议爆破 root 密码

下面我依次为大家介绍这两种方法。

4.1 通过 su 命令暴破 root 密码

Linux su 命令用于切换为其他使用者身份,除 root 外,其他用户使用时需要输入将要切换的「目标用户」的密码。

su 命令暴力破解使用的工具是 sucrack 。

4.2 sucrack 介绍和安装

sucrack 是一个多线程的Linux工具,用于通过 su 爆破本地用户密码。

因为 su 命令需要从 TTY shell 获取用户输入,因此不能只用一个简单的 shell 脚本来完成爆破,sucrack 是采用 c 语言编写的工具,并且支持多线程,爆破效率非常高。

sucrakck 官方地址如下:

https://leidecker.info/projects/sucrack.shtml

在实战环境中,靶机可能是无法连接外网的,因此我们可以使用如下两种方法安装 sucrack:

  1. 下载sucrack源码并上传到靶机上,再编译运行。
  2. 下载sucrack源码,在本地编译好之后再上传到靶机运行。

本课程旨在为大家演示 sucrack 的用法,因此为了方便我们直接使用 apt 安装 sucrack :

 sudo apt install sucrack

如上图所示,安装成功。

4.3 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 密码

4.4 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 暴力破解,否则就没必要在尝试了。

4.5 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 提权》。