ICMP后門
前言
這幾天一直在研究遠(yuǎn)控木馬的一些通信協(xié)議拂酣,比如TCP秋冰,UDP,ICMP婶熬,DNS剑勾,HTTP等等光坝,對(duì)于TCP,UDP這兩種就不講解了甥材,因?yàn)樘R娏恕?/p>
大家可能對(duì)采用ICMP盯另,DNS的木馬不是很熟悉,其實(shí)這兩種協(xié)議在木馬通信上很流行洲赵,特點(diǎn)是比較隱蔽鸳惯,不容易被封鎖。HTTP協(xié)議主要是用在以大型網(wǎng)站作為C&C服務(wù)器的場(chǎng)景叠萍,例如之前就有使用twitter作為?C&C服務(wù)器芝发。
本次就以ICMP協(xié)議進(jìn)行分析,并使用Python開發(fā)出一個(gè)ICMP遠(yuǎn)控后門苛谷,在寫這篇文章的之前辅鲸,我感覺大家對(duì)ICMP協(xié)議肯定不會(huì)很了解,因此將ICMP后門的實(shí)現(xiàn)分成幾篇進(jìn)行講解腹殿,循序漸進(jìn)独悴。本篇就講解一下ICMP協(xié)議的內(nèi)容,并使用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的ping锣尉。
第一節(jié)?ICMP協(xié)議是什么鬼刻炒?
????不知道大家有沒有ping過(guò)百度,用來(lái)測(cè)試自己的網(wǎng)絡(luò)是不是暢通自沧,如下圖所示坟奥。
ping命令使用的就是ICMP協(xié)議,在ping百度的過(guò)程中拇厢,咱們使用wireshark抓一下包爱谁,這樣比較直觀。如下圖所示孝偎,ICMP協(xié)議是典型的一問一答模式访敌,本機(jī)向百度服務(wù)器發(fā)送ICMP請(qǐng)求包,如果請(qǐng)求包成功到達(dá)目的地邪媳,百度服務(wù)器則回應(yīng)ICMP響應(yīng)包捐顷。
第二節(jié)?ICMP協(xié)議及報(bào)文格式
ICMP(Internet Control Message Protocol)是IPv4協(xié)議族中的一個(gè)子協(xié)議,用于IP主機(jī)雨效、路由器之間傳遞控制消息迅涮。控制消息是在網(wǎng)絡(luò)通不通徽龟、主機(jī)是否可達(dá)叮姑、路由是否可用等網(wǎng)絡(luò)本身的消息。ICMP報(bào)文以IP協(xié)議為基礎(chǔ),其報(bào)文格式如下:
如上圖所示传透,ICMP協(xié)議在實(shí)際傳輸中數(shù)據(jù)包:20字節(jié)IP首部 + 8字節(jié)ICMP首部+ 1472字節(jié)<數(shù)據(jù)大小>38字節(jié)耘沼。對(duì)于ICMP首部細(xì)分為8位類型+8位代碼+16位校驗(yàn)和+16位標(biāo)識(shí)符+16位序列號(hào),其中類型的取值如下朱盐,我們比較關(guān)注的是請(qǐng)求(取值為8)和應(yīng)答(取值為0)群嗤。
第三節(jié) ping實(shí)現(xiàn)
在上面我們簡(jiǎn)單講解了ICMP的報(bào)文格式,接下來(lái)我們使用Python3根據(jù)報(bào)文格式簡(jiǎn)單實(shí)現(xiàn)一下ping功能兵琳,主要用到了raw socket技術(shù)狂秘,即原始套接字,使用struct pack方法打包ICMP報(bào)文躯肌。代碼實(shí)現(xiàn)如下所示:
原始套接字的初始化者春,使用如下代碼:
????socket.socket(socket.AF_INET,socket.SOCK_RAW, socket.getprotobyname('icmp'))
里面比較復(fù)雜的是計(jì)算校驗(yàn)和,計(jì)算方法如下:
ICMP首部和數(shù)據(jù)整個(gè)內(nèi)容看成16比特整數(shù)序列(按網(wǎng)絡(luò)字節(jié)順序)清女,
對(duì)每個(gè)整數(shù)分別計(jì)算其二進(jìn)制反碼钱烟,然后相加
再對(duì)結(jié)果計(jì)算一次二進(jìn)制反碼而求得
測(cè)試ping效果?
注意使用管理員權(quán)限運(yùn)行Python腳本,直接ping 百度的地址?220.181.112.244
同時(shí)打開wireshark抓包。
第四節(jié) 更多干貨
更多安全方面的干貨? ? ??請(qǐng)點(diǎn)擊我嫡丙,并關(guān)注