某瑞数5网址分析
·
第一步:网页分析
1,第一个cookie
- 打开网页直接刷新 发一个dom请求中 直接获得了页面内容 且并未携带加密请求头参数 但是携带了两个cookie


- 查看两个cookie是本地生成还是服务器返回
- 打开网页直接刷新,发现有两个dom请求 第一次为412,没有携带任何可疑参数和其cookie 但是可以看到 在响应标头中 出现了set-cookie 此时我们发现 第一个cookie为服务器返回
-

2,第二个cookie
- 第二个cookie并未在set-cookie中发现 我们使用hook的方式来看看是否能定位到本地生成的堆栈
(function(){
'use strict'
var _cookie = "";
Object.defineProperty(document, 'cookie', {
set: function(val) {
console.log(val);
debugger
_cookie = val;
return val;
},
get: function() {
debugger;
return _cookie;
},
});
})()
- 在这里 我们成功hook到了第二个cookie的堆栈上方

这里我们往上跟栈发现都是vm里面的代码 ,在往上走发现一个eval执行了一些代码 而且这些代码是高度混淆的 所以我们使用本地补环境的方式 来本地生成cookie 然后导出进行请求

二,补环境
- 这里我们把eval的整个代码 拿到本地

- 之后我们使用proxy代理 来看这个代码访问和修改了那些属性和函数
function watch(obj, name) {
return new Proxy(obj, {
get(target, p, receiver) {
// 对于 navigator,始终打印日志,不做特殊排除
if (name === "navigator") {
console.log(`获取: navigator.${p} =>`, target[p]);
}
// 处理特殊系统属性的默认代理逻辑
if (
p === "crypto" ||
p === "Math" ||
p === "isNaN" ||
p === "encodeURI" ||
p === "Uint8Array" ||
p.toString().indexOf("Symbol(Symbol.") !== -1
) {
return Reflect.get.apply(Reflect, arguments);
}
// 对于其他对象,保持原有的日志逻辑
let val = Reflect.get.apply(Reflect, arguments);
if (name !== "navigator") {
console.log("获取:", name, ".", p, "=>", val);
}
return val;
},
set(target, p, value, receiver) {
if (name === "localStorage" || name === "sessionStorage") {
localStorage.setItem(p, value);
}
let val = Reflect.get.apply(Reflect, arguments);
console.log(`设置: ${name}.${p} = ${val} => ${value}`);
return Reflect.set(...arguments);
}
});
}
- 先运行 发现缺少window

- 我们这里对window进行补充 然后将window挂上代理
window = globalThis;
window = watch(window,"window")
- 再次出现doucment未定义 我们按照前面的方法补上 并且加上代理

- 之后我们发现 代理显示代码对一个ts的东西进行了操作 但是未定义 这里如果细心可以发现 在我们hook的时候 第一个出现的东西 好像就是这个ts 这里我们把这个ts复制到我们的代码


- 这里我们又调用了一些方法和属性 我们一一补全
- 这里注意/在真实的浏览器环境中,当一个页面不是嵌套在任何iframe或其他窗口中时,window.top 默认指向自身

这里 我们发现调用了一些document下的方法和location 这里我们把方法补全 location可以直接复制 或者挂代理查看访问了那些内容

document = {
createElement:function (tgname) {
console.log(`创建标签(${tgname})`)
return watch({},`document.createElement(${tgname})`)
}
}
window.XMLHttpRequest = function(){}
window.DOMParser = function(){}
window.location = {
"ancestorOrigins": {},
"href": "https://sugh.szu.edu.cn/Html/Index.html",
"origin": "https://sugh.szu.edu.cn",
"protocol": "https:",
"host": "sugh.szu.edu.cn",
"hostname": "sugh.szu.edu.cn",
"port": "",
"pathname": "/Html/Index.html",
"search": "",
"hash": ""
}
在这里进行补环境时候 注意几个点
1, 不要过度不环境 如果proxy代理检查访问的那些内容 就用if判断后放回对应的值 不要直接return
2,不要所有访问的内容都补 确定是浏览器有的 我们再去补环境
2, 第一步中 补环境只要不报错 能成功导出cookie即可 如果不行 使用异常捕获查看代码检测了那些内容
以及补全前面缺少的内容即可
更多推荐



所有评论(0)