ShokaX

如何轻松破解前端加密

发布于 字数统计 8.4k 字 阅读时长 28 分钟

如何轻松破解前端加密

发布于 字数统计 8,389 阅读时长 42 分钟

概述

大家好,我是一个善于使用工具精通脚本的脚本小子。
三句话,让你明白如何破解前端加密。

a4436057-3806-4247-9c90-07905530ad97-image.png

平时,大家在做渗透的时候抓包抓到的包体一般都是明文显示的,但有的站点为了增加攻击者的攻击成本,会选择使用JS进行前端加密,很多不了解JS的大兄弟直接就选择放弃了。
但其实有时候有前端加密的站点反而更好打

,是一块未被开发过的宝地。
PS
,可以找各种银行的站点,一般银行站点都有前端加密的。比如下面的例子就是某银行的子系统。

刚好最近做众测,遇到两个站点都有加密的情况。
这里我就以两个实战例子举例给大家演示下怎么破解前端加密。

简单的例子

这是某银行的一个人才培养系统,我们打开页面,抓包发现流量这方面,被加密死死的,根本没法篡改。
4184c420-d00b-442b-adcc-f757696f9ee9-image.png

523316ff-9d75-425b-820b-265608bacd7a-image.png

身为前端F12工程师,直接打开控制台,CTRL+SHIFT+F全局搜索,筛选关键字key、Crypto、AES、DES、RSA、parse等等关键字,很快啊,就找到了加密函数。

10a75d90-b0d7-4027-ab60-072fc4612a52-image.png

跟进这个函数,好家伙,加密算法、模式、密钥什么的都写的明明白白的。
完全没对JS进行混淆。如图,这里目标用的是AES加密算法、加密模式是ECB,key为1234567890123456,填充方式pkcs7

4a3fd341-eca9-4622-9f11-7ef0aeab6756-image.png

有了这些东西,我们直接扔到在线aes解密网站上跑一下,看看是不是正确的。成功解密。
http://tool.chacuo.net/cryptaes

35acb8aa-c649-455f-a79c-371df4afc6f7-image.png

但上面只解决了加解密的问题。而我们在测试的时候如果要将payload一个一个的复制到外部网站进行处理,再粘贴回bp就会显得很麻烦,所以这里给大家介绍两个bp的插件:Burpy和BurpCrypto
Burpy:https://github.com/mr-m0nst3r/Burpy
BurpCrypto:https://github.com/whwlsfb/BurpCrypto/releases

PS:对于一些简单的加解密(比如直接调用常规对称、非对称加密算法直接解密payload)我们直接用BurpCrypto内置好的基础模块就行了。但是对于复杂的加解密(比如目标站点对加密算法做了一些微调,导致标准的加密算发无法解密)我们可能得自己实现。

具体的教程我就不介绍了,反正挺简单的。

下载安装BurpCrypto插件,然后bp多了一个模块,根据上面得到的信息填充内容,然后
点击Add process。这样右键就多了一个模块,然后把它当URL编解码一样使用就完事了。

b9fd8436-194f-4fa0-b1a3-8efb40e2252f-image.png

e58c42d6-30ea-4102-ba90-6068c60c1d0f-image.png

同时,我们还能用来进行爆破,在爆破模块中的载荷处理部分选择我们的函数即可。
最终,我们成功GET一枚爆破漏洞。

777b19c8-48f8-4015-a0eb-9beeddd82575-image.png

082e1c13-b1cc-4835-b30a-e721b77db355-image.png

没那么简单的例子

上面过程中,我们很轻易的就能分析到加解密算法。但通常,开发会将JS进行混淆,导致我们不能很快速的识别到哪个是加解密函数及key之类的。
这里我还是以一个例子来演示我是怎么破解的。

还是某银行的一个子系统,抓包,发现存在流量加密。这个比上面的例子狠多了,包体基本加密死死的,最可恶的是回包也是加密的。

6add1b7c-17b3-434b-9636-1b06d8ad63b0-image.png

同样的,祖传F12控制台,搜索关键字。

56806b7f-fc24-43f9-aed5-168e20abf79d-image.png

跟进,经过混淆的代码一般很乱,但是不要慌,火狐有格式化处理功能,点击左下角的{}即可一键格式化 (这里全部例子都是以火狐浏览器来实操的,其他浏览器应该也差不多)

f8d447f9-4018-4cf9-b257-ed2da8512d39-image.png

这里我们找到了类似加密的函数,我们无法确定这个函数是不是真正用来进行加密payload的。同时我们发现,它连key都是传参过去的。

