JS逆向100题——第1题
js逆向之webpack小试牛刀
·
天翼云登录
爱好学习及分享,若文章侵权,优先联系本人删帖处理。
目标与目的
目标网站:天翼云登录
目的:通过构建登录参数,完成天翼云的登录操作。
相关技术
本题涉及两个方面的参数构造:
本题涉及的js知识点:
(个人理解,或有误,后续认识加深再来调整)
- webpack打包:js代码通过wwebpack打包后会生成固定模式,该模式有标准的三段式,1. 自执行的函数;2. 加载器;3. 具体的模块代码。
- 代码在被调用时会将模块对应的id传给加载器,通过加载器去运行指定代码。
解题步骤
1. 登录
登录时用错误的密码:作用是查看本次请求的相关参数。通过参数名去控制台搜索,锁定参数生成位置。
参数如下:
参数说明
- userName:用户名
- password:密码
- referrer:wep (固定,wep端)
- mainVersion: 300021100 (固定)
- comParam_curTime:时间戳
- comParam_seqCode:计算所得
- comParam_signature:计算所得
- isCheck:true(固定值)
- locale:zh-cn(固定值)
2. 查找密码生成逻辑
- 在控制台搜索关键词"password",这里有一个小技巧:搜索时加上"=" 或者 ":"等赋值符号,可能更快的找到相应位置。(如果搜不到,或者因为粗心没找到,那就可以先搜别的参数,比如 username。或者通过xhr断点向上找堆栈)。可以找到密码的生成位置如下:
- 此时打断点,重新登陆,可以看到a.value就是原始密码
- 现在可以将生成密码的这段代码复制到控制台运行,确定该行代码即是密码生成逻辑
- 把Object(l[“c”])、Object(l[“f”])、Object(l[“g”])拿到控制台运行,他们对应的是三个函数。
- js构造如下,将Object(l[“c”])、Object(l[“f”])、Object(l[“g”])替换
- 可以看出H函数中涉及到TripleDES加密。关键点就在p对象。
3. 简单还原密码加密
这里使用第一种方法简单还原密码加密,生成密文。
- 通过使用crypto-js模块,构造p对象,具体代码如下:
- 通过构造p对象,运行代码后,即可完成密码的加密。
- 至此密码已经还原,但是出于学习的目的,应该尽量不用第三方插件来完成。而且若开发者将加密算法进行魔改,那这种引第三方包的方式肯定是不OK的。故继续向下。
4. 通过扣代码完成密文生成
上面已经找到关键点,对象p。此时若能够找到p对象的生成逻辑,将代码拿过来那就可以大功告成了。
- 断点调试查找p的生成过程,可以看出刚进入H函数,p对象就已经生成了。
- 向上找p的生成逻辑,4407行,p = t.n(s),s = t(“3452”)
-
打断点重新运行,发现并不会断在p生成这里,往上看代码可以发现这代码被webpack打包后的样子。
var func; // 自执行函数 !function (a) { // 加载器,运行模块 function ccc(b) { a[b].call(xxx,xxx,xxx); } func = ccc; } ( { // 需要被运行的模块 1: function(x1,x2,x3){}, 2: function(x1,x2,x3){}, 3: function(x1,x2,x3){}, } ) func(1) // 调用函数1 func(2) // 调用函数2 func(3) // 调用函数3
-
接下来我们就要去找到对应的加载器和模块,然后构造一个自执行函数,最后通过调用对应的方法达到目的。可以直接往上找,加载器一般在代码的头部。
- 在398行找到u方法,紧接着还有一些u的属性的赋值
- 这是可以构造一个简易的webpack的代码逻辑。如下:
- 然后去找对应的模块,上文中,对象p = t.n(s),而s=t(“3452”),所以需要去找3452模块,通过H函数的断点调试,可以知道,这些加载的模块并不在当前的js文件中,而在另一个js文件——chunk-vendors.f910be7c.js中
- 模块添加完成之后如下:
- 此时运行测试
输出结果如下:
- 至此密码加密逻辑已经解决
5. 其他参数构造
其他几个参数不涉及加密算法,还原也较为简单,基本步骤也是先找构造位置,然后把代码提取出来,运行,缺什么补什么。
- 关键词搜索
- 提取代码为:
6. 登录测试(使用正确的密码)
js逆向100题——第1题完成
更多推荐
已为社区贡献1条内容
所有评论(0)