本文章中所有内容仅供学习交流使用,不用于其他任何目的。否则由此产生的一切后果均与作者无关!

雷池waf概念

雷池 WAF(SafeLine)是长亭科技开源的一款 Web 应用防火墙,部署在网站前面,把所有进来的 HTTP/HTTPS 流量先过一遍“安检”,再决定是否放行。

作用:

雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入XSS代码注入命令注入CRLF 注入ldap 注入xpath 注入RCEXXESSRF路径遍历后门暴力破解CC爬虫 等攻击。

一句话总结:雷池 WAF = 免费 + 一键安装 + 企业级 Web 安全防护,适合个人站、中小企业以及需要私有化部署的场景。免费使用。

这是官方文档:雷池 WAF | 下一代 Web 应用防火墙 | 免费使用

逆向目标:aHR0cHM6Ly93d3cuZ2RzZ2ouY29tL25vdGljZS8=

浏览器DevTool控制台检测

当清除cookies后,重新抓包会被检测到

并且控制台会被无限清除

自动化工具检测:

playwright测试

需要点击,模拟点击试一次

直接报当前环境被调试

selenium测试

同上

drissionpage测试

可以绕过检测

如何绕过控制台检测

打开脚本断点进行调试

到challenge.js到这里有判断是不是机器人的检测,分数越高,越像机器人,越容易被检测到。

从v函数进去,里面有多个检测点

一共有四十四个检测点,检测环境、控制台、自动化的。

像以下这些点就是检测自动化的

被检测到直接满分毕业,测试一下打开自动化,分数是多少

220分,太像机器人了。

逆向思路

那如何绕过反调试,并获取正常cookies,利用协议去请求呢?

这个值是我们要得出的

第一步:

直接源头注释替换文件,方便调试

第二步,第一次请求,请求首页获取issue_id值和sl-session

第一次报468

第三步:第二次请求,请求 issue接口

issue_id值是第一次请求页面得内容

请求获取这两个重要的值

第四步,第三次请求,求verify接口

需要分析三个参数

issue_id参数由 issue接口返回

visitorId 设备指纹

result 由issue返回参数在经过一系列加工返回

跟栈

这个文件是临时生成得文件blob

重新刷新进入断点会消失

发现用来wasm模块加密

如何调用wasm模块,请看这一篇文章JS逆向之Wasm逆向过程-CSDN博客,有兴趣可以借助可以借助ai去分析成python代码或者js代码。以下是JS代码调用,python借助subprocess库去获取值

const fs = require('fs');
const wasmCode = fs.readFileSync('7cfa74f2.wasm');// const deasync = require('deasync');function aa(e) {e =JSON.parse(e)WebAssembly.instantiate(wasmCode, {"env": {},"wasi_snapshot_preview1": {}}).then(result => {const instance = result.instance;const reset = instance.exports.resetconst arg = instance.exports.argconst calc = instance.exports.calcconst ret = instance.exports.retaaaa = function() {return reset(),e.map(function(e) {return arg(e)}),Array(calc()).fill(-1).map(function() {return ret()})}()console.log(JSON.stringify(aaaa))})}
// aa([1,2,3,4,5,6,7,8,9])aa(process.argv[2])

python核心代码,记住,传入的字符串列表,在调用JS时强转为数组

result = subprocess.run(["node", "123.js",str(response.json()['data']['data'])], capture_output=True, text=True).stdout.strip()

顺利出值

接下来就算最后一个参数visitorId值

直接搜索参数

进入i.load()

发现就是个指纹库创建得,直接生成设备指纹

const Fingerprint2 = require('fingerprintjs2');
Fingerprint2.get(components => {
const values = components.map(component => component.value);
const murmur = Fingerprint2.x64hash128(values.join(''), 31);
console.log(murmur);
});

稍微整理,核心代码

const fs = require('fs');
const wasmCode = fs.readFileSync('7cfa74f2.wasm');// const deasync = require('deasync');const Fingerprint2 = require('fingerprintjs2');
Fingerprint2.get(components => {
const values = components.map(component => component.value);
const murmur = Fingerprint2.x64hash128(values.join(''), 31);
console.log(murmur);
});
function aa(e) {e =JSON.parse(e)WebAssembly.instantiate(wasmCode, {"env": {},"wasi_snapshot_preview1": {}}).then(result => {const instance = result.instance;const reset = instance.exports.resetconst arg = instance.exports.argconst calc = instance.exports.calcconst ret = instance.exports.retaaaa = function() {return reset(),e.map(function(e) {return arg(e)}),Array(calc()).fill(-1).map(function() {return ret()})}()console.log(JSON.stringify(aaaa))})}
// aa([1,2,3,4,5,6,7,8,9])aa(process.argv[2])

