日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

recvfrom 无法接收 icmp 差错数据包_利用ICMP隧道技术实现C2通信

發布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 recvfrom 无法接收 icmp 差错数据包_利用ICMP隧道技术实现C2通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文為翻譯文章,原文鏈接見文末。(翻譯為脈搏首發)

一般來說,攻擊者在行動過程中經常需要面對諸多的挑戰,例如:

  • 克服網絡障礙(網絡策略、分段等)。在“隱形模式”下完成各項操作,這樣,就不會被逮到了。

應對這些挑戰的一個好方法是,當試圖創建一個能夠跨越網絡中各種障礙的隱蔽連接時,使用ICMP隧道技術。

在計算機網絡中,隧道技術通常是將一個網絡協議封裝為另一個網絡協議的有效載荷(payload,即傳輸的數據),詳情請參閱這篇文章。

ICMP(Internet Control Message Protocol)是Internet協議簇中的一個支持協議。網絡設備可以使用它來發送錯誤消息和操作信息。其中,最常見的ICMP消息可能也是最常用的消息就是Ping消息。

實際上,Ping是一種控制消息,也是ICMP(Internet Control Message Protocol)協議的一個組成部分。

Ping消息可以從網絡中的一個節點發送到另一個節點。該消息是由第2層和第3層報頭(由OSI模塊定義的MAC和IP報頭)以及一個特殊的ICMP數據包構成的。發送節點需要設置目的地參數,如果目的地節點收到該消息,它會立即返回該消息。

下面是ping數據包的IP數據報格式:

ICMP隧道可以通過修改有效載荷數據來實現,這樣,它就能在其中存放我們想要發送的數據了。

通常情況下,它會包含默認的有效載荷數據,如ASCII字符串“abcdefghijklmnopqrstuvwabcdefghi”等。

Wireshark——ICMP數據包及有效載荷數據

如果將HTTP數據包封裝在有效載荷數據中的話,就是這種方法最常用的一種方式——WiFi蹭網。

此外,這可以通過使用代理服務器來實現,代理服務器會等待ping消息,并根據需要發送它們(例如,作為HTTP)。

借助于正確的工具(如ptunnel),我們可以將要發送到Google的HTTP數據包封裝到ping數據包中(即有效載荷數據內)。然后,將其發送到作為目的地的代理服務器IP地址處。

注意:該IP并非HTTP數據包的目的地(HTTP數據包的IP目的地應該是http://www.google.com域名對應的IP地址)

由于機場的路由器通常允許ICMP流量流出網絡,因此,它會將Ping消息傳遞給代理服務器。

代理服務器接收Ping數據包后,會將其分成兩部分:

  • ICMP頭部。包含原始HTTP消息的有效載荷。

注意:代理發送給Google的HTTP數據包的源IP地址應該是代理服務器本身的IP地址,而不是筆記本電腦的IP地址(或機場的路由器的地址......),因為Google應該回復的對象是代理,而不是您。

這可能是ICMP隧道最常見的用法,但作為一名紅隊成員,我發現這的確是一種逃避防火墻和其他網絡策略的“隱身”方法,所以,它是非常有用的。

上面所說的這一切都是可能的,因為Ping消息可以通過“Pay-for-WiFi”局域網中的路由器進入互聯網。

那么,為什么人們會允許這種情況發生呢?

作為一名前網絡工程師,我可以告訴大家的是,在嘗試理解和解決非常復雜的網絡問題時,Ping是不可或缺的。

大多數網絡故障排除過程都是從測試信息是否能夠從一個節點傳送到另一節點開始的,即弄清楚:這條信息路線是否可行?網絡組件是否處于可用狀態并且能夠正常響應?

面對這些問題,Ping消息可以用最簡單的方式提供答案,當然,它還能夠用來解決許多其他方面的疑問。

實際上,這些故障排除工作幾乎每天都會遇到。這就意味著,相關的網絡配置必須允許將網絡上的Ping消息從一個節點傳輸到另一個節點。同時,所有防火墻策略、路由器策略和交換機ACL(訪問列表)都必須允許ICMP消息從任何網絡組件傳輸到任何其他組件。

這就是為什么Ping消息幾乎不會受到網絡分段和網絡策略方面的影響的原因。

既然如此,在網絡中創建連接時,為了克服網絡分段和網絡策略等障礙,可以讓代理使用ICMP隧道來連接C&C服務器——這是一個非常棒的主意。

為此,我用Python編寫了一個簡單的POC代碼,以用來演示其工作機制。

請注意:

-該PoC要求安裝Scapy(實際上,Scapy是一個很好的學習工具)

-該PoC沒有涉及分段處理。例如,如果來自代理的應答大于允許的有效載荷數據的上限,則會對其進行分段。

該PoC還包含了一個C&C服務器和一個代理。其中,C2服務器將通過ICMP隧道向代理發送指令,代理也將通過ICMP隧道來返回相應的結果。

C2.py

#!/usr/bin/env python3from scapy.all import * def main(): while True: command = raw_input('# Enter command: ') # build the ICMP packet with the command as the payload pinger = IP(dst="localhost")/ICMP(id=0x0001, seq=0x1)/command send(pinger) # wait for the ICMP message containing the answer from the agent # to be received rx = sniff(count=1, timeout=2) # use this if agent is not on local machine: rx = sniff(filter="icmp

總結

以上是生活随笔為你收集整理的recvfrom 无法接收 icmp 差错数据包_利用ICMP隧道技术实现C2通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。