1. 首页
  2. 渗透测试

js逆向01-webpack (*邯郸)sign生成与注册

【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。

目标地址:aHR0cDovL2FwcHQuaGFuZGFubmV3cy5jb20uY24vYXBwL3RlbXBsYXRlL2Rpc3BsYXlUZW1wbGF0ZS9uZXdzL2hvbWUuaHRtbA==

  • 接口分析

在首页往下滑,可以看到 有个getArticlesNew的接口,确认内容是我们要抓的接口。

看一下参数,芜湖   ~~~  居然没有加密参数。

直接右键copy curl

此时推荐一手博哥的工具站。

http://www.spidertools.cn/#/curl2Request
直接把curl粘在左侧,右边就直接生成python 的请求代码了。就是这么骚。

是骡子是马拉出来跑跑。

不出意外还是出了意外 

一下header信息,果然没那么简单,可以看到authtoken,sign是加密信息无疑了,老虫们看到这就知道,这俩货 ,妥妥的MD5。

  • 断点逻辑分析

先全局搜一下我们的关键词sign,如果结果很多话 ,可以尝试搜 sign: 或sign=

可以筛掉不少没用的。

最终定位到这个  sign: d()(i + a + n)

好家伙,authtoken sign 都有,无疑是他没跑了。在这里下断点,刷新。

打开控制台,调试一下。

可以看到这就是我们刚才分析的接口,让流程走一遍,再看看最新的接口请求。对比下。
i 对应 authtoken

n 对应 time 

a 秘钥appSecret

加起来传给方法d 返回值就是sign

我们用MD5试一下,emmm ~~~ 真不错,sign 破案!

用python还原 跑一下康康。

👌🏻 sign 结案.

    秘钥 appsecret 是固定值不变。

    此时还有个老六 authtoken 是有时效的,大概一两天会过期。

  • authtoken 生成分析

老规矩,全局搜authtoken ,看这个以authtoken 为key的操作最符合我们的预期,断点,刷新。

可以看到这个这个值他是用localStorage做了本地存储的,当在生成点打了断点,他也没停在我们想要停的地方,此时我们手动删除这个值,再次刷新页面。

可以看到我们c就是我们要找的authtoken,它的组成是从一个响应结果中提的,从堆栈看到一个 认证成功 的字眼,打开一个新的无痕模式看看接口(无痕模式下没有刚才我们的断点,和已储存在localStorage的数据)。

信息比较多,按type排序看看,可以看到操作成功在auth内。

分析一下他的参数,也有个sign,可以肯定的是肯定不是我们刚才的那个sign,他们的参数组成不同。我们在刚才的js文件内搜一下sign:

第一个结果就是我们要的,他和auth的参数太像了,再打个断点,清空localStorage,刷新。

可以看到这次是 操作成功 ,刚刚我们看的是 认证成功 啊,不太一样,原因是我们现在看到的是已经请求过的响应体,我们接着往下看,这个sign的组成部分appkey和appsecret 是固定值。

m是一个当前时间戳,再加上u[2:7],这里面就一个时间戳是变化的。

值还是一个MD5组合

python 还原试一下。

认证成功 没问题,此时响应体返回了aothToken 的长串,可我们要的是短的。

OK 先回到我们的authtoken

c所需的参数,全部来自于auth接口的数据。a.authToken不就是刚才的长串吗,再来看看 r 是由auth接口中的响应header里的api-data 三个指定步长的字符串。

然后传给E[“a”].Decrypt3Des

追一下这个方法。

里面又是一堆依赖方法,继续往下就会发现到了一个分发器,无疑webpack

  • 扣js

webpack的结构

(function (e) {  l.n = function (e) {    var t = e && e.__esModule ? function () {          return e["default"]        }        : function () {          return e        }    ;    return l.d(t, "a", t),      t  }})({  0: function (e, t, i) {    e.exports = i("56d7")  }});

先发分发器搞出来

548行一下全部都是方法,刚才我们看的Decrypt3Des也在其中,之上的就是我们的分发器了,粘下来,放到我们的js文件中。(一般来说只扣call那个方法就可以了,然后缺什么补什么,为了不麻烦,代码不是很多,直接全扣下来)

把加载器暴露给全局,然后把包含Decrypt3Des加密的方法的bbd5 方法下面的括号中,一定要在加载器中catch 输出异常日志


runing….

报错吧别慌,多半是缺少方法,这个就f8d5是个false,全局搜一下

找到找到扣出来,和bbd5放到一起,这期间缺什么补什么依次类推。

我们看下最终效果。

如有侵权请告知 我会立即删除。

原创文章,作者:mOon,如若转载,请注明出处:https://www.moonsec.com/8614.html

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息