subprocess获取的值是字符串,强转类型

result = subprocess.run(["node", "123.js",str(response.json()['data']['data'])], capture_output=True, text=True).stdout.strip()
visitorId = result.split('\n')[0]
result = json.loads(result.split('\n')[1])
data = {"issue_id": response.json()['data']['issue_id'],"result":result,"serials": [],"client": {"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36","platform": "Win32","language": "zh-CN,zh","vendor": "Google Inc.","screen": [1920,1080],"visitorId": visitorId,"score": 100,"target": ["27"]}
}

顺利得出

第四次请求携带cookies顺利获取数据

cookies={"sl-challenge-jwt": response.json()['data']['jwt']}

 

总结:

绕过雷池到获取数据一共需要四次请求

第一次请求首页。状态码468,获取issue_id

第二次请求issue接口,data携带issue_id ,获取issue_id和列表

第三次请求issue接口,data携带issue_id,JS逆向跟栈调用wasm传入列表作为参数获取result,visitorId为设备指纹,通过fingerprintjs2获取即可。获取jwt参数也就是cookie键sl_jwt_session的值

第四次携带cookie成功获取数据

 

        

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92483.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92483.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92483.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23种设计模式解析--行为型

行为型模式(协作的艺术) 观察者模式 观察者模式详解 模式定义 观察者模式(Observer Pattern)是一种行为设计模式,用于建立对象间一对多的依赖关系。当一个对象(Subject)状态变化时,所…

Linux系统之lua 详解

