# 前言
在打某次内网的时,抓包抓到了一个奇怪的包。但很奇怪,发往同一个地址,同一个 url 的请求,一个包是 html 表单,一个是 multipart/form-data 数据。
通过 host 头一看,原来是宝塔面板的登录尝试。就感觉很奇怪,为什么会发两个不同的包呢?
# 分析并登录
首先,这是我可以确认两个都是登录包,因此所以我们前端抓包分析就行。
查看我自己的 BT 面板,发现加密方式的很简单,
bp 抓个包发以下,请求体格式和我们 wireshark 抓到的第一个包一样。
再登录 wireshark 抓到的这个目标的宝塔面板,F12 确认一下,很快,我们就发现了问题,可以看到 username 和 password 的加密方式确实有所修改。
password 只是在最后套了层 rsa,而 username 的话还加了 token 做盐,而且这个 token 是每次都变的,每刷新一次页面就变一次,由后端返回。
所以真相只有一个!宝塔突然更新了登录方式(我看了这两个包的时间,相差不到 10s,再加上我自己的宝塔后台我是每找到这种设置的,所以我猜测是宝塔新版本修改了登录方式)。至于为什么这个运维会先发一个老版本的登录方式包我就不清楚了。
那问题来了,我们在已有老版本的账密的情况下,即 md5 (username) 和 md5 (md5 (password) + '' + '_bt.cn') 的情况下能不能登录这个面板呢?
分析这新旧加密方式,不难得知,难点主要在 username,如果能够解密出原来的 username,那我们就能够制作 md5 (md5 (username + last_token)),last_token 在页面可以获取到。 最后只需要在给最终结果套上一层 RSA 就完事了,公钥也在 html 中能得到。
因此答案是可以的(需要知道 username 明文)!问题不大,扔到 cmd5 解密一哈,直接出来。因此接下来的参数伪造其实不难了都。
很显然 usernmae 得重新生成了,可以直接在页面输入正常的用户名,让浏览器自动帮我们生成,密码其实直接用抓包抓到的就行了。
但我感觉每难度啊,这就很水,因此我选择动手操作些有的没的(脑瘫行为),写了个简单的密码生成,然后抓包修改,没毛病,成功登录。
# 案例 2
偶尔遇到的,没什么难度。只是拿来水文章凑字数的。练下手把就当。
抓包,看到每次的加密内容都不一样,此时下判断,要么是对称加密带 IV 的算法,要么是非对称。
查看控制台,发现输出了一些日志。这里我们以这个登录错误的为落脚点分析。
点击跳转到这个 js,稍微往上翻就发现可疑的代码。上断点
可以发现,重新输入账密登录,可以确定就是这块 this.$encruption 函数进行的加密。
全局搜索这个 $encruption,在认为有加密嫌疑的地方上断点。
最终发现真正起作用的是这个 e.encrypt
继续追踪,找到上层 encrypt,老样子上断点
嗯,没找错就是这个块。在 console 印证了下我们的想法,
百度搜下这块代码,很明显了,jsencrypt 的 RSA 算法。
接着我们直接在 console 控制台调用接口获取公钥就完事了。
随便找个在线的 RSA 加密进行下测试。
测试下这个密码能不能登录成功,妹毛病。收工。