安全矩阵

 找回密码
 立即注册
搜索
查看: 2860|回复: 0

如何轻松破解前端加密

[复制链接]

249

主题

299

帖子

1391

积分

金牌会员

Rank: 6Rank: 6

积分
1391
发表于 2022-4-3 11:17:30 | 显示全部楼层 |阅读模式

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

平时,大家在做渗透的时候抓包抓到的包体一般都是明文显示的,但有的站点为了增加攻击者的攻击成本,会选择使用JS进行前端加密,很多不了解JS的大兄弟直接就选择放弃了。但其实有时候有前端加密的站点反而更好打:①前端加密的情况下waf是无法识别到你的恶意payload的②大家都不想打,是一块未被开发过的宝地。PS:大家想练手的话,可以找各种银行的站点,一般银行站点都有前端加密的。比如下面的例子就是某银行的子系统。
刚好最近做众测,遇到两个站点都有加密的情况。这里我就以两个实战例子举例给大家演示下怎么破解前端加密。
简单的例子这是某银行的一个人才培养系统,我们打开页面,抓包发现流量这方面,被加密死死的,根本没法篡改。


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

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

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

但上面只解决了加解密的问题。而我们在测试的时候如果要将payload一个一个的复制到外部网站进行处理,再粘贴回bp就会显得很麻烦,所以这里给大家介绍两个bp的插件:Burpy和BurpCryptoBurpy:https://github.com/mr-m0nst3r/BurpyBurpCrypto:[url]https://github.com/whwlsfb/BurpCrypto/releases[/url]
PS:对于一些简单的加解密(比如直接调用常规对称、非对称加密算法直接解密payload)我们直接用BurpCrypto内置好的基础模块就行了。但是对于复杂的加解密(比如目标站点对加密算法做了一些微调,导致标准的加密算发无法解密)我们可能得自己实现。
具体的教程我就不介绍了,反正挺简单的。
下载安装BurpCrypto插件,然后bp多了一个模块,根据上面得到的信息填充内容,然后点击Add process。这样右键就多了一个模块,然后把它当URL编解码一样使用就完事了。


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



没那么简单的例子上面过程中,我们很轻易的就能分析到加解密算法。但通常,开发会将JS进行混淆,导致我们不能很快速的识别到哪个是加解密函数及key之类的。这里我还是以一个例子来演示我是怎么破解的。
还是某银行的一个子系统,抓包,发现存在流量加密。这个比上面的例子狠多了,包体基本加密死死的,最可恶的是回包也是加密的。

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

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

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

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

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

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

坑点来了:这个时候,你是不是以为我们只需要得到t的值,然后仍到在线3des上就完事了?但就是这一步我卡了半天,最后才发现它这里是调用了CryptoJS这个包进行前端加密的。而这个包中定义了一种自定义格式wordarray,它把密钥变成了字节流的形式,并用这种格式进行保存,所以密钥并不是我们上面的O/25g2tzZErQlDLycE+XuTv9uYNrc2RK。同时这种字节流形式也是无法输出的,而使用在线解密的平台又存在各种兼容性的问题,自己使用python实现又很麻烦。所以这里我们为了方便直接使用CrtptoJS本地实现相同的算法,然后手动将字典进行加密。
首先,先到github上下载cryptojs这个包链接:https://codeload.github.com/brix/crypto-js/zip/refs/heads/develop然后引用关键js,如图,前三个是基本上都会用到的,最后一个就是3des的具体实现了。(这里需要注意,JS的引用顺序不能乱)


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

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

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


然后就是愉快的爆破过程了
在Bp中使用BurpCryptoJS插件也是可以的

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



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

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


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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-30 14:29 , Processed in 0.013379 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表