freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

渗透测试之前端加密爆破
2022-05-22 07:43:01
所属地 香港

前言:

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

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

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

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

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

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

什么是中转?

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

1653176086_62897716e4c1e982ba515.png!small?1653176117358

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

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

访问网站

1653176115_628977339e1dac532a33b.png!small?1653176146505

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

说一下步骤方式

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

方法一:

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

1653176167_62897767a9ea2446d15dd.png!small?1653176198068

方法二:

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

1653176184_62897778df5e749bf25a0.png!small?1653176215331

1653176189_6289777defe723075068d.png!small?1653176220427

找到加密的核心代码:

1653176198_62897786d4ad33360c681.png!small?1653176229283

美化一下:

1653176205_6289778de750bcfe982b8.png!small?1653176236373

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

菜鸟分析:

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

j == encryptKey

h == inputPassword

i == password

1653176229_628977a5d90355be4ca15.png!small?1653176260251

实参分别是这3个表单

第二步的函数是:

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

1653176280_628977d8dfff4543b0e23.png!small?1653176311328

最后得知 第一个参数是公钥 第二个参数的明文 第三个参数是加密后的值 直接赋给表单的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
}

1653176324_62897804d2034b8ff949e.png!small?1653176355349

1653176329_628978095548776aeeca2.png!small?1653176359761

1653176334_6289780ebfc72c4539350.png!small?1653176365294


# web安全 # 数据安全 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录