渗透测试-前后端加密分析之RSA+AES

news/2024/12/23 6:53:46/

本文是高级前端加解密与验签实战的第8篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA与AES加密来爆破登录。

由于RSA加解密有长度限制,以及解密速度等问题,所以如https等协议都是用非对称加密对称加密的密钥,然后用对称加密算法来加密数据。本关卡就是用RSA来加密AES的key和iv,用AES来加密表单数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分析

直接Submit,观察数据包发现请求包和响应包AES加密的key和iv都被加密了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查看源码,RSA的key是通过请求/crypto/js/rsa/generator路径获取的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AES的加密方法为AES-GCM

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

流程图如下:

开始
加载页面
获取RSA密钥对
从服务器获取公钥和私钥
将PEM格式的公钥和私钥转换为CryptoKey对象
生成随机AES密钥与IV
使用RSA-OAEP加密AES密钥与IV
使用Encrypt函数用AES-GCM方式加密提交的数据
发送加密数据到服务器
接收服务器响应
使用Decrypt函数用RSA与AES-GCM解密接收的数据
显示解密后的数据

序列+热加载

本文和上文遇到一样的问题,本来打算用第三个请求来解密响应包的,最后选择了使用mirrorHTTPFlow函数来解密。

上文中只能看到登陆成功,但不知道账号密码是什么。这次写了个解密函数解密请求包,不管怎么说,能跑就行。

热加载代码如下:

// RSA-OAEP 加密
rsaEncrypt = (pem, data) => {data = codec.RSAEncryptWithOAEP(pem, data)~data = codec.EncodeBase64(data)return data
}
// AES-GCM 加密
aesEncrypt = (key, iv, data) => {encryptedData = codec.AESGCMEncryptWithNonceSize12(key, data, iv)~encryptedData = codec.EncodeBase64(encryptedData)return encryptedData
}
// 分割参数的函数
splitParams = (params) => {pairs := params.SplitN("|", 2)return pairs
}
// 主函数
encrypt = (params) => {pairs := splitParams(params)key =  randstr(16)iv = randstr(12)data = aesEncrypt(key, iv, pairs[1])encryptIV = rsaEncrypt(pairs[0], iv)encryptKey = rsaEncrypt(pairs[0], key)body = f`{"data":"${data}","iv":"${iv}","encryptedIV":"${encryptIV}","encryptedKey":"${encryptKey}"}`return body
}
// 解密函数
mirrorHTTPFlow = (req, rsp, params) => {// 获取私钥pem = params.privateKey// 切割响应中的数据,作为 JSON 加载body = json.loads(poc.GetHTTPPacketBody(rsp))// 提取 IV、KEY 和 DATAdata = body.dataiv = body.encryptedIVkey = body.encryptedKey// 使用 RSA-OAEP 解密 IV 和 KEYiv = codec.RSADecryptWithOAEP(pem, codec.DecodeBase64(iv)~)~key = codec.RSADecryptWithOAEP(pem, codec.DecodeBase64(key)~)~// 使用 AES-GCM 解密data = codec.AESGCMDecryptWithNonceSize12(key, codec.DecodeBase64(data)~, iv)~return string(data)
}

使用Yakit的序列功能,效果如下,在提取数据中显示了未加密的请求和响应的内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

爆破效果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


http://www.ppmy.cn/news/1557397.html

相关文章

python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django

windows首先安装rabbitmq 点击参考安装 1、环境介绍 Python 3.10.16 其他通过pip安装的版本(Django、pika、celery这几个必须要有最好版本一致) amqp 5.3.1 asgiref 3.8.1 async-timeout 5.0.1 billiard 4.2.1 celery 5.4.0 …

【文档搜索引擎】使用多线程优化流程

枚举所有文件 // 1. 枚举出所有的文件 ArrayList<File> files new ArrayList<>(); enumFile(INPUT_PATH, files);直接调用 enumFile 方法即可 循环遍历文件&#xff08;多线程&#xff09; 此处为了能够通过多线程来制作&#xff0c;所以直接使用线程池来完…

内核执行时动态的vmlinux的反汇编解析方法及static_branch_likely机制

一、背景 在之前的博客里&#xff0c;我们讲到了tracepoint&#xff08;内核tracepoint的注册回调及添加的方法_tracepoint 自定义回调-CSDN博客&#xff09;和kprobe&#xff08;获取任意一个进程的共享内存的fd对应的资源&#xff0c;增加引用&#xff0c;实现数据的接管——…

Numpy数组的三种主要索引方式讲解及源码示例

1、整数索引和切片 NumPy中可以通过整数索引和切片来访问和修改数组中的元素&#xff0c;数组的维度不同、整数索引和切片的用法也会有所不同。 对于一维数组来说&#xff0c;整数索引和切片的用法与Python列表中索引和切片的用法相同&#xff1b;对于二维数组来说&#xff0c…

k8s-1.28.1证书更新到100年-cenots7.9

一、查看信息 # cat /etc/redhat-release # kubeadm version k8s环境是通过kubeadm进行安装的。 二、安装依赖工具 # yum groupinstall "Development Tools" -y # yum install gcc make -y # yum install rsync jq -y 三、下载相应版本的k8s包 ## 下载地址&…

迅为RK3576开发板接口丰富4G/5G、wifi6、多网口、NPU等

典型应用方向iFPD、工业控制及网关、云终端、人脸识别设备、车载中控、商显主要特性 ARM 64位高性能八核通用处理器&#xff0c;丰富的PCIE/USB3.0/SATA/GMAC等各类高速及CAN FD/DSMC/UART/SPI/I2C/I3C等低速扩展接口&#xff0c;计算及扩展能力通用性强&#xff0c;一个平台可…

Houdini abc 导入 maya uv无法识别

参考&#xff1a;Houdini导出abc 至maya UV 无法识别_houdini导出abc没有uv-CSDN博客 从maya导入到houdini的uv默认是vertex层级的&#xff0c;而在maya中&#xff0c;uv是在point层级的&#xff1b;因此在houdini中导出abc时应将uv转为点层级&#xff0c;使用vertexsplit节点&…

开源轮子 - EasyExcel01(核心api)

EasyExcel01 - 核心api 本文整理自掘金大佬 - 竹子爱熊猫 https://juejin.cn/post/7405158045662576640 文章目录 EasyExcel01 - 核心api一&#xff1a;初相识EasyExcel1&#xff1a;写入excel入门2&#xff1a;读取Excel入门 二&#xff1a;数据模型注解1&#xff1a;读写通用…