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

发布于 2024-11-08 10:10:43 字数 5427 浏览 3 评论 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技术交流群

发布评论

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

关于作者

御守

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

qq_z5gHLI

文章 0 评论 0

圈圈圆圆圈圈

文章 0 评论 0

alipaysp_h2Vbo4sv6k

文章 0 评论 0

初见你

文章 0 评论 0

清风无影

文章 0 评论 0

云胡

文章 0 评论 0

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