命令简介 lua 是 Lua 语言的解释器,用于加载和执行 Lua 程序(包括文本源码和预编译的二进制文件)。它支持两种运行模式:批处理模式(执行指定脚本文件)和交互式模式(逐行读取并执行输入的命令&am…

visual studio 无明显错误,但是无法编译成功解决—仙盟创梦IDE

往后面查看rror CS0246: 未能找到类型或命名空间名“SimpleClass”(是否缺少 using 指令或程序集引用?)修复阿雪技术观在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者。无论是分享代码、撰写技术博客,还是…

《论文阅读》传统CoT方法和提出的CoT Prompting的区分

论文:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models作者对传统CoT方法和本文提出的CoT Prompting的区分。1. 传统方法的局限性 (1) 基于微调的CoT(Rationale-Augmented Training) 实现方式:需人工标注大…

Minio 高性能分布式对象存储

1、什么是对象存储? 描述: 对象存储(Object Storage)是一种存储数据的计算机体系结构,它以对象的形式存储和管理数据。与传统的文件系统和块存储不同,对象存储将数据作为对象存储在分布式的存储集群中,每个对象都有一…

[深度学习] 大模型学习4-RAG技术全景解析

在大语言模型基础知识一文中,检索增强生成(Retrieval-Augmented Generation,简称 RAG)技术作为构建大语言模型(Large Language Model,简称 LLM)应用的一种方式已被简要提及,本文将详…

4G/5G无线电单元系统

4G/5G无线电单元系统 ADI公司的核心技术和领域专业知识帮助客户在全球范围内规划、设计、打造更出色的高性能通信系统。 我们的无线电单元(RU)设计平台利用新一代技术来提供高性能解决方案,帮助客户消除设计障碍、缩短产品开发周期,加快产品上市时间。 价…

HarvardX TinyML小笔记1(番外2:神经网络)

1 介绍 图片来自:https://zh.wikipedia.org/zh-cn/%E4%BA%BA%E5%B7%A5%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C 神经网络一直感觉挺神奇的,江湖也说可解释性很差,无论如何还是学学吧。借这次学习哈佛的TinyML,也就顺带弄了。 这里…

计算机网络 第2章通信基础(竟成)

第 2 章 物理层【考纲内容】1.通信基础 (1) 信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念 (2) 奈奎斯特定理与香农定理 (3) 编码与调制 (4) 电路交换、报文交换与分组交换 (5) 数据报与虚电路2.传输介质 (1) 双绞线、同轴电缆、光纤与无线传输介质;(2…

2025-08-09通过授权码的方式给exe程序充值

2025-08-09通过授权码的方式给exe程序充值主要点: 一次性授权机制: 新增 .used_licenses 文件记录所有已使用的授权码 每次激活前检查授权码是否在已使用列表中 激活成功后立即将授权码标记为已使用 时效性验证: 授权码包含过期时间戳&#x…

工具类-高效集合差异计算工具DiffWrapper

集合差异工具类-DiffWrapper 原因 在编辑过程中,肯定会存在对于子表的更新操作,这种更新分为三种: 要加的, 要删的,要更新的,并且传参只有一个modifyVO的, 每一个都写有点过于冗余,故考虑提取一…

SimBA算法实现过程

文章目录添加噪声衡量扰动示例数值总结高级索引变量名代码总体代码添加噪声 操作:将频率扰动通过trans( )转为像素域扰动加到原始图像上(trans返回频率域转换为像素域的结果) expanded (images_batch[remaining_indices] # 原始图像&…

【面试题】cookie和session 的区别

文章目录一、核心定义与存储位置二、关键区别对比三、典型使用场景四、关联与依赖总结在Web开发中, Cookie和 Session是两种常用的状态管理机制,用于在无状态的HTTP协议中保存用户信息(如登录状态、偏好设置等)。二者的核心区别体…

【机器学习】算法调参的两种方式:网格搜索(枚举)、随机搜索

文章目录一、网格搜索:穷举式的最优解寻找1、数学推导过程1. 搜索空间的数学结构2. 优化问题的数学性质3. 收敛性分析4. 误差分析2、为什么网格搜索有效?1. 全局最优性保证2. 可重现性与稳定性3. 参数敏感性分析3、适用场景与局限性二、随机搜索&#xf…

免费PDF翻译 离线自建

https://github.com/Byaidu/PDFMathTranslate/blob/main/docs/README_zh-CN.md https://github.com/Byaidu/PDFMathTranslate/releases 方法 针对不同的使用案例&#xff0c;我们提供不同的方法来使用我们的程序&#xff1a;1. UV 安装 安装 Python (3.10 < 版本 < 3.12)…

DeepSeek智能考试系统智能体

一、deepseek-app-1.0 1、系统要求 CentOS 7.9Python 3.8Node.js 16MySQL 8.0 2、部署步骤 运行初始化脚本&#xff1a;./scripts/setup.sh初始化数据库&#xff1a;mysql -u root -p < scripts/init_db.sql启动服务&#xff1a;./scripts/start.sh 3、访问地址 前端&…

4深度学习Pytorch-神经网络--损失函数(sigmoid、Tanh、ReLU、LReLu、softmax)

目录 激活函数 1. Sigmoid 2. Tanh 函数&#xff08;双曲正切&#xff09; 3. ReLU 函数 4. Leaky ReLU (LReLU) 5. Softmax 总结对比表 损失函数选择 激活函数 激活函数是神经网络中每个神经元&#xff08;节点&#xff09;的核心组成部分。它接收上一层所有输入的加权…

探索Trae:使用Trae CN爬取 Gitbook 电子书

在以前使用过Cursor&#xff0c;但是后期由于试用资源很少&#xff0c;免费资源用完我就卸载掉啦&#xff0c;最近又需要开展相关工作&#xff0c;因此下载了最新版的Trae。Trae 2.0最近很火&#xff0c;我正好想要爬取某一个Gitbook 电子书&#xff0c;因此尝试使用Trae和Pyth…

嵌入式知识日常问题记录及用法总结(一)

文章目录摘要问题一、内核启动流程1.1 ARM内核上电复位与BootROM执行​启动代码&#xff08;Startup Code&#xff09;执行跳转到用户程序1.2 内存管理问题二、C语言基础2.1 常量指针和指针常量区别2.2.函数指针和指针函数区别2.3 关键字Volatile2.4 队列结构体数据摘要 嵌入式…

使用Navicat备份数据库MySQL、PostGreSQL等

Navicat 支持多种数据库系统&#xff0c;可通过手动或自动方式进行数据备份&#xff0c;整个过程还是相对简单且直观&#xff0c;比自己敲命令行方便多了。一、备份步骤1.1、手动备份1、打开Navicat并连接数据库&#xff1a;首先&#xff0c;启动Navicat并连接到您的MySQL数据库…