0fc320ab-267f-4bc9-bddc-8cb59d74f31f-image.png

按照正常思路,来说我们还得往上分析代码才能确定包体数据是不是由这个函数来进行加密的,并且想要找到key也得往上查看调用关系。
但这里根本不需要这么麻烦,直接上断点,然后输入账号密码,看看有没有步入断点,
如果有的话,就看看它的return是不是和抓包中的数据一样即可。这里我已经确认过了,这个就是加密函数。

点击它左边的那个行号,显示蓝色就代表断点已经打上了。

81fb8148-4bc5-4e80-8b6c-5b00b59f0bc0-image.png

然后输入账号密码,就会触发加密函数,之后就是卡在断点上了。这时候,我们就能轻松的发现key及加密前数据的格式了。

304eee2d-d5b6-456a-9b28-c5444e8e2d3a-image.png

你以为这就完了?这里它的密钥并非真的是O/25g2tzZErQlDLycE+XuTv9uYNrc2RK
注意看代码,密钥是t,而t是n经过字节化处理后的。
如果傻傻的拿上面得到的key去试,肯定是解不出来的。

9323656c-65a7-44e5-9bca-d8ebf4ca7675-image.png

坑点来了:
这个时候,你是不是以为我们只需要得到t的值,然后仍到在线3des上就完事了?
但就是这一步我卡了半天,最后才发现它这里是调用了CryptoJS这个包进行前端加密的。
而这个包中定义了一种自定义格式wordarray,它把密钥变成了字节流的形式,并用这种格式进行保存,所以密钥并不是我们上面的O/25g2tzZErQlDLycE+XuTv9uYNrc2RK。同时这种字节流形式也是无法输出的

前面是分析错了,后面才发现,这里它只是直接输出了密文的16进制的String表示,而在线的都是需要base64的输入的,因此我们这里要么直接去把它还原成16进制再做base64,要么直接调用CryptoJS的解密运算。

这里我为了方便直接使用CrtptoJS本地实现相同的算法,然后手动将字典进行加密。

首先,先到github上下载cryptojs这个包
链接:https://codeload.github.com/brix/crypto-js/zip/refs/heads/develop
然后引用关键js,如图,前三个是基本上都会用到的,最后一个就是3des的具体实现了。(这里需要注意,JS的引用顺序不能乱)

dae58111-12de-4cc5-bdb2-b1d25cf59c54-image.png

然后直接copy它的代码就完事了。

691aa363-62be-41eb-84df-0480119d79c9-image.png

注意,它这里p.a是经过了不知道什么混淆的,p.a其实就是CryptoJS(这里就看对CryptoJS这个包的熟悉程度了)。然后把p.a全换成CryptoJS。

ed9c5373-9300-4382-9d3c-4c102c3cd284-image.png

打开我们本地搭的前端加密html,F12控制台,调用函数,成功加密。然后我们就可以利用这个来加密我们的字典了。JS写个for循环,然后加密得字典。

c403034f-abe5-489f-bb4c-322a21308b1e-image.png

eb9be87f-c1af-43e5-afa4-18b8d593a35a-image.png
6b3c3e4b-b05f-4112-bac5-fb3dd018e4e4-image.png

然后就是愉快的爆破过程了

在Bp中使用BurpCryptoJS插件也是可以的

c798c3b2-2465-4876-ae56-200aec802619-image.png

最终,破解了这个加密,光是在登录、忘记密码、注册等地方我直接提了7个漏洞。还成功爆了个运营的账号进入后台。(授权测试)

1e390599-2c81-4ce5-a047-91826ac084eb-image.png

a4383f5d-72c6-4c2a-ac6a-87c62269ad63-image.png

Burpy插件的简单使用介绍

上面一直没介绍Burpy的使用方法,我这里简单提一下,
首先使用python写出加解密的代码,如下,其中函数返回形式也不要动,具体看注释就懂了
下面代码实现的功能是把包体加密成md5

9edd427d-326a-4de3-95d3-78dbe585bf9e-image.png

然后在插件模块中选择本地监听端口(任意选) 还有输入上面的python文件路径,勾选第一个enable Processor,第二个可选可不选(选上了会自动加解密)。
然后点击start,出现绿色的running就成功了,之后的使用也是右键会多一个加解密模块。

d8c232f3-ac00-44e7-a681-361340fbef46-image.png

最后,这里再贴上一个Burpy写的des加密例子,感兴趣的可以分析下。(就bp上的调试操作方便性而言,我觉得Burpy比burpCrypto好太多了)

efebead1-dac5-4b4e-ad81-194f2cd6c572-image.png