incapsula_5s防御机制

Author Avatar
Tisoz 8月 21, 2022
  • 在其它设备中阅读本文章

Incapsula

定位请求位置

image-20220821002306331

  • 提交了加密参数后 , 得到token , 置入cookie后即可正常访问
  • 接下来定位发包点 , 尝试断下XMLHttpRequest.prototype.send函数后无效
  • 既然不是走的send函数 , 一时之间想不到其他方式 , 于是断下cookie重载
1
2
3
4
5
6
7
8
9
Object.defineProperty(document,'cookie',{
get:function(){
return "";
},
set:function(v){
if(v.indexOf("reese84")+1)debugger;
this._tmp = v;
}
});
  • 该请求会将token置入cookie中的reese84键值 , 于是断到reese84即可

image-20220821004347375

  • 分析堆栈信息 , 追踪到此函数 , 由递归式函数调用流程 , 这种不好分析
  • 继续往上翻
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
_0x3b9cca[a0_0x4490('0x1d')]['updateToken'] = function() {
return _0x2ebc3b(this, void 0x0, void 0x0, function() {
var _0x515889, _0x4d016d = this;
return _0x54accf(this, function(_0x4e6e50) {
switch (_0x4e6e50[a0_0x4490('0x125')]) {
case 0x0:
return [0x4, (0x0,
_0x438e51[a0_0x4490('0x63')])(this[a0_0x4490('0x69')], function() {
return _0x4d016d['getToken']();
}, function(_0x29d854) {
return _0x29d854 instanceof _0xa83a59;
})];
case 0x1:
return _0x515889 = _0x4e6e50[a0_0x4490('0xf8')](),
this[a0_0x4490('0x19a')](_0x515889),
[0x2];
}
});
});
}
  • 这段代码命名来看可能是专门更新resse84的 , 下断 , 同时替换掉js执行文件
  • 此时发现有请求url传入 , 于是重定义原型上的get方法 , 拦截下来

image-20220821005844176

  • 堆栈Promise第一层发现请求参数 , 基本确认此堆栈是没问题的
  • 剩余部分补充环境与参数即可

环境部分

image-20220821010854116

  • 指纹环境定位后 , 不难找到 , 这些代码就是环境数组 , 包含canvas , webgl , font之类的环境 , 之后补充后 , 即可生成token

附带一份解混淆后的代码

[文件] https://oss.tisoz.com/ins.js

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:http://www.tisoz.com/2022/08/21/incapsula_cdn_5s/