免责声明:由于传播、利用本公众号李白你好所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号李白你好及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
文章作者:先知社区(1466024851564656)
参考来源:https://xz.aliyun.com/news/90856
1►
JS分析

2、直接开始逆向,先看下长度,32位,首先想到MD5加密

3、尝试关键词搜索sign,sign:,sign=
结果关联文件太多,不适合使用这种方式找;

4、换个方式,使用启动器分析
Promise.then() 可以看到是异步回调

为了测试方便,验证码刷新接口有时间限制,换一个接口测试/page

进入末尾,打断点,刷新页面,发现已经生成了sign的值;

进入第一个异步栈v.request,发现这时的head为空,这里可以看出信息是在v里面的函数生成

打开数组v里边存在很多方法,打开第二个方法,发现onrequest,这里可以看出t为请求参数,e()函数加载了t

进入e()方法,找到e.headers.sign生成的方式,现在只要找到这段代码中的未知函数,这就可以生成sign的值;
sign=(time = headers['time'], t = md(data),
pd("ghaepVfxxxxxgnk4NCTXLApxQkBcvh1",
pd("mwMlWOdyMxxxxxzQPulT1ndRZIAjShDB", pd("ZuSj0gwgxxxxx4fTEz55oAG2q2p1SVGKK", t, time), time), time))


接着继续找未知函数md(),pd()
先追md()函数


md()函数中包含未知函数gd()和_d()函数,继续向下,拿到gd()

回到md()函数,继续追_d()函数

接着找pd()函数,该函数中涉及未知fd()函数

找到fd()函数

进入fd()函数,发现该函数疑似MD5加密;推测是对n=t+e+time的MD5加密‘。

使用在线MD5加密平台验证,控制台获取n=t+e+time的值。
加密结果相同,均为:’02d932d40fabc5db9345f3309fb7d15a


到这里,我们就可以写pd()函数了
function md5(str) {
return crypto.createHash('md5').update(str, 'utf8').digest('hex');
}
pd = function(e, t, time) {
var n = t + e + time;
// return n = fd()(n)
return md5(n)
}
综上 所有的未知函数都已找到,可以说sign的值已经出来了。
2►
脚本测试
1、使用js脚本生成时间戳timestamp值和sign值

2、使用py脚本调用js,修改验证码请求包,两个手机号码同时收到验证码;

到这里就造成了任意用户登录漏洞!




没有回复内容