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
02b15552c9
commit
f91689fd45
@ -1,4 +1,4 @@
|
||||
# Aplikacje Desktopowe Electron
|
||||
# Aplikacje desktopowe Electron
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -32,17 +32,17 @@ 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 przez aplikację Electron** lub inne podatności, 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** lub innych luk w zabezpieczeniach, 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:
|
||||
|
||||
- **`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`** - pusty domyślnie.
|
||||
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - jest wyłączone domyślnie. Ograniczy to działania, które NodeJS może wykonywać.
|
||||
- **`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ć.
|
||||
- Integracja Node w Workerach
|
||||
- **`nodeIntegrationInSubframes`** - jest `wyłączone` domyślnie.
|
||||
- Jeśli **`nodeIntegration`** jest **włączone**, pozwoli to na użycie **API Node.js** w stronach internetowych, które są **ładowane w iframe** w aplikacji Electron.
|
||||
- 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.
|
||||
- Jeśli **`nodeIntegration`** jest **wyłączone**, wówczas preloady będą ładowane w iframe.
|
||||
|
||||
Przykład konfiguracji:
|
||||
@ -97,13 +97,13 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" />
|
||||
```
|
||||
### Capture traffic
|
||||
|
||||
Zmodyfikuj konfigurację start-main i dodaj użycie proxy, takiego jak:
|
||||
Zmień 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",
|
||||
```
|
||||
## Wstrzykiwanie kodu lokalnego w Electron
|
||||
|
||||
Jeśli możesz lokalnie uruchomić aplikację Electron, istnieje możliwość, że możesz sprawić, aby wykonała dowolny kod javascript. Sprawdź jak w:
|
||||
Jeśli możesz lokalnie uruchomić aplikację Electron, istnieje możliwość, że możesz sprawić, aby wykonała dowolny kod JavaScript. Sprawdź jak w:
|
||||
|
||||
{{#ref}}
|
||||
../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md
|
||||
@ -111,7 +111,7 @@ Jeśli możesz lokalnie uruchomić aplikację Electron, istnieje możliwość,
|
||||
|
||||
## RCE: XSS + nodeIntegration
|
||||
|
||||
Jeśli **nodeIntegration** jest ustawione na **włączone**, JavaScript na stronie internetowej może łatwo korzystać z funkcji Node.js, po prostu wywołując `require()`. Na przykład, sposób uruchomienia aplikacji kalkulatora w systemie Windows to:
|
||||
Jeśli **nodeIntegration** jest ustawione na **on**, JavaScript na stronie internetowej może łatwo korzystać z funkcji Node.js, po prostu wywołując `require()`. Na przykład, sposób uruchomienia aplikacji kalkulatora w systemie Windows to:
|
||||
```html
|
||||
<script>
|
||||
require("child_process").exec("calc")
|
||||
@ -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 nim, 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 zabezpieczeniach, 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ść plików wewnętrznych**, możesz spróbować użyć go do **kradzieży poświadczeń za pomocą phishingu**.
|
||||
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**.
|
||||
|
||||
Przede wszystkim musisz wiedzieć, co się dzieje, gdy próbujesz otworzyć nowy URL, sprawdzając kod JS w interfejsie:
|
||||
Przede wszystkim musisz wiedzieć, co się dzieje, gdy próbujesz otworzyć nowy URL, sprawdzając kod JS w interfejsie użytkownika:
|
||||
```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)
|
||||
@ -298,19 +298,19 @@ import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
**[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** wskazuje na kilka interesujących **funkcji** udostępnionych przez obiekt **`app`** z modułu zdalnego:
|
||||
|
||||
- **`app.relaunch([options])`**
|
||||
- **Restartuje** aplikację, **zatrzymując** bieżącą instancję i **uruchamiając** nową. Przydatne do **aktualizacji aplikacji** lub znaczących **zmian stanu**.
|
||||
- **Restartuje** aplikację, **kończąc** bieżącą instancję i **uruchamiając** nową. Przydatne do **aktualizacji aplikacji** lub znaczących **zmian stanu**.
|
||||
- **`app.setAppLogsPath([path])`**
|
||||
- **Definiuje** lub **tworzy** katalog do przechowywania **logów aplikacji**. Logi można **pobierać** lub **modyfikować** za pomocą **`app.getPath()`** lub **`app.setPath(pathName, newPath)`**.
|
||||
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
|
||||
- **Rejestruje** bieżący plik wykonywalny jako **domyślny handler** dla określonego **protokołu**. Możesz podać **niestandardową ścieżkę** i **argumenty**, jeśli to konieczne.
|
||||
- **`app.setUserTasks(tasks)`**
|
||||
- **Dodaje** zadania do **kategorii Zadań** w **Liście Szybkiego Dostępu** (na Windows). Każde zadanie może kontrolować, jak aplikacja jest **uruchamiana** lub jakie **argumenty** są przekazywane.
|
||||
- **Dodaje** zadania do **kategorii Zadań** w **Jump List** (na Windows). Każde zadanie może kontrolować, jak aplikacja jest **uruchamiana** lub jakie **argumenty** są przekazywane.
|
||||
- **`app.importCertificate(options, callback)`**
|
||||
- **Importuje** **certyfikat PKCS#12** do systemowego **magazynu certyfikatów** (tylko Linux). **Callback** może być użyty do obsługi wyniku.
|
||||
- **`app.moveToApplicationsFolder([options])`**
|
||||
- **Przenosi** aplikację do **folderu Aplikacji** (na macOS). Pomaga zapewnić **standardową instalację** dla użytkowników Maca.
|
||||
- **`app.setJumpList(categories)`**
|
||||
- **Ustawia** lub **usuwa** **niestandardową Listę Szybkiego Dostępu** na **Windows**. Możesz określić **kategorie**, aby zorganizować, jak zadania pojawiają się dla użytkownika.
|
||||
- **Ustawia** lub **usuwa** **niestandardowy Jump List** na **Windows**. Możesz określić **kategorie**, aby zorganizować, jak zadania pojawiają się dla użytkownika.
|
||||
- **`app.setLoginItemSettings(settings)`**
|
||||
- **Konfiguruje**, które **pliki wykonywalne** uruchamiają się przy **logowaniu** wraz z ich **opcjonalnymi ustawieniami** (tylko macOS i Windows).
|
||||
```javascript
|
||||
@ -336,9 +336,9 @@ console.log('Recent Places:', recentPlaces);
|
||||
```
|
||||
### **subscribeNotification / subscribeWorkspaceNotification**
|
||||
|
||||
* **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**.
|
||||
* **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**.
|
||||
|
||||
### **getUserDefault / setUserDefault**
|
||||
|
||||
@ -356,14 +356,14 @@ 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)
|
||||
|
||||
## **Tools**
|
||||
## **Narzędzia**
|
||||
|
||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity) to narzędzie do identyfikacji błędów konfiguracyjnych i wzorców bezpieczeństwa w aplikacjach opartych na Electron.
|
||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity) to narzędzie do identyfikacji błędnych konfiguracji i wzorców bezpieczeń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ć.
|
||||
|
||||
## Labs
|
||||
## Laboratoria
|
||||
|
||||
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.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user