首页 > 其他分享 >渗透测试-前后端加密分析之RSA+AES

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

时间:2024-12-22 17:09:27浏览次数:7  
标签:AES 加密 -- RSA iv key data

本文是高级前端加解密与验签实战的第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

流程图如下:

graph TD; A[开始] --> B(加载页面); B --> C{获取RSA密钥对}; C -- 是 --> D(从服务器获取公钥和私钥); D --> E(将PEM格式的公钥和私钥转换为CryptoKey对象); E --> F(生成随机AES密钥与IV); F --> G(使用RSA-OAEP加密AES密钥与IV); G --> H(使用Encrypt函数用AES-GCM方式加密提交的数据); H --> I(发送加密数据到服务器); I --> J(接收服务器响应); J --> K(使用Decrypt函数用RSA与AES-GCM解密接收的数据); K --> L(显示解密后的数据);

序列+热加载

本文和上文遇到一样的问题,本来打算用第三个请求来解密响应包的,最后选择了使用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 和 DATA
    data = body.data
    iv = body.encryptedIV
    key = body.encryptedKey
    
    // 使用 RSA-OAEP 解密 IV 和 KEY
    iv = 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的序列功能,效果如下,在提取数据中显示了未加密的请求和响应的内容:

爆破效果:

标签:AES,加密,--,RSA,iv,key,data
From: https://www.cnblogs.com/CVE-Lemon/p/18622268

相关文章

  • 支付算法加密和内网穿透原理和应用场景-----软件架构设计
    对称加密:加解密使用同一把钥匙不能在金融领域使用,一旦发送方或者接收方泄露密钥,就会造成严重后果非对称加密:加解密使用不同的钥匙发送方发送的密文用A钥匙加密,接收方用B钥匙解锁接收方用C钥匙加密响应信息,发送方用D钥匙看响应结果使用RSA算法较多什么是公钥私钥,......
  • 使用frida分析白盒aes,DFA攻击
    这次分析的app是:五菱汽车(8.2.1)登录,抓包发现请求体只有sd字段,看见加密的时候,可以先使用算法助手hookjava层所有加解密方法发现我们所需要的sd加密字段在java层hook不到,那加密算法应该是写在了so层,因为这个app是bb加固企业,得有脱壳机才能脱。jadx加载dex,直接搜"sd"发现这......
  • 爬虫Js逆向 -数据加密板块
    分析步骤:第一步分析是否为混淆JS        判断是否为混淆JS  看调用的堆栈名称是否简洁易懂  下图为非混淆​无混淆的情况下关键字(不可以很泛)   跟栈拦截器responseJSONparse hookdecrypt(本文讲的是非混淆的数据加密跟栈网站: 资讯-精灵数......
  • QT网盘笔记(日志,qss,加密)
    前言:本章为本人在学习QT网盘时学到的知识,在此记录。一、QT日志1、前因(1)网盘服务端需要记录每一个登陆者登录的时间,账号名,在遇到除操作错误的错误时候会统计到日志中,同时客户的意见反馈也写入其中。(2)加上互斥锁防止多线程写入时混乱。2、互斥锁    (1)定义:在多......
  • //需求//某系统的数字密码(大于0),比如1983,采用加密方式进行传输;//规则如下:先得到每位数
    //需求//某系统的数字密码(大于0),比如1983,采用加密方式进行传输;//规则如下:先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数;importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){//1.通过输入......
  • 美联储降息后,比特币惊险守住10万美元大关,加密货币市场整体下滑
    原文来源:美联储降息后,比特币惊险守住10万美元大关,加密货币市场整体下滑-币热网-区块链数字货币新闻消息资讯加密货币市场遭遇重挫,美联储降息引发连锁反应在本周四的交易中,加密货币市场经历了显著的下跌,跌幅高达7.5%。这一波动主要归因于美联储将联邦基金利率下调了25个......
  • 华为OD E卷(100分)31-敏感字段加密
    前言    工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老,没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练......
  • 渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)
    本文是高级前端加解密与验签实战的第6篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA加密来爆破登录。分析这里的代码跟上文的类似,但是加密的公钥是通过请求服务端获取的http://127.0.0.1:8787/crypto/js/rsa/generator由于密钥是服务端生......
  • PHP 简易的BASE64加密
    有这样一个有趣的公式:x<100; (x*53*17)%100=x;这个公司的原理:53*17=901,x*901,的数后2位数还是x;任何符合a*b=100*n+1的值都可以。根据这个原理就可以做一个简单的加密操作。比如要加密的数是26,使用(17*53)%100=78,加密后的值是78,在用(78*17)%100=26;这样53就是加密的密......
  • 密码学-RSA的学习
    密码学-RSA的学习前文1.历史1977年,三位数学家RonRivest、AdiShamir和LeonardAdleman设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法2.加密与解密mod就是进行取模运算,通俗来说就是求余数这个d...对d不是很解了3.密钥的生成通......