爬蟲逆向之雷池waf

本文章中所有內容僅供學習交流使用,不用于其他任何目的。否則由此產生的一切后果均與作者無關!

雷池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數據庫…