Python3实现ICMP远控后门(上)
?這幾天一直在研究遠控木馬的一些通信協(xié)議,比如TCP,UDP,ICMP,DNS,HTTP等等,對于TCP,UDP這兩種就不講解了,因為太常見了。
?
大家可能對采用ICMP,DNS的木馬不是很熟悉,其實這兩種協(xié)議在木馬通信上很流行,特點是比較隱蔽,不容易被封鎖。HTTP協(xié)議主要是用在以大型網(wǎng)站作為C&C服務器的場景,例如之前就有使用twitter作為?C&C服務器。
?
本次就以ICMP協(xié)議進行分析,并使用Python開發(fā)出一個ICMP遠控后門,在寫這篇文章的之前,我感覺大家對ICMP協(xié)議肯定不會很了解,因此將ICMP后門的實現(xiàn)分成幾篇進行講解,循序漸進。本篇就講解一下ICMP協(xié)議的內(nèi)容,并使用Python實現(xiàn)一個簡單的ping。
?
?
第一節(jié)?ICMP協(xié)議是什么鬼?
?不知道大家有沒有ping過百度,用來測試自己的網(wǎng)絡(luò)是不是暢通,如下圖所示。
?
?
ping命令使用的就是ICMP協(xié)議,在ping百度的過程中,咱們使用wireshark抓一下包,這樣比較直觀。如下圖所示,ICMP協(xié)議是典型的一問一答模式,本機向百度服務器發(fā)送ICMP請求包,如果請求包成功到達目的地,百度服務器則回應ICMP響應包。
?
?
第二節(jié)?ICMP協(xié)議及報文格式
?
ICMP(Internet Control Message Protocol)是IPv4協(xié)議族中的一個子協(xié)議,用于IP主機、路由器之間傳遞控制消息??刂葡⑹窃诰W(wǎng)絡(luò)通不通、主機是否可達、路由是否可用等網(wǎng)絡(luò)本身的消息。ICMP報文以IP協(xié)議為基礎(chǔ),其報文格式如下:
?
?
如上圖所示,ICMP協(xié)議在實際傳輸中數(shù)據(jù)包:20字節(jié)IP首部 + 8字節(jié)ICMP首部+ 1472字節(jié)<數(shù)據(jù)大小>38字節(jié)。對于ICMP首部細分為8位類型+8位代碼+16位校驗和+16位標識符+16位序列號,其中類型的取值如下,我們比較關(guān)注的是請求(取值為8)和應答(取值為0)。
?
?
第三節(jié)?ping實現(xiàn)
?
在上面我們簡單講解了ICMP的報文格式,接下來我們使用Python3根據(jù)報文格式簡單實現(xiàn)一下ping功能,主要用到了raw socket技術(shù),即原始套接字,使用struct pack方法打包ICMP報文。代碼實現(xiàn)如下所示:
?
原始套接字的初始化,使用如下代碼:
????socket.socket(socket.AF_INET,socket.SOCK_RAW, socket.getprotobyname('icmp'))
里面比較復雜的是計算校驗和,計算方法如下:
ICMP首部和數(shù)據(jù)整個內(nèi)容看成16比特整數(shù)序列(按網(wǎng)絡(luò)字節(jié)順序),
對每個整數(shù)分別計算其二進制反碼,然后相加
再對結(jié)果計算一次二進制反碼而求得
?
測試ping效果?
?
注意使用管理員權(quán)限運行Python腳本,直接ping 百度的地址?220.181.112.244
同時打開wireshark抓包。
?
?
最后?完整代碼
ping的完整代碼,請關(guān)注公眾號,查看 原文。記得推薦喲。
?
轉(zhuǎn)載于:https://www.cnblogs.com/qiyeboy/p/9017921.html
總結(jié)
以上是生活随笔為你收集整理的Python3实现ICMP远控后门(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LR 场景选项配置--笔记
- 下一篇: 在 Visual Studio 中使用