首页 > 其他分享 >渗透测试-前端验签绕过之SHA256+RSA

渗透测试-前端验签绕过之SHA256+RSA

时间:2024-12-14 16:43:00浏览次数:8  
标签:body 加密 RSA codec key 验签 SHA256

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

绕过

根据提示可以看出这次签名用了SHA2556和RSA两个技术进行加密。

查看源代码可以看到RSA公钥是通过请求服务器获取:

请求一下:http://127.0.0.1:8787/crypto/js/rsa/public/key ,可以看到公钥。

SHA256密钥位置:

Encrypt方法:

function Encrypt(word) {
    console.info(word);
    return  KEYUTIL.getKey(pubkey).encrypt(CryptoJS.HmacSHA256(word, key.toString(CryptoJS.enc.Utf8)).toString()); 
}

KEYUTIL.getKey(pubkey).encrypt是RSA1v15加密方法,在代码中可以看到先进行SHA265加密,然后再RSA加密。被加密的文本的格式同上文所示。

使用CyberChef加密:

替换请求,可以看到签名构造成功:

热加载

这是我写的热加载代码,通过beforeRequest劫持请求包,使用encryptData函数进行加密,getPubkey获取公钥,最终实现热加载自动签名功能。

getPubkey = func() {
    //通过请求动态获取公钥
    rsp, req = poc.HTTP(`GET /crypto/js/rsa/public/key HTTP/1.1
Host: 127.0.0.1:8787

    `)~
    body = poc.GetHTTPPacketBody(rsp) // 响应体
    return body
}

encryptData = (packet) => {
    body = poc.GetHTTPPacketBody(packet)
    params = json.loads(body)
    name = params.username
    pass = params.password
    key = "31323334313233343132333431323334"
    pemBytes = getPubkey() // 获取公钥

    signText = f`username=${name}&password=${pass}`
    sha256sign = codec.EncodeToHex(codec.HmacSha256(f`${codec.DecodeHex(key)~}`, signText)) // SHA256加密
    rsaSign = codec.EncodeToHex(codec.RSAEncryptWithPKCS1v15(pemBytes /*type: []byte*/, sha256sign)~) // RSA加密

    body = f`{"username":"${name}","password":"${pass}","signature":"${rsaSign}","key":"${key}"}`
    return string(poc.ReplaceBody(packet, body, false))
}


//发送到服务端修改数据包
// beforeRequest = func(req){
//     return encryptData(req)
// }

//调试用
packet = <<<TEXT
POST /crypto/sign/hmac/sha256/verify HTTP/1.1
Host: 127.0.0.1:8787
Content-Type: application/json
Content-Length: 179

{"username":"admin","password":"password"}
TEXT
result = (encryptData(packet))
print(result)

这次不调试了,直接请求看看效果,成功热加载自动签名:

插入临时字典爆破,可以看到正确密码为admin123。

标签:body,加密,RSA,codec,key,验签,SHA256
From: https://www.cnblogs.com/CVE-Lemon/p/18606915

相关文章

  • The 3rd Universal Cup. Stage 15: Chengdu I. Good Partitions
    I.GoodPartitions非预期解,思考方式和官解完全不同,所以写一个题解供参考。题面就不复述了,上面链接里有,直接看题解。不妨考虑映射到\([a_0,a_1,a_2,\ldots,a_{n-1}]\),我们划分为长为\(k\)的段时,每个段可以被描述为\([a_{ik},a_{ik+1},\ldots,a_{(i+1)k-1}]\),容......
  • nodejs长字符串RSA加解密解决方法
            为了让项目数据在前后端交互过程中不被拦截破解,在项目中使用RSA对数据进行加解密,同时考虑到交互数据过大情况,于是想到将数据在加密前先进行压缩,解密后在解压的思路。        基于nodejs代码进行测试,得到了验证。constNodeRSA=require('node-rsa')......
  • js逆向学习-1 逆向rsa简单加密
    RSA加密Rsa加密包含一个key和一个mode这个mode默认10001,也可以修改观察发送的数据首先点击登录选择xhr这个筛选模块,可以看到这里面只有这个check的数据请求,然后查看发送的数据,可以看到这里的密码是进行加密的然后记录这些值打断点知道了请求和加密的数据,现在就是去......
  • RSA加解密
    无废话,直接上工具类usingSystem.Security.Cryptography;usingSystem.Text;namespaceDZCloudServer.Core.Util{publicclassEncryptUtil{/*RSA加密算法*////<summary>///获取RSA密钥///下标......
  • XCVM1302-3HSEVFVB1369通过业界领先的 DDR 内存接口实现高数据吞吐量 - AMD Versal Pr
    XCVM1302-2MLIVSVF1369XCVM1302-2MSEVSVF1369XCVM1302-2MSIVFVB1369XCVM1302-2MSIVSVF1369XCVM1302-3HSEVFVB1369明佳达Versal自适应SoC兼具可编程逻辑和加速引擎的灵活处理能力,以及先进的内存和接口技术,可为各类应用实现定制化、强大的异构加速。VersalPrime系列是基......
  • COMP 250 BFS traversal
    FinalProjectCOMP250Fall2024posted:Wednesday,Dec.4,2024due:SundayDec.15,2024,at23:59forachancetoreceiveMastery,ORFriday,Dec.20,2024at23:59GeneralInstructionsSubmissioninstructions–Pleasenotethatthesubmissiondeadlinefo......
  • 攻防世界-baigeiRSA2
    ⭕考察内容1、非标准RSA加密算法2、逆元求解3、因式分解(yafu)一、题目给出一串代码,大概看一眼是类似RSA的加密算法,但是其n的选取并非2个素数的乘积,而是5个素数的乘积,所以并不是标准的RSA加密。再看一眼文件,发现给出了n和e二、解题1、因数分解由于n仅有96位,所以尝试使......
  • Java和.Net互相使用RSA加密时的问题和处理方法
    前言我们产品是使用JAVA语言开发的,有个供第三方获取Token的接口,过程大概就是第三方先调一个注册接口,获取一个RSA公钥,然后用通过公钥加密后的一些认证信息调用获取Token的接口,如果信息无误,则发放Token。前段时间就遇到了对方是使用.Net进行开发的系统,在第一步获取公钥时没用问题,......
  • window.crypto.subtle 实现非对称加密RSA-OAEP
    使用window.crypto.subtle,可以实现非对称加密(也称为公钥加密)。非对称加密使用一对密钥:公钥用于加密数据,私钥用于解密数据。以下是一个示例,演示如何使用window.crypto.subtle实现非对称加密和解密:生成密钥对首先,生成一个RSA密钥对:asyncfunctiongenerateKeyPair(){r......
  • c# - java公私钥 转 c# net 公私钥做 RSA 加解密操作
    1.背景java和c#语言的公私钥格式是不同的,需要专门转换后才可以使用2.c#工具类usingSystem;usingSystem.Security.Cryptography;usingSystem.Text;usingOrg.BouncyCastle.Crypto.Parameters;usingOrg.BouncyCastle.Security;namespaceHypj.Logic.NCAPI{pu......