SRC | 从JS逆向到任意用户登录

华盟原创文章投稿奖励计划

在测登录接口的时候,验证码请求包存在sign校验,逆向生成sign值,测试发现存在验证码双发问题,导致任意用户登录。

文章作者:先知社区(1466024851564656

参考来源:https://xz.aliyun.com/news/90856

1

JS分析

1、点击获取验证码,测试验证码问题,无法再次放包,发现请求包存在sign值,猜想应该是Sign值在做校验;自动草稿

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,修改验证码请求包,两个手机号码同时收到验证码;

自动草稿

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

自动草稿

文章来源:李白,你好

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容