Linux内核exp提权实战

SoftNight 技术 2018年8月17日发布
Favorite收藏

导语:获取root权限是Linux漏洞利用的终极目标。跟Windows中的system用户一样,root用户拥有对操作系统的所有管理权限。在渗透中,有时候成功利用某些漏洞只会获取一个低权限用户,所以需要使用提权技巧,提升到权限更高的root用户,完全控制整

获取root权限是Linux漏洞利用的终极目标。跟Windows中的System用户一样,root用户拥有对操作系统的所有管理权限。在渗透中,有时候成功利用某些漏洞只会获取一个低权限用户,所以需要使用提权技巧,提升到权限更高的root用户,完全控制整个系统。

第一步 信息收集&搜索exp

在上一篇文章中,我们使用metasploit利用shellshock漏洞获取到了靶机上的一个低权限的shell。

而我们的终极目标是root权限,所以我们需要提权,打破低权限shell的限制。

上一篇文章链接: http://www.4hou.com/vulnerable/12984.html

我们将使用一个内核exp提权到root用户,首先我们搜集靶机的基本信息。由于我们已经获取到了一个shell,我们可以执行uname –a 命令来查看内核版本,也可以使用lsb_release –a命令来查看当前系统发行版的具体版本号,如下图:

01.png

现在我们就要查找可以利用的exp了。我们刚才执行的命令显示运行的系统是Ubuntu8.0.4,内核版本是2.6.24。

kali本身自带了一个本地版本的Exploit-DB库,包含了各种各样的exp和代码等。

我们可以使用非常有用的SearchSploit工具来访问这个exp库,只要在终端中输入searchsploit即可运行,如图:

02.png

由于我们是要找提权exp,所以我们搜索privilege,然后使用grep命令来缩小查找范围,加上-i 参数忽略大小写。对于本文这个例子,我们使用8572.c这个exp,利用了UDEV设备管理器的一个漏洞,允许通过未经验证的Netlink消息来执行代码。复制exp位置,然后使用locate命令来查找完整的路径,也就是/usr/share/exploitdb/exploits/linux/local/8572.c.

如图所示:

03.png

这个exp是用C语言写的(扩展名是.c),但是我们不用担心源代码问题,只要我们进行编译后它就可以运行。

现在我们可以查看文件,并且查看关于exp的详细信息,还有开发者的注释。

04.png

第二步 把exp上传到靶机中

要利用这个exp,需要把它上传到靶机中。最简单的方法就是在本地kali中搭建Apache服务器,把exp放在本地服务器上,然后从靶机连接到这个服务器并下载exp。不过,在这之前,我们要进行一些准备步骤。

首先,我们要确保服务器启动并且运行在kali中,这个只要在终端中执行一条命令即可,service apache2 restart。然后我们在服务器文件目录下建立exp所在位置的符号链接,这样exp才可以下载,执行以下命令来建立符号链接:

05.png

这个exp要在靶机的/tmp目录下运行,所以,我们首先要创建一个将要执行的文件。在kali上,使用nano /var/www/html/run命令来创建一个文件并输入下面几行内容:

06.png

当这个文件执行时,它会使用netcat去连接kali的4321端口并生成一个shell。执行的时候敲 Ctrl-X, Y, 和回车进行保存。

现在我们准备好要上传exp到靶机了。回到我们的低权限shell,切换到/tmp目录下,使用wget命令连接到kali中运行的服务器,然后将文件上传到靶机上,如图:

07.png

第三步 编译&执行

现在exp文件已经成功上传到靶机上了,我们下一步就是执行该exp。由于exp文件是用C编写的,我们需要把它编译成可执行文件。这里我们不会探讨编译语言的细节,我们只需要把源码编译可执行文件,能够运行即可,在Linux系统中,只要使用gcc命令即可,使用-o参数来指定输出文件的名字:

08.png

如果出现没有找到ld(动态链接器)的情况,我们需要使用-B参数来指定链接器的位置,在这个例子中,位置是/usr/bin,现在的命令如下:

09.png

最后,我们可以使用ls命令来查看下可执行文件是否已经成功编译,如图所示:

10.png

在8572.c文件的文档中,它说我们要找到Netlink套接字的PID,这个PID通常比UDEVD的PID小1。我们使用 cat /proc/net/netlink命令来查看PID,唯一的非0的PID就是我们想要的数字。我们可以验证这个PID是正确的,使用 ps aux | grep udev来查看UDEVD的PID,它应该比刚才的数字大1,如图所示:

11.png

接下来,我们需要在kali中设置监听器,当脚本执行时我们就能获取到shell了。在kali上执行 nc –lvp 4321命令来监听入站连接。

现在我们的监听器是开着的,我们终于可以进行漏洞利用了。记住,要把Netlink的PID作为参数传递过去,也就是2459。在低权限shell中执行下面的命令:

12.png

片刻之后,我们的Netcat监听器就获取到了一个新的连接会话,我们输入id和whoami命令来查看下用户信息,可以看到我们已经获取到root权限的用户了,如图:

13.png

现在服务器已经完全在我们的控制之下,我们可以做任何事情了。

下一步 破解密码hash

本教程中,我们学会了如何使用Linux内核exp来进行本地提权并且获取到了root权限,控制了服务器。下一篇文章,我们会讲解定位密码hash位置并讲解几个工具来进行破解它们。

敬请期待!

本文翻译自:https://null-byte.wonderhowto.com/how-to/perform-local-privilege-escalation-using-linux-kernel-exploit-0186317/如若转载,请注明原文地址: http://www.4hou.com/technology/13105.html
点赞 1
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论