ICMP后门

前言

第一篇:Python3实现ICMP远控后门(上)

第二篇:Python3实现ICMP远控后门(上)_补充篇

在上两篇文章中,详细讲解了ICMP协议,同时实现了一个具备完整功能的ping工具,完整的代码发布在https://github.com/qiyeboy/LuLunZi/blob/master/NetWork/ping.py中。本次讲的是嗅探,为什么要讲嗅探呢?和ICMP后门有什么关系呢?本篇的干货有点多。。。

第一节 ICMP后门结构

设计的ICMP后门采用的是典型的C/S结构,分为客户端和服务端,根据客户端和服务端的位置又分为正向连接和反向连接。对于TCP和UDP后门来说,正向和反向连接是有很大区别的,反向连接的目的之一就是为了规避正向连接时防火墙拦截端口绑定的问题。下面先讲一下正向连接和反向连接的概念。早期采用的是正向连接,现在更常见的是反向连接。

正向连接

正向连接时,server位于受控端,拥有公网ip,同时监听端口,等待连接。正向连接为什么逐渐被淘汰了呢?有几点原因,首先受控端的server程序需要绑定端口,容易被主机上的防火墙拦截发现,例如下图的情景。

接着是由于随着连接的控制端增多,受控端负载过大,易被发现,而且不适合大规模控制。最后是假如受控端是在内网中,正向连接就失去作用。

反向连接

 

反向连接就很好的规避了正向连接中的问题,受控端可以有公网ip,也可以没有,需要控制端拥有一个公网的主机即可,一般都是用VPS。

ICMP协议和TCP,UDP协议有很大的区别,ICMP没有端口的概念,就是说它不是通过端口来识别ICMP发送与接收进程的,也就没有端口绑定被拦截的问题,也避开了通过端口反查进程的检测手段

正是ICMP协议没有端口的概念,也就无法直接建立两台主机上ICMP应用程序的通信,记住我说的是应用程序。大家肯定会疑问ping不就可以吗?其实ping本质上是位于系统内核。下面通过一张图来说明操作系统对icmp的处理。

假如用我写的ping.py程序,在受控端ping控制端,ICMP请求包通过网络传到控制端,在控制端的系统内核中,就直接生成ICMP响应返回给受控端的ping.py,根本不会由控制端的ping.py响应。也就是说ping.py本质上是ICMP协议的客户端,而不是服务端,服务端始终是主机的系统内核来完成了。

为难的地方也就出现了?服务端不受控制,那我们如何完成受控端应用程序和控制端应用程序的通信呢?其实不一定让两者直接通信,可以间接通信,只要受控端和控制端知道互相发送的内容不就可以了,这就是下一节的知识点

第二节 “嗅探”黑科技

嗅探不知道大家熟不熟悉?大家肯定用过wireshark抓包吧,这就是嗅探的典型应用。虽然受控端发来的ping包,无法直接发给控制端的ping.py,但是控制端可以通过嗅探的方式抓取传输过来的ping包,获取里面的内容,然后主动发响应包给受控端,同理受控端也是如此。ICMP后门的通信结构就变成了下图所示的样子。

windows和linux平台嗅探ICMP的方式和编程内容差距有点大,linux相对简单。

windows平台嗅探ICMP

以嗅探ICMP数据包为例,代码如下,请详细看注释哈。

HOST="10.170.19.126"

# 创建原始套接字,然后绑定在公开接口上。在windows上使用ip协议

if os.name == "nt":

    socket_protocol = socket.IPPROTO_IP

else:

    socket_protocol = socket.IPPROTO_ICMP

rawSocket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol)

# 该选项可以让多个socket对象绑定到相同的地址和端口上

rawSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

我们调用bind方法,来绑定socket

rawSocket.bind((HOST, 0))

#通过setsockopt函数来设置数据保护IP头部,IP头部我们就可以接收到

rawSocket.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

# 在WIN平台上,需要设置IOCTL以启用混杂模式

if os.name == "nt":

    rawSocket.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

  

在上述代码中,我们主要说的是bind,bind HOST其实绑定的是HOST所对应的网卡,一台电脑其实可以多个网卡的,包括虚拟的。在windows中,需要我们将网卡设置为混杂模式,这样就可以接受到所有经过本网卡的数据包。至于混杂模式的解释,百度百科中有。

经过上面的设置,raw socket就可以嗅探了,下面把嗅探的内容打印出来,代码如下:

while True:

        pkt = rawSocket.recvfrom(2048)

        print(pkt)

  

通过管理员权限运行这个程序,ping一下自己的ip,看到ICMP报文被抓住了。

Linux平台嗅探 ICMP

嗅探ICMP数据包,代码如下,请详细看注释哈。

#设置监听ICMP数据包

rawSocket = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)

#通过setsockopt函数来设置数据保护IP头部,IP头部我们就可以接收到

rawSocket.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

while True:

            pkt= rawSocket.recvfrom(2048)

            print(pkt)

  

最后

如果觉得本文还可以,一定记得推荐哟。欢迎关注我的公众号。

回复【1】:领取 Python数据分析 教程大礼包
回复【2】:领取 Python Flask 全套教程 
回复【3】:领取 机器学习 全套教程

