Translated ['src/network-services-pentesting/pentesting-web/electron-des

This commit is contained in:
Translator 2025-01-07 18:44:21 +00:00
parent f91689fd45
commit 19f998ec1b

View File

@ -1,4 +1,4 @@
# Aplikacje desktopowe Electron
# Aplikacje Desktopowe Electron
{{#include ../../../banners/hacktricks-training.md}}
@ -32,14 +32,14 @@ let win = new BrowserWindow()
//Open Renderer Process
win.loadURL(`file://path/to/index.html`)
```
Ustawienia **procesu renderera** mogą być **konfigurowane** w **procesie głównym** w pliku main.js. Niektóre z konfiguracji **zapobiegną uzyskaniu RCE** lub innych luk w zabezpieczeniach, jeśli **ustawienia są poprawnie skonfigurowane**.
Ustawienia **procesu renderera** mogą być **konfigurowane** w **procesie głównym** w pliku main.js. Niektóre z konfiguracji **zapobiegną uzyskaniu RCE przez aplikację Electron** lub inne podatności, jeśli **ustawienia są poprawnie skonfigurowane**.
Aplikacja electron **może uzyskać dostęp do urządzenia** za pomocą interfejsów API Node, chociaż można ją skonfigurować, aby temu zapobiec:
Aplikacja Electron **może uzyskać dostęp do urządzenia** za pomocą interfejsów API Node, chociaż można ją skonfigurować, aby temu zapobiec:
- **`nodeIntegration`** - jest `wyłączone` domyślnie. Jeśli włączone, pozwala na dostęp do funkcji node z procesu renderera.
- **`contextIsolation`** - jest `włączone` domyślnie. Jeśli wyłączone, procesy główny i renderera nie są izolowane.
- **`preload`** - domyślnie puste.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - jest wyłączone domyślnie. Ograniczy to działania, które NodeJS może wykonać.
- **`preload`** - pusty domyślnie.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - jest wyłączone domyślnie. Ograniczy działania, które NodeJS może wykonać.
- Integracja Node w Workerach
- **`nodeIntegrationInSubframes`** - jest `wyłączone` domyślnie.
- Jeśli **`nodeIntegration`** jest **włączone**, umożliwi to korzystanie z **API Node.js** na stronach internetowych, które są **ładowane w iframe** w aplikacji Electron.
@ -97,7 +97,7 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" />
```
### Capture traffic
Zmień konfigurację start-main i dodaj użycie proxy, takiego jak:
Zmodyfikuj konfigurację start-main i dodaj użycie proxy, takiego jak:
```javascript
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
```
@ -230,7 +230,7 @@ window.open(
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
Ponadto, udostępniana jest inna metoda **odczytu wewnętrznego pliku**, podkreślająca krytyczną lukę w odczycie lokalnych plików w aplikacji desktopowej Electron. Polega to na wstrzyknięciu skryptu w celu wykorzystania aplikacji i eksfiltracji danych:
Ponadto, udostępniona jest inna metoda **odczytu wewnętrznego pliku**, podkreślająca krytyczną lukę w odczycie lokalnych plików w aplikacji desktopowej Electron. Polega to na wstrzyknięciu skryptu w celu wykorzystania aplikacji i eksfiltracji danych:
```html
<br /><br /><br /><br />
<h1>
@ -248,14 +248,14 @@ frames[0].document.body.innerText
```
## **RCE: XSS + Stary Chromium**
Jeśli **chromium** używane przez aplikację jest **stare** i istnieją **znane** **luki** w zabezpieczeniach, może być możliwe **wykorzystanie tego i uzyskanie RCE przez XSS**.\
Jeśli **chromium** używane przez aplikację jest **stare** i istnieją **znane** **luki** w nim, może być możliwe **wykorzystanie tego i uzyskanie RCE przez XSS**.\
Możesz zobaczyć przykład w tym **opisie**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **Phishing XSS za pomocą obejścia regex URL wewnętrznego**
Zakładając, że znalazłeś XSS, ale **nie możesz wywołać RCE ani ukraść wewnętrznych plików**, możesz spróbować wykorzystać to do **kradzieży poświadczeń za pomocą phishingu**.
Zakładając, że znalazłeś XSS, ale **nie możesz wywołać RCE ani ukraść plików wewnętrznych**, możesz spróbować wykorzystać to do **kradzieży poświadczeń za pomocą phishingu**.
Przede wszystkim musisz wiedzieć, co się dzieje, gdy próbujesz otworzyć nowy URL, sprawdzając kod JS w interfejsie użytkownika:
Przede wszystkim musisz wiedzieć, co się dzieje, gdy próbujesz otworzyć nowy URL, sprawdzając kod JS w interfejsie:
```javascript
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)
@ -291,7 +291,7 @@ mainWindow = new BrowserWindow({
})
remoteMain.enable(mainWindow.webContents)
```
Następnie proces renderera może importować obiekty z modułu, który lubi:
Następnie proces renderera może importować obiekty z modułu, tak jak:
```javascript
import { dialog, getCurrentWindow } from '@electron/remote'
```
@ -321,7 +321,7 @@ Native.app.exit()
Główne API do uzyskiwania dostępu do preferencji systemowych i emitowania zdarzeń systemowych w Electron. Metody takie jak **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault** i **setUserDefault** są wszystkie **częścią** tego modułu.
**Przykład użycia:**
**Example usage:**
```javascript
const { systemPreferences } = require('electron');
@ -336,13 +336,13 @@ console.log('Recent Places:', recentPlaces);
```
### **subscribeNotification / subscribeWorkspaceNotification**
* **Nasłuchuje** **powiadomień natywnych macOS** za pomocą NSDistributedNotificationCenter.
* Przed **macOS Catalina** można było podsłuchiwać **wszystkie** powiadomienia rozproszone, przekazując **nil** do CFNotificationCenterAddObserver.
* Po **Catalina / Big Sur** aplikacje w piaskownicy mogą nadal **subskrybować** **wiele zdarzeń** (na przykład, **blokady/odblokowania ekranu**, **montowanie woluminów**, **aktywność sieciowa** itp.) rejestrując powiadomienia **po nazwie**.
* **Nasłuchuje** **natychmiastowych powiadomień macOS** za pomocą NSDistributedNotificationCenter.
* Przed **macOS Catalina** można było podsłuchiwać **wszystkie** rozproszone powiadomienia, przekazując **nil** do CFNotificationCenterAddObserver.
* Po **Catalina / Big Sur** aplikacje w piaskownicy mogą nadal **subskrybować** **wiele zdarzeń** (na przykład **blokady/odblokowania ekranu**, **montowanie woluminów**, **aktywność sieciowa** itp.) rejestrując powiadomienia **po nazwie**.
### **getUserDefault / setUserDefault**
* **Interfejsy** z **NSUserDefaults**, które przechowują **preferencje** aplikacji lub **globalne** na macOS.
* **Interfejsuje** z **NSUserDefaults**, który przechowuje **preferencje** aplikacji lub **globalne** na macOS.
* **getUserDefault** może **pobierać** wrażliwe informacje, takie jak **ostatnie lokalizacje plików** lub **geograficzna lokalizacja użytkownika**.
@ -356,14 +356,26 @@ Ta funkcja wyświetla dany plik w menedżerze plików, co **może automatycznie
Aby uzyskać więcej informacji, sprawdź [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
## **Narzędzia**
## Content Security Policy
- [**Electronegativity**](https://github.com/doyensec/electronegativity) to narzędzie do identyfikacji błędnych konfiguracji i wzorców bezpieczeństwa w aplikacjach opartych na Electron.
Aplikacje Electron powinny mieć **Politykę Bezpieczeństwa Treści (CSP)**, aby **zapobiegać atakom XSS**. **CSP** to **standard bezpieczeństwa**, który pomaga **zapobiegać** **wykonywaniu** **niezaufanego kodu** w przeglądarce.
Zwykle jest **konfigurowany** w pliku **`main.js`** lub w szablonie **`index.html`** z CSP wewnątrz **meta tagu**.
Aby uzyskać więcej informacji, sprawdź:
{{#ref}}
pentesting-web/content-security-policy-csp-bypass/
{{#endref}}
## **Tools**
- [**Electronegativity**](https://github.com/doyensec/electronegativity) to narzędzie do identyfikacji błędów konfiguracyjnych i wzorców antybezpieczeństwa w aplikacjach opartych na Electron.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) to otwarty plugin VS Code dla aplikacji Electron, który wykorzystuje Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) do sprawdzania podatnych bibliotek stron trzecich.
- [**Electro.ng**](https://electro.ng/): Musisz to kupić.
## Laboratoria
## Labs
W [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) możesz znaleźć laboratorium do eksploatacji podatnych aplikacji Electron.