本文为翻译文章,原文链接见文末。(翻译为脉搏首发)

一般来说,攻击者在行动过程中经常需要面对诸多的挑战,例如:

  • 克服网络障碍(网络策略、分段等)。在“隐形模式”下完成各项操作,这样,就不会被逮到了。

应对这些挑战的一个好方法是,当试图创建一个能够跨越网络中各种障碍的隐蔽连接时,使用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通信相关推荐

  1. python抓取数据包_利用python-pypcap抓取带VLAN标签的数据包方法

    1.背景介绍 在采用通常的socket抓包方式下,操作系统会自动将收到包的VLAN信息剥离,导致上层应用收到的包不会含有VLAN标签信息.而libpcap虽然是基于socket实现抓包,但在收到数据包 ...

  2. python构造icmp数据包_如何在python中构造ICMP数据包

    为了学习,我目前正在尝试创建一个简单的python porgram来向某个设备发送ICMP ping数据包.为了开始,我查看了python模块Pyping:https://github.com/Akh ...

  3. 计算机网络考试数据包格式,计算机网络实验 分析ICMP协议数据包格式.doc

    计算机网络实验 分析ICMP协议数据包格式 实 验 报 告 实验课程名称 计算机网络实验 实验项目名称 分析ICMP协议数据包格式 年 级 08 专 业 电子信息科学与技术 学生姓名 郎子龙 学 号 ...

  4. java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程

    本发明涉及网络通讯领域,特别涉及一种基于Java语言的网络通讯数据包解析方法. 背景技术: 计算机系统和网络的大量普及使用使全球跨入了信息化时代.但是,正由于现代社会中几乎一切都在"计算机化 ...

  5. 应用层HTTP数据包的截获与还原技术的实现

    摘要:在因特网日益发展壮大的今天,万维网在其上的通信量已经超过90%,万维网信息的安全问题已经越来越被人们所重视,而作为万维网应用层核心协议的http协议是基础.当网络发生异常时,对网络上传输的数据进 ...

  6. java使用原始套接字技术进行数据包截获_Linux零拷贝技术,看完这篇文章就懂了...

    本文讲解 Linux 的零拷贝技术,云计算是一门很庞大的技术学科,融合了很多技术,Linux 算是比较基础的技术,所以,学好 Linux 对于云计算的学习会有比较大的帮助. 为什么需要零拷贝 传统的 ...

  7. java tcp 自定义数据包_通过TCP接收数据包

    如果您想要使用标识字段,则不使用标准TCP . 对于应用程序,TCP连接呈现为流 . 您无权访问基本数据包 . 此外,在标准TCP连接中,标识字段是随机的16位字段 . 0x0d没有填充此宽度,很可能 ...

  8. cisco 交换机 获取 转发表_转发表是分组交换网中交换机工作的依据,一台交换机要把接收到的数据包正确地传输到目的地,它必须获取数据包中的________。...

    [判断题]有学者认为干旱地区容易产生一神教 [论述题]图中所示的带式运输机,原设计方案 A 各部分承载能力正好满足工作要求.装配时错装成方案 B . 试问: ( 1 )装错后的方案 B 能否采用?为什 ...

  9. IP数据包格式(ICMP协议与ARP协议)

    这里写目录标题 IP数据包格式 网络层的功能 IP数据包格式 ICMP协议 ping 广播域 ARP协议(地址解析协议) 无故ARP ARP工作原理: ARP报文 查看arp缓存表(静态arp和动态a ...

最新文章

  1. CAE+VBR如何提升用户体验?
  2. 转 Django+Bootstrap练习--我的类博客系统开发
  3. 方立勋_30天掌握JavaWeb_Cookie
  4. php写不了php,php写入内存不足怎么办
  5. 编程的7个主要步骤:
  6. 自定义控件省市区:仿苹果级联菜单
  7. 打印机显示脱机使用打印机不能打印
  8. printf和sprintf
  9. CognitiveJ一个Java的人脸图像识别开源分析库
  10. python达梦数据库_Python 封装 DM 达梦 数据库操作(使用类封装基本的增删改查)...
  11. android9 三星 港版,三星S9+官方港版安卓9固件系统线刷包:TGY-G9650ZHU4CSE7
  12. 美团面试-2016校园招聘
  13. 电容式计算机键盘的按键下,计算机键盘开关
  14. C语言入门(一代小白被迫被拔苗助长)
  15. 利用gitee仓库的流水线功能实现Java项目的自动化部署
  16. Java 数组元素倒序的三种方式
  17. Android自定义权限CVE漏洞分析 (IEEE论文)
  18. 熊猫烧香的病毒制作源码
  19. 【软件与系统安全笔记】一、引入
  20. android计算器弹窗,【Android 开发-kotlin】计算器+分享页面demo

热门文章

  1. php 两个符号怎么打,怎么打出圈2符号
  2. 聚类算法的java实现_聚类算法之BIRCH(Java实现)
  3. charles 华为手机使用_华为手机EMUI9.0健康使用手机怎么用?如何控制手机使用时长?...
  4. 界面设计方法(2)— 5.功能按钮设计(新增,查询)
  5. 作者:王雨华(1970-),男,中国科学院昆明植物研究所研究员、副所长
  6. 大数高精加减乘除(洛谷P1601、P2142、P1303、P1480题题解,Java语言描述)
  7. 坑爹的Java除法取整(记洛谷P5709题WA的经历,Java语言描述)
  8. python3 使用 pi3 安装软件时候,报错找不到 SSL 附解决方法
  9. 京东商品及评论爬虫(selenium)
  10. 洛谷P4831 Scarlet loves WenHuaKe