域渗透——普通用户权限获得 DNS 记录

发布于 2024-11-08 10:10:43 字数 5427 浏览 19 评论 0

0x00 前言

在之前的文章 《域渗透——DNS 记录的获取》 介绍了域渗透中获得 DNS 管理员权限后获取 DNS 记录的方法,而更普遍的情况是只有域普通用户的权限,也需要获得 DNS 记录。

本文将会参考公开的资料,整理域普通用户获得 DNS 记录的方法,修复 dns-dump.ps1 在高版本 Windows 系统下的 bug

0x01 简介

本文将要介绍以下内容:

  • 实现原理
  • 开源的工具和方法

0x02 实现原理

1.SharpAdidnsdump 的实现原理

先通过 LDAP 查询获得域内计算机的名称,再通过 DNS 查询获得对应的 IP

详细实现细节可参考:https://github.com/b4rtik/SharpAdidnsdump

测试环境: test.com

(1) 通过 LDAP 查询获得域内计算机的名称

对应 LDAP 的查询参数如下:

LDAP://test.com/DC=test.com,CN=microsoftdns,DC=DomainDnsZones,DC=test,DC=com
(&(!(objectClass=DnsZone))(!(DC=@))(!(DC=*arpa))(!(DC=*DNSZones)))

(2) 通过 DNS 查询获得域内计算机对应的 IP

使用 Dns.GetHostEntry 方法,参考资料:https://docs.microsoft.com/en-us/dotnet/api/system.net.dns.gethostentry?redirectedfrom=MSDN&view=netframework-3.5

2.dns-dump 的实现原理

先通过 LDAP 查询获得 DNS 记录,对二进制的 DNS 记录进行解码,获得实际内容

DNS 记录解码的细节可参考:https://github.com/mmessano/PowerShell/blob/master/dns-dump.ps1

0x03 开源的工具和方法

测试环境:

  • test.com
  • Server2012 R2

1.先通过 LDAP 查询获得域内计算机的名称,再通过 DNS 查询获得对应的 IP

(1)SharpAdidnsdump

https://github.com/b4rtik/SharpAdidnsdump

C#实现,用于查询 DNS 记录

用法:

SharpAdidnsdump test.com

获得的结果完整,同 dnscmd 的结果一致

(2)adidnsdump

Python 实现,用于查询 DNS 记录

适用于 Linux,由于需要安装 impacket,因此无法直接在 Windows 系统下使用

安装方法:

git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
pip install .
cd ..
git clone https://github.com/dirkjanm/adidnsdump
cd adidnsdump
pip install .

需要先获得一个域用户的凭据(明文口令或 NTLM hash)

用法 1.直接远程查询:

adidnsdump -u test\\testuser1 -p test123! dc.test.com -r

用法 2.通过 socks 代理进行查询:

proxychains adidnsdump -u test\\testuser1 -p test123! dc.test.com -r --dns-tcp

注:还可以使用 NTLM hash 作为登录凭据

2.先通过 LDAP 查询获得 DNS 记录,对二进制的 DNS 记录进行解码,获得实际内容

(1) dns-dump

https://github.com/mmessano/PowerShell/blob/master/dns-dump.ps1

Powershell 实现,用于查询 DNS 记录

这个 powershell 脚本较为古老,我在我的测试环境 Server2008R2 和 Server2012R2 下均失败

经过分析,需要修改 LDAP 的查询语句,新的脚本已上传至 github,地址如下:

https://github.com/3gstudent/Homework-of-Powershell/blob/master/dns-dump.ps1

用法:

Powershell -ep bypass -f dns-dump.ps1 -zone test.com

获得的结果完整,同 dnscmd 的结果一致

(2) PowerView

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

也可用于查询 DNS 记录

其中的 Convert-DNSRecord 可用来对二进制的 DNS 记录进行解码:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1#L1814

用法如下:

import-module PowerView.ps1
Get-DNSRecord -ZoneName test.com

3.其他工具

(1)AdFind

C++实现(未开源),用于查询域内信息

http://www.joeware.net/freetools/tools/adfind/index.htm

常用命令如下:

列出域控制器名称:

AdFind -sc dclist

查询当前域中在线的计算机:

AdFind -sc computers_active

注:对应的 LDAP 查询条件如下:

Transformed Filter: (&(objectcategory=computer)(!(useraccountcontrol:1.2.840.113556.1.4.803:=2))(pwdlastset>=131932198595370000)(|(!lastlogontimestamp=*)(&(lastlogontimestamp=*)(lastlogontimestamp>=131932198595370000))))

查询当前域中在线的计算机(只显示名称和操作系统):

AdFind -sc computers_active name operatingSystem

查询当前域中所有计算机:

AdFind -f "objectcategory=computer"

查询当前域中所有计算机(只显示名称和操作系统):

AdFind -f "objectcategory=computer" name operatingSystem

查询域内所有用户:

AdFind -users name

查询所有 GPO:

AdFind -sc gpodmp

AdFind -gpo

0x04 小结

本文介绍了多种域普通用户获得 DNS 记录的方法,适用于不同的环境,在实际使用过程中,某些情况下 AdFind 的查询效率较低。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

御守

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文