首页
社区
课程
招聘
[翻译]Windows本地提权相关的技术总结
发表于: 2020-5-20 15:16 12022

[翻译]Windows本地提权相关的技术总结

2020-5-20 15:16
12022

乍闻“提权”二字或许会令人生畏,但是当你了解了应该需要哪些内容、忽视哪些内容之后,就会变得容易些。提权通常归结为适当的信息收集。本教程主要关注常见的提权技巧及其利用方式。

本教程一开始是一个没有提权的shell终端。为方便演示,我已使用netcat从Windows 7 x86 虚拟机中反弹了shell 。

漏洞枚举有多重要,不言而喻。网上有很多教我们从系统中提取有用信息的方法。在本教程中,我主要关注那些方便获取并使用的脚本。以下是一些较为常见的脚本:

根据我的经验,winPEAS和PowerUp是最有用的工具。PowerUp是用PowerShell写的,winPEAS是用C#写的。要运行winPEAS你需要安装.NET Framework 4.0。winPEAS还有.bat版本,可以在没有.NET Framework 4.0的环境中使用。就我个人而言,因为Windows 7 没有默认安装.NET 4.0,我需要先安装.NET 4.0才能使用winPEAS。保险起见,请使用多个脚本进行枚举。举个例子,winPEAS能检测Weak Registry漏洞,而PowerUp则不行。

在注册表中查找用户名和密码

img

假设现在你发现了一个密码,你会怎么做?如果RDP(Remote Desktop Protocol远程桌面协议)可用,且用户又在远程桌面用户组里面,那就太棒了。接下来你可以使用下面PowerShell脚本来以该用户的身份运行命令。

如果cmdkey/list有返回值,那就意味着,你可以 runas 特定用户,因为它把它的凭证存储在windows上。

如果该系统经常升级,那么这些利用方式可能不会那么有效。你可以使用Watson检查看看有没有因为没有打补丁而产生的漏洞。现在Watson已经整合进winPEAS了。一旦你发现任何漏洞,你都可以在下面的仓库中下载到相同的漏洞。这里你要确保下载的架构和你目标架构一致 。如果你需要编译二进制文件,你可以使用kali进行交叉编译。

https://github.com/SecWiki/windows-kernel-exploits

Windows程序启动的时候需要DLL。如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。

通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:

1、应用程序加载的目录

2、32位系统目录(C:\Windows\System32)

3、16位系统目录(C:\Windows\System)

4、Windows目录 (C:\Windows)

5、当前工作目录(Current Working Directory,CWD)

6、在PATH环境变量的目录(先系统后用户)

img

如你所见,PowerUp检测到了一个潜在的DLL挟持漏洞。通常,我们用PowerUp的Write-HijackDll函数写恶意DLL,并重启该应用程序。当启动该应用程序时,它会加载该恶意DLL并以更高的权限运行我们的代码。

在这个例子中,使用谷歌快速搜索一下,就能找到 https://github.com/itm4n/Ikeext-Privesc 可用于利用此漏洞。

但是你也可以手动实现整个利用过程,以便更好的理解。你可以参考我这篇文章

如果启动了某一服务,Windows就会搜索它的二进制文件来运行。要运行的二进制文件的位置在binPath属性中声明。如果该二进制文件没有被引用,Windows就不知道该二进制文件存放在哪里,然后就会在所有文件夹中进行查找。

所以,如果我们想利用这一点,我们需满足三个条件:

如果binPath是这样设置的:

Windows会根据以下顺序进行查找:

img

PowerUp检测到的未使用双引号的服务路径

img

winPEAS检测到的可写路径

msfvenom创建一个payload,命名为control.exe,并将它放到C:\Program Files\Unquoted Path Service\common.exe目录下。

img

sc start unquotedsvc启动该服务并运行该paylod

如果用户有某一服务所使用的文件夹的写权限,他就可以将二进制文件替换为恶意的二进制文件。那么重启服务后,该恶意二进制文件就会以更高的权限被执行。

img

有弱权限的二进制服务文件

img

通过复制payload到该二进制服务文件所在的位置,就可以替换该文件。重启该服务后,payload就会以更高权限被执行。

由SYSTEM创建的服务存在弱权限,会导致提权。如果低权限用户可以修改服务配置,也就是,修改binPath为一个恶意二进制文件并重启该服务,那么,恶意二进制文件就将以SYSTEM权限被执行。

如果Authenticated Users组在服务中具有SERVICE_ALL_ACCESS,则它可以修改该服务正在执行的二进制文件。

img

当Windows调用启动一个服务时,它调用的是ServiceMain函数,并期望有一个返回值。如果你不指定exe-service,那么上面生成的payload就无法给你返回shell。

要运行该payload,需要修改配置并启动该服务。

img

在Windows中,每一个服务都有一个注册键,而且这些注册键位于:

如果Authenticated UsersNT AUTHORITY\INTERACTIVE有任一服务的完全控制权,那么你就可以换掉要该service要运行的二进制文件。

img

img

修改注册表ImagePath的值为你的payload所在的位置,并启动该服务。

根据AlwaysInstallElevated组策略,Windows允许低权限用户使用system权限安装微软Windows安装包(Microsoft Windows Installer,MSI)。

img

msfvenom创建一个msi格式的payload。

img

msfvenom -p windows/adduser USER=backdoor PASS=Pass@1234 -f msi -o setup.msi

使用如下命令安装payload。

img

MSI安装后用户添加的后门。

img

因为autorun的路径是可以修改的,我们可以用payload替换该文件。要以高权限运行该程序,我们需要等某个在admin组的用户登录。

img

img

admin登录

img

payload在admin登录的那一刻执行。

“Hot Potato(又名:Potato)利用windows中已存在的问题,在windows默认配置下进行本地权限提升。实际是利用了NTLM重放(更确切的说是HTPP->SMB重放),和NBNS欺骗。”

更多关于此exploit的信息请看这里

我们添加了很多用户,现在让我们尝试以admin权限删除其中一个。

img

藏在admin组的后门用户

img

exploit完成后,后门用户被删除了。

在渗透测试项目中,渗透测试人员会设法攻破诸如Apache, IIS, SQL, MySQL等服务。但是,这些服务并不是以本地system或更高权限运行,而是网络服务。你可以使用下列的exploit进行提权。

原文地址:https://medium.com/bugbountywriteup/privilege-escalation-in-windows-380bee3a2842
翻译:看雪翻译小组 lumou
校对:看雪翻译小组 梦野间

 
 
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-5-20 15:28 被lumou编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (1)
雪    币: 26339
活跃值: (63282)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享~
2020-5-20 16:48
0
游客
登录 | 注册 方可回帖
返回
//