icmp后门的编写
1 關于icmp的介紹
???? ICMP 的全稱為(Internet Control Message Protocal)。它是一種差錯報告機制,可以被用來向目的主機報告或者請求各種網絡信息。這些信息包括回送應答(ping),目的地不可達,源站抑制,回送請求,掩碼請求和掩碼應答,還有是路由跟蹤等。這些信息是用ICMP數據報報頭中一個字節長度的類型碼來區別的。
??? ICMP協議有一個特點是它是無連結的,是由IP模塊實現。由于IP層協議是一種點對點的協議,而非端對端的協議,它提供無連接的數據報服務,沒有端口的概念,因此,我們只需要設置IP地址就能發送ICMP數據。我們可以在ICMP包中添加數據進行發送,就像利用TCP連接發送數據那樣。
??? ICMP的數據報是封裝在IP報頭里的。與其它協議的數據報一樣,它也是由報頭加上數據部分構成的,其報頭的格式一個結構結構來表示:(要注意里面的順序不能搞錯)
typedef struct _ihdr
{
BYTE i_type;//8位類型
BYTE i_code; //8位代碼
USHORT i_cksum;//16位校驗和
USHORT i_id;//標識號
USHORT i_seq;//報文序列號
ULONG timestamp;//時間截
} IcmpHeader;
理論上的ICMP報文最多可以攜帶65500byte的數據。
2 icmp可以穿透防火墻的原因
??? 當我們ping別人時,我們發出的是類型為8的ICMP數據包,而別人收到這個數據包就會返回一個類型為0的ICMP數據包。防火墻允許我們ping別人,實際上就是允許類型為8的ICMP包出去同時允許類型為0的ICMP包進來。而別人ping我們時,發給我們的是類型為8的ICMP數據包,這時這個數據包就會被防火墻攔截了。
??? 防火墻允許自己ping別人,就一定會讓類型為8的ICMP包出去和讓類型為0的ICMP包進來。所以,把帶有命令的ICMP包偽裝成類型為0的ICMP包,防火墻就以為是你ping別人后返回的ICMP包,這個包就可以進來了。而帶有執行結果的ICMP包我們就把它做成類型為8的發出去,防火墻會以為你想ping別人,那么這個包也就可以出去了。這樣就可以穿透防火墻了哦。
3 icmp后門的整體思路
??? 首先,我們要自己構造ICMP數據包,然后往數據包的后面添加上我們要遠端主機執行的命令再把數據包發送到遠端主機。遠端主機要想收到我們的數據包,這時就要用到socket raw編程,也就是創建一個sniff來嗅探ICMP類型的數據包。收到數據包后,要進行解包,把ICMP數據包后面的命令提取出來,然后處理執行。再把執行的結果又放進一個ICMP數據包里,再發回給客戶端。客戶段把結果提取出來,打印在屏幕上。這就是基本的實現原理。
4??? 測試環境:
服務端:xpsp3??? 192.168.1.55
客戶端: xpsp3??? 192.168.1.66
http服務器 win7?? 192.168.1.100
???? ICMP 的全稱為(Internet Control Message Protocal)。它是一種差錯報告機制,可以被用來向目的主機報告或者請求各種網絡信息。這些信息包括回送應答(ping),目的地不可達,源站抑制,回送請求,掩碼請求和掩碼應答,還有是路由跟蹤等。這些信息是用ICMP數據報報頭中一個字節長度的類型碼來區別的。
??? ICMP協議有一個特點是它是無連結的,是由IP模塊實現。由于IP層協議是一種點對點的協議,而非端對端的協議,它提供無連接的數據報服務,沒有端口的概念,因此,我們只需要設置IP地址就能發送ICMP數據。我們可以在ICMP包中添加數據進行發送,就像利用TCP連接發送數據那樣。
??? ICMP的數據報是封裝在IP報頭里的。與其它協議的數據報一樣,它也是由報頭加上數據部分構成的,其報頭的格式一個結構結構來表示:(要注意里面的順序不能搞錯)
typedef struct _ihdr
{
BYTE i_type;//8位類型
BYTE i_code; //8位代碼
USHORT i_cksum;//16位校驗和
USHORT i_id;//標識號
USHORT i_seq;//報文序列號
ULONG timestamp;//時間截
} IcmpHeader;
理論上的ICMP報文最多可以攜帶65500byte的數據。
2 icmp可以穿透防火墻的原因
??? 當我們ping別人時,我們發出的是類型為8的ICMP數據包,而別人收到這個數據包就會返回一個類型為0的ICMP數據包。防火墻允許我們ping別人,實際上就是允許類型為8的ICMP包出去同時允許類型為0的ICMP包進來。而別人ping我們時,發給我們的是類型為8的ICMP數據包,這時這個數據包就會被防火墻攔截了。
??? 防火墻允許自己ping別人,就一定會讓類型為8的ICMP包出去和讓類型為0的ICMP包進來。所以,把帶有命令的ICMP包偽裝成類型為0的ICMP包,防火墻就以為是你ping別人后返回的ICMP包,這個包就可以進來了。而帶有執行結果的ICMP包我們就把它做成類型為8的發出去,防火墻會以為你想ping別人,那么這個包也就可以出去了。這樣就可以穿透防火墻了哦。
3 icmp后門的整體思路
??? 首先,我們要自己構造ICMP數據包,然后往數據包的后面添加上我們要遠端主機執行的命令再把數據包發送到遠端主機。遠端主機要想收到我們的數據包,這時就要用到socket raw編程,也就是創建一個sniff來嗅探ICMP類型的數據包。收到數據包后,要進行解包,把ICMP數據包后面的命令提取出來,然后處理執行。再把執行的結果又放進一個ICMP數據包里,再發回給客戶端。客戶段把結果提取出來,打印在屏幕上。這就是基本的實現原理。
4??? 測試環境:
服務端:xpsp3??? 192.168.1.55
客戶端: xpsp3??? 192.168.1.66
http服務器 win7?? 192.168.1.100
總結
- 上一篇: #pragma预处理命令
- 下一篇: Raw Socket编程