# 前言

在打某次内网的时,抓包抓到了一个奇怪的包。但很奇怪,发往同一个地址,同一个 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