Python3实现ICMP远控后门(中)之“嗅探”黑科技的更多相关文章

  1. Python3实现ICMP远控后门(下)之“Boss”出场

    ICMP后门 前言 第一篇:Python3实现ICMP远控后门(上) 第二篇:Python3实现ICMP远控后门(上)_补充篇 第三篇:Python3实现ICMP远控后门(中)之"嗅探&qu ...

  2. Python3实现ICMP远控后门(上)_补充篇

    ICMP后门(上)补充篇 前言 在上一篇文章Python3实现ICMP远控后门(上)中,我简要讲解了ICMP协议,以及实现了一个简单的ping功能,在文章发表之后,后台很多朋友留言,说对校验和的计算不 ...

  3. Python3实现ICMP远控后门(上)

    这几天一直在研究远控木马的一些通信协议,比如TCP,UDP,ICMP,DNS,HTTP等等,对于TCP,UDP这两种就不讲解了,因为太常见了. 大家可能对采用ICMP,DNS的木马不是很熟悉,其实这两 ...

  4. 用nc+简单bat/vbs脚本+winrar制作迷你远控后门

    前言 某大佬某天和我聊起了nc,并且提到了nc正反向shell这个概念. 我对nc之前的了解程度仅局限于:可以侦听TCP/UDP端口,发起对应的连接. 真正的远控还没实践过,所以决定写个小后门试一试. ...

  5. 新手玩CSS中的一些黑科技

    哎哎 1.鼠标移进网页里,不见了= = *{ cursor: none!important; } 2.简单的文字模糊效果 *{ color: transparent; text-shadow: #11 ...

  6. 2019-9-11:渗透测试,Kill远控软件,初接触

     初步使用Kill远控软件,使win7靶机被远控 该文章仅供学习,利用方法来自网络文章,仅供参考   1,打开运行Kill,选择系统设置,设置监听端口,通讯密码,点击保存设置 2,点击服务生成,上线参 ...

  7. 【逆向&编程实战】Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控

    文章作者:MG1937 QQ:3496925334 CNBLOG:ALDYS4 未经许可,禁止转载 前言 说起SpyNote大家自然不陌生,这款恶意远控软件被利用在各种攻击场景中 甚至是最近也捕获到了 ...

  8. 使用kali生成远控payload

    kali linux中的metasploit框架是优秀的渗透框架之一,今天记载一下使用kali生成windows远控木马的过程 生成payload使用的工具是MSFVenom,我们输入msfvenom ...

  9. 【原创】利用Office宏实现powershell payload远控

    本文将演示使用Veil-Evasion生成远控所需要的payload以及监听器,然后使用MacroShop生成payload 相关的VBA代码,最后演示将VBA代码写入.doc文本文档的宏中. 环境: ...

随机推荐

  1. Eclipse集成Android_NDK

         Eclipse集成Android NDK说明 2          为什么要用NDK? 以下内容引用自<Pro Android Games> Some Java develo ...

  2. UE4 Hello World 创建第一个UE4工程

    首先先熟悉几个UE4常用的类 AGameMode(控制整个项目的逻辑) The GameMode defines the game being played. It governs thegame r ...

  3. CCRenderBuffer初始化中的render state参数

    绘制纹理三角形的渲染状态(render state)已经被CCSprite基类设置过了,所以你可以简单的将self.renderState传递过去就可以了. 渲染状态是混合模式(blend mode) ...

  4. i++是否原子操作?并解释为什么???????

    不是原子操作.理由: 1.i++分为三个阶段: 内存到寄存器 寄存器自增 写回内存 这三个阶段中间都可以被中断分离开.  2.++i首先要看编译器是怎么编译的, 某些编译器比如VC在非优化版本中会编译 ...

  5. TCP的核心系列 — ACK的处理(二)

    本文主要内容:tcp_ack()中的一些细节,如发送窗口的更新.持续定时器等. 内核版本:3.2.12 Author:zhangskd @ csdn 发送窗口的更新 什么时候需要更新发送窗口呢? (1 ...

  6. Swift之GCD使用指南1

    Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Dispatch Que ...

  7. PS 图像调整算法— —渐变映射

    这个调整简单来说就是先建立一张lookup table, 然后以图像的灰度值作为索引,映射得到相应的颜色值.图像的灰度值是由图像本身决定的,但是lookup table 却可以各种各样,所以不同的lo ...

  8. Android FrameWork浅识

    接收讯息及事件 储存共享数据 处理UI互动的事情 幕后服务(播放背景音乐) 在框架的手中,它的生命的周期完全由框架来控制,new也是由框架.它的逻辑调用则是自己实现,确保强龙的地位 框架反向来控制相应 ...

  9. obj-c编程13:归档

    这篇归档内容的博文也挺有趣的,笨猫对好玩的东西一向感兴趣啊!如果用过ruby就会知道,obj-c里的归档类似于ruby中的序列化概念,不过从语法的简洁度来说,我只能又一次呵呵了. 下面大家将会看到2种 ...

  10. azkaban的安装部署

    一.所需环境 1,JDK 2,HADOOP 4,mysql 3,HIVE 二.安装azkaban 1,安装git命令: yum install git 2,下载azkaban源码:git clone ...