ShokaX

前端加密的两个案例

发布于 字数统计 4.0k 字 阅读时长 14 分钟

前端加密的两个案例

发布于 字数统计 4,001 阅读时长 21 分钟

前言

在打某次内网的时,抓包抓到了一个奇怪的包。但很奇怪,发往同一个地址,同一个url的请求,一个包是html表单,一个是multipart/form-data数据。

通过host头一看,原来是宝塔面板的登录尝试。就感觉很奇怪,为什么会发两个不同的包呢?

image-20230209103613407

分析并登录

首先,这是我可以确认两个都是登录包,因此所以我们前端抓包分析就行。

查看我自己的BT面板,发现加密方式的很简单,

image-20230209103652356

bp抓个包发以下,请求体格式和我们wireshark抓到的第一个包一样。

image-20230209103714825

再登录wireshark抓到的这个目标的宝塔面板,F12确认一下,很快,我们就发现了问题,可以看到username和password的加密方式确实有所修改。

password只是在最后套了层rsa,而username的话还加了token做盐,而且这个token是每次都变的,每刷新一次页面就变一次,由后端返回。

所以真相只有一个!宝塔突然更新了登录方式(我看了这两个包的时间,相差不到10s,再加上我自己的宝塔后台我是每找到这种设置的,所以我猜测是宝塔新版本修改了登录方式)。至于为什么这个运维会先发一个老版本的登录方式包我就不清楚了。

image-20230209103724647

image-20230209103730733

那问题来了,我们在已有老版本的账密的情况下,即md5(username)和md5(md5(password) + ” + ‘_bt.cn’)的情况下能不能登录这个面板呢?

分析这新旧加密方式,不难得知,难点主要在username,如果能够解密出原来的username,那我们就能够制作md5(md5(username + last_token)),last_token在页面可以获取到。 最后只需要在给最终结果套上一层RSA就完事了,公钥也在html中能得到。

image-20230209103739598

因此答案是可以的(需要知道username明文)!问题不大,扔到cmd5解密一哈,直接出来。因此接下来的参数伪造其实不难了都。

image-20230209103747327

很显然usernmae得重新生成了,可以直接在页面输入正常的用户名,让浏览器自动帮我们生成,密码其实直接用抓包抓到的就行了。

但我感觉每难度啊,这就很水,因此我选择动手操作些有的没的(脑瘫行为),写了个简单的密码生成,然后抓包修改,没毛病,成功登录。

image-20230209103755145

image-20230209103800796

案例2

偶尔遇到的,没什么难度。只是拿来水文章凑字数的。练下手把就当。

抓包,看到每次的加密内容都不一样,此时下判断,要么是对称加密带IV的算法,要么是非对称。

image-20230209103839129

查看控制台,发现输出了一些日志。这里我们以这个登录错误的为落脚点分析。

image-20230209103846918

点击跳转到这个js,稍微往上翻就发现可疑的代码。上断点

image-20230209103855062

可以发现,重新输入账密登录,可以确定就是这块this.$encruption函数进行的加密。

image-20230209103904486

image-20230209103916929

全局搜索这个$encruption,在认为有加密嫌疑的地方上断点。

image-20230209103926172

image-20230209103929751

最终发现真正起作用的是这个e.encrypt

image-20230209103935889

继续追踪,找到上层encrypt,老样子上断点

image-20230209103942798

嗯,没找错就是这个块。在console印证了下我们的想法,

image-20230209103950057

百度搜下这块代码,很明显了,jsencrypt的RSA算法。

image-20230209103956547

接着我们直接在console控制台调用接口获取公钥就完事了。

image-20230209104003914

image-20230209104007261

随便找个在线的RSA加密进行下测试。

image-20230209104015055

测试下这个密码能不能登录成功,妹毛病。收工。

image-20230209104022186