渗透测试之前端加密爆破

admin 2025年2月15日22:25:32评论4 views字数 1816阅读6分3秒阅读模式

前言:相信很多人在渗透测试的时候找到一个破解点,但是BURP抓包发现是加密过的

这种问题可以通过以下方法解决:

1.直接调用浏览器模拟登录进行爆破(比如:python利用selenium调用浏览器等方法)

2.直接执行JS进行爆破(懒人模式 ajax for循环直接浏览器执行JS)

3.通过中转站进行爆破  (利用你会的语言搭建WEB服务器进行转发爆破)

4.追踪加密过程再进行 (简单粗暴)

什么是中转?

利用你会的语言,本地搭建一个WEB(中转) 客户端接收的数据后端进行 加密 或者 解密处理 再提交到目标服务器 ,然后目标返回给中转站 中转站返回给客户端。

渗透测试之前端加密爆破

今天就来说一下第四种爆破方式

这边推荐个BURP插件:https://github.com/whwlsfb/BurpCrypto (支持直接调用本地JS)

访问网站

渗透测试之前端加密爆破

渗透测试之前端加密爆破

看的password这个参数的值是已经被加密了,我们通过浏览器断点等方式追踪加密流程

说一下步骤方式

追踪加密-->找到加密-->得到加密-->制作加密--开始爆破

方法一:

查看源代码 直接输入password 或者 key 等关键字快速找到需要断点的代码

渗透测试之前端加密爆破

方法二:

方法一用不了的话 就通过浏览器的网络请求搜索关键字 然后一步一步的断点找到加密的核心代码即可

渗透测试之前端加密爆破

渗透测试之前端加密爆破

找到加密的核心代码:

渗透测试之前端加密爆破

美化一下:

渗透测试之前端加密爆破

我们可以看到用的是jsencrypt 那么我们可以采用 中转加密(利用你会的语言) 或者 本地直接加密 进行爆破

分析:

第一步函数的形参分别是 j, h, i  对应的是 ===》 baseUtil.encryptEle("encryptKey","inputPassword","password");

j == encryptKey

h == inputPassword

i == password

渗透测试之前端加密爆破

第二步的函数是:

encryptText: function(l, n, j) {            var i = l || "encryptKey";            if (n) {                var m = f("#" + i).val() || "";                var k;                var h = c("JSEncrypt");                if (typeof (h) === "function" && m) {                    var o = new h();                    o.setPublicKey(m);                    k = o.getKey().encrypt(n)                } else {                    console && console.error("【警告】加密组件初始化失败...", m);                    k = n                }            } else {                k = n            }            if (typeof (j) === "string") {                f("#" + j).val(k)            }            return k        },

f("#" + j).val(k)  j 对应的是 实参的 第三个参数password

渗透测试之前端加密爆破

最后得知 第一个参数是公钥 第二个参数的明文 第三个参数是加密后的值 直接赋给表单的password

然后BURP抓包就是加密后的数据啦。

最后一步就是加密 进行爆破了

它的核心代码:

encryptEle: function(j, h, i) {            if (!h) {                return null            }            var k = f("#" + h).val() || "";            return b.encryptText(j, k, i)        },        encryptText: function(l, n, j) {            var i = l || "encryptKey";            if (n) {                var m = f("#" + i).val() || "";                var k;                var h = c("JSEncrypt");                if (typeof (h) === "function" && m) {                    var o = new h();                    o.setPublicKey(m);                    k = o.getKey().encrypt(n)                } else {                    console && console.error("【警告】加密组件初始化失败...", m);                    k = n                }            } else {                k = n            }            if (typeof (j) === "string") {                f("#" + j).val(k)            }            return k        },

调用jsencrypt 修改成他的代码:

function jiami(password) {    var k;    var o = new JSEncrypt();    o.setPublicKey("30819f3******************************************************************************************************010001");    k = o.getKey().encrypt(password)    return k}

渗透测试之前端加密爆破

渗透测试之前端加密爆破

渗透测试之前端加密爆破

原文始发于微信公众号(web安全研究院):渗透测试之前端加密爆破

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月15日22:25:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透测试之前端加密爆破https://cn-sec.com/archives/1042907.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息