后渗透提权辅助工具BeRoot详解
0x00 工具介绍
前言
BeRoot是一个后期开发工具,用于检查常见的Windows的配置错误,以方便找到提高我们提权的方法。其二进制编译地址为:
https://github.com/AlessandroZ/BeRoot/releases
它将作为后开发模块被添加到pupy(Pupy是一个开源,跨平台(Windows,Linux,OSX,Android),多功能RAT远程管理工具和后开发工具,主要用python编写)项目中(因此它将在内存中执行,而不会在硬盘中执行)。
需要注意的是,这款工具只能用来检测,而无法直接利用目标系统中存在的漏洞。但是,如果它发现了错误配置,它可以通过模版来利用这些漏洞。模版文件位于templates/service目录下,如果项目提供的模版文件无法运行,我们也可以根据目标系统的情况手动创建一个模版文件。
工具下载
【beRoot.zip】(zip)
【源代码】(zip)
【源代码】(tar.gz)
工具运行:
|==============================================
| |
| Windows Privilege Escalation |
| |
| ! BANG BANG ! |
| |
|==============================================
usage: beRoot.exe [-h] [-l] [-w] [-c CMD]
Windows Privilege Escalation
optional arguments:
-h, --help show this help message and exit
-l, --list list all softwares installed (not run by default)
-w, --write write output
-c CMD, --cmd CMD cmd to execute for the webclient check (default: whoami)
0x01 工具利用
包含没有引号的空格路径:
如以下文件路径:
C:\Program Files\Some Test\binary.exe
如果路径中包含空格并且没有引号,Windows将尝试按以下顺序查找和执行目标程序:
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\binary.exe
按照此顺序,如果“C:\”文件夹是可写的,可能会创建一个名为“Program.exe”的恶意可执行二进制文件,如果“binary.exe”拥有高权限,那么我们就可以利用这种机制来提升我们的权限。
注意:BeRoot会对每一条服务路径、计划任务、以及HKLM条目中的启动键执行这样的检测
利用方法:
在利用存在安全缺陷的路径时,我们应该遵循以下方法:
1. 如果是一个服务,那么我们就创建一个恶意服务(或编译一个service模版)。
个人理解为:通过该工具检查到的服务运行的路径为带空格且没有引号的目录路径,则可以用其他恶意服务来替换来达到提权。
2. 如果是一个可执行程序,那么我们就可以创建一个恶意的可执行程序
可写目录:
如下文件路径:
C:\Program Files\Some Test\binary.exe
如果“binary.exe”的根目录是可写的(“C:\ Program Files \ Some Test”)并以高权限运行,那么我们就可以利用它来实现提权。
利用方法
1. 如果服务不处于运行状态:用我们的服务模版替换掉合法服务,重启该服务,并尝试触发该服务。
2. 服务处于运行状态且无法被终止:这是大多数的情况,可以尝试进行DLL劫持并使用其他的技术来重启服务
%PATH%上的可写目录:
这项技术可在以下Windows版本中使用:
6.0 => Windows Vista / Windows Server 2008
6.1 => Windows 7 / Windows Server 2008 R2
6.2 => Windows 8 / Windows Server 2012
在上述Windows版本中,DLL文件是通过指令代码进行加载的,Windows会通过下列步骤来尝试定位相应的代码:
- 定位代码所在目录
- C:\Windows\System32
- C:\Windows\System
- C:\Windows\
- 当前目录下的代码已启动
- 目录地址将会保存在%PATH%环境变量中
二进制文件启动的当前目录
如果%PATH%变量中的目录路径是可写的,那么我们就有可能实现DDL劫持攻击。那么接下来,我们的目标就是要找出一个能够加载DLL文件但路径还不在%PATH%变量中的服务。默认情况下,我们选择使用“IKEEXT”服务,它可以加载我们的恶意DLL文件-wlbsctrl.dll。
如何利用:创建一个名为“wlbsctrl.dll”(使用DLL模版)的恶意DLL文件,并将其添加至%PATH%变量中的可写路径,开启“IKEEXT”服务,为了在没有高级权限的情况下开启IKEEXT服务,我们可以参考法国杂志MISC90中所介绍的方法,方法大致如下:
根据下列信息创建一个文件:
C:\Users\bob\Desktop>typetest.txt
[IKEEXTPOC]
MEDIA=rastapi
Port=VPN2-0
Device=Wan Miniport (IKEv2)
DEVICE=vpn
PhoneNumber=127.0.0.1
使用“rasdial”命令开启IKEEXT服务,如果链接失效,则说明该服务已经处于运行状态了。
MS16-075漏洞检查
对于懂法语的用户,我建议可以参考MISC 90中提供的技术细节。
微软已经在公告MS16-075的补丁中修复了这个漏洞,但是很多服务器仍然存在这个问题,这里给大家提供一个C++PoC【点我获取】。大致的实现方法如下:
1. 使用某些方法(使用其UUID)开启Webclient服务
2. 在本地开启一个HTTP服务器
3. 找到一个能够触发SYSTEM NTLM哈希的服务
4. 启用该服务的文件追踪,修改其注册表键值,并让其指向我们的Web服务器(\\127.0.0.1@port\tracing)
5. 开启该服务
6. 让我们的HTTP服务器请求获取SYSTEM NTLM哈希
7. 使用这个哈希和SMB来执行我们的自定义Payload
8. 清除痕迹(终止服务,清除注册表键等等)
如何利用:在目标主机中,BeRoot可以通过下列命令来执行自定义命令:
beRoot.exe -c “net userZapata LaLuchaSigue /add”
beRoot.exe -c “net localgroupAdministrators Zapata /add”
注册表键AlwaysInstallElevated
通过对AlwaysInstallElevated进行设置,我们可以让非特权用户使用高级权限(SYSTEM权限)来运行MicrosoftWindows Installer包文件。为此,我们需要将下面这两个注册表键值设置为1:
HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
如何利用:创建一个恶意MSI文件,然后执行。
Unattend安装文件
很多安装文件中包含程序的所有配置信息,并且会在程序的安装过程中对程序进行配置,而有些安装文件中还包含对本地账号(例如管理员账号)的配置信息,我们可以通过下列路径获取到这些文件:
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\Panther\unattend.xml
如何利用:打开unattend.xml文件,检查其中是否含有密码。文件结构大致如下:
<UserAccounts>
<LocalAccounts>
<LocalAccount>
<Password>
<Value>RmFrZVBhc3N3MHJk</Value>
<PlainText>false</PlainText>
</Password>
<Description>Local Administrator</Description>
<DisplayName>Administrator</DisplayName>
<Group>Administrators</Group>
<Name>Administrator</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
0x03 总结
可检查以下的内容:
可写的应用程序路径
可写不含引号有空格的路径
可利用的注册表键值
找到无人值守安装文件
可检查到MS16-075漏洞利用