RenX6 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 之前的文章《域渗透——DNS记录的获取》介绍了在域穿透中获得DNS管理员权限后获取DNS记录的方法,但更常见的情况是只有域内的普通用户才需要获取DNS记录。 本文将参考公开资料,梳理域内普通用户获取DNS记录的方法,修复高版本Windows系统下dns-dump.ps1的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=微软dns,DC=域名区域,DC=测试,DC=com ((!(objectClass=DnsZone))(!(DC=@)(!(DC=*arpa))(!(DC=*DNSZones))) (2)通过DNS查询获得域内计算机对应的IP 使用Dns。GetHostEntry方法,资源: https://docs . Microsoft . com/en-us/dot net/API/system . net . DNS . gethostentry?redirectedfrom=MSDNview=Net framework-3.5 # System _ Net _ Dns _ GetHostEntry _ System _ String _ 2.dns-dump的实现原理 首先通过LDAP查询获得DNS记录,解码二进制DNS记录获得实际内容。 有关DNS记录解码的详细信息,请参见: https://github . com/mmessano/PowerShell/blob/master/DNS-dump . PS1 # L483 0x03 开源的工具和方法 测试环境: test.com Server2012 R2 1.先通过LDAP查询获得域内计算机的名称,再通过DNS查询获得对应的IP (1)SharpAdidnsdump https://github.com/b4rtik/SharpAdidnsdump # C实现,用于查询DNS记录 用法: test.com夏普迪登普 所得结果与dnscmd的结果完全一致。 注: dnscmd的用法可以参考之前的文章《域渗透——DNS记录的获取》。 (2)adidnsdump https://github.com/dirkjanm/adidnsdump https://dirkjanm . io/getting-in-zone-dumping-active-directory-DNS-with-adidnsdump/ Python实现,用于查询DNS记录 适用于Linux,不能直接在Windows系统下使用,因为需要安装impacket。 安装方法: git克隆https://github.com/SecureAuthCorp/impacket.git cd包装 pip安装。 激光唱片. git克隆https://github.com/dirkjanm/adidnsdump cd adidnsdump pip安装。 您需要获得域用户的凭证(明文密码或NTLM哈希) 1.用法:直接远程查询: adidnsdump-u test \ \ testuser 1-p test 123!dc.test.com河 2.用法:通过socks代理查询: proxy chains adidnsdump-u test \ \ test user 1-p test 123!dc.test.com-r-DNS-TCP 注: 您也可以使用NTLM哈希作为登录凭据。 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/3g student/home-of-Powershell/blob/master/DNS-dump . PS1 用法: powershell-EP bypass-f DNS-dump . PS1-区域test.com 所得结果与dnscmd的结果完全一致。 (2)PowerView https://github . com/powershell mafia/PowerSploit/blob/master/Recon/power view . PS1 它还可以用来查询DNS记录 的Convert-DNSRecord可用于解码二进制DNS记录: https://github . com/powershell mafia/PowerSploit/blob/master/Recon/power view . PS1 # l 1814 用法如下: 导入模块PowerView.ps1 get-DNS record-zone name test.com 3.其他工具 (1)AdFind c实现(非开源),用于查询域内信息。 http://www.joeware.net/freetools/tools/adfind/index.htm 常见命令如下: 列出域控制器名称: AdFind -sc dclist 查询当前域中的联机计算机: AdFind -sc计算机_活动 注: 对应的LDAP查询条件如下: 已转换的筛选器:((objectcategory=computer)(!(user account control:1 . 2 . 840 . 113556 . 1 . 4 . 803:=2))(pwdlastset=131932198595370000)(|(!lastlogontimestamp=*)((lastlogontimestamp=*)(lastlogontimestamp=131932198595370000))) 在线查询当前域中的计算机(仅显示名称和操作系统): AdFind -sc计算机_活动名称操作系统 查询当前域中的所有计算机: AdFind-f ' object category=计算机' 查询当前域中的所有计算机(仅显示名称和操作系统): ad find-f ' object category=computer '名称操作系统 查询域中的所有用户: AdFind-用户名 查询所有GPO: AdFind -sc gpodmp 或者 AdFind -gpo 注: 查询GPO对应于前面的文章《域渗透——利用GPO中的计划任务实现远程执行》。 0x04 小结 介绍了各种域中普通用户获取DNS记录的方法,适用于不同的环境。在实际使用过程中,AdFind的查询效率在某些情况下较低。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子