mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/mobile-pentesting/ios-pentesting/ios-pentesting-without
This commit is contained in:
		
							parent
							
								
									4db54d34a4
								
							
						
					
					
						commit
						f27c803114
					
				@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## Główna idea
 | 
			
		||||
 | 
			
		||||
Aplikacje podpisane z **uprawnieniem `get_task_allow`** pozwalają aplikacjom innych firm na uruchomienie funkcji **`task_for_pid()`** z identyfikatorem procesu początkowej aplikacji jako argumentem, aby uzyskać port zadania nad nią (móc ją kontrolować i uzyskać dostęp do jej pamięci).
 | 
			
		||||
Aplikacje podpisane z **uprawnieniem `get_task_allow`** pozwalają aplikacjom stron trzecich uruchomić funkcję **`task_for_pid()`** z identyfikatorem procesu początkowej aplikacji jako argument, aby uzyskać port zadania nad nią (móc ją kontrolować i uzyskać dostęp do jej pamięci).
 | 
			
		||||
 | 
			
		||||
Jednak nie jest to tak proste, jak po prostu pobranie IPA, ponowne podpisanie go z uprawnieniem i wgranie z powrotem na urządzenie. Dzieje się tak z powodu ochrony FairPlay. Gdy podpis aplikacji się zmienia, klucz DRM (Digital Rights Management) jest **unieważniony i aplikacja nie będzie działać**.
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@ Na starym urządzeniu z jailbreakiem możliwe jest zainstalowanie IPA, **odszyfr
 | 
			
		||||
 | 
			
		||||
## Uzyskanie odszyfrowanego IPA
 | 
			
		||||
 | 
			
		||||
### Pobierz z Apple
 | 
			
		||||
### Pobierz to od Apple
 | 
			
		||||
 | 
			
		||||
1. Zainstaluj aplikację do testowania na iPhonie
 | 
			
		||||
2. Zainstaluj i uruchom [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) na swoim macos
 | 
			
		||||
@ -29,7 +29,7 @@ Sprawdź [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](http
 | 
			
		||||
 | 
			
		||||
Aby odszyfrować IPA, zamierzamy je zainstalować. Jednak jeśli masz starego iPhone'a z jailbreakiem, potencjalnie jego wersja nie będzie wspierana przez aplikację, ponieważ zazwyczaj aplikacje wspierają tylko najnowsze wersje.
 | 
			
		||||
 | 
			
		||||
Aby go zainstalować, po prostu rozpakuj IPA:
 | 
			
		||||
Aby je zainstalować, po prostu rozpakuj IPA:
 | 
			
		||||
```bash
 | 
			
		||||
unzip redacted.ipa -d unzipped
 | 
			
		||||
```
 | 
			
		||||
@ -63,13 +63,13 @@ ideviceinstaller -i resigned.ipa -w
 | 
			
		||||
 | 
			
		||||
### Włącz tryb dewelopera (iOS 16+)
 | 
			
		||||
 | 
			
		||||
Od iOS 16 Apple wprowadziło **Tryb dewelopera**: każdy binarny plik, który zawiera `get_task_allow` *lub* jest podpisany certyfikatem deweloperskim, odmówi uruchomienia, dopóki Tryb dewelopera nie zostanie włączony na urządzeniu. Nie będziesz również mógł dołączyć Frida/LLDB, chyba że ten flag jest włączony.
 | 
			
		||||
Od iOS 16 Apple wprowadziło **Tryb Dewelopera**: każdy binarny plik, który zawiera `get_task_allow` *lub* jest podpisany certyfikatem deweloperskim, odmówi uruchomienia, dopóki Tryb Dewelopera nie zostanie włączony na urządzeniu. Nie będziesz również mógł dołączyć Frida/LLDB, chyba że ten flag jest włączony.
 | 
			
		||||
 | 
			
		||||
1. Zainstaluj lub wgraj **dowolny** podpisany przez dewelopera plik IPA na telefon.
 | 
			
		||||
2. Przejdź do **Ustawienia → Prywatność i bezpieczeństwo → Tryb dewelopera** i włącz go.
 | 
			
		||||
3. Urządzenie zrestartuje się; po wprowadzeniu kodu dostępu zostaniesz poproszony o **Włączenie** Trybu dewelopera.
 | 
			
		||||
3. Urządzenie zrestartuje się; po wprowadzeniu kodu dostępu zostaniesz poproszony o **Włączenie** Trybu Dewelopera.
 | 
			
		||||
 | 
			
		||||
Tryb dewelopera pozostaje aktywny, dopóki go nie wyłączysz lub nie wyczyścisz telefonu, więc ten krok należy wykonać tylko raz na urządzenie. [Dokumentacja Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) wyjaśnia implikacje bezpieczeństwa.
 | 
			
		||||
Tryb Dewelopera pozostaje aktywny, dopóki go nie wyłączysz lub nie wyczyścisz telefonu, więc ten krok należy wykonać tylko raz na urządzenie. [Dokumentacja Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) wyjaśnia implikacje bezpieczeństwa.
 | 
			
		||||
 | 
			
		||||
### Nowoczesne opcje sideloadingu
 | 
			
		||||
 | 
			
		||||
@ -77,14 +77,14 @@ Obecnie istnieje kilka dojrzałych sposobów na sideloading i utrzymywanie podpi
 | 
			
		||||
 | 
			
		||||
| Narzędzie | Wymagania | Mocne strony | Ograniczenia |
 | 
			
		||||
|-----------|-----------|--------------|--------------|
 | 
			
		||||
| **AltStore 2 / SideStore** | macOS/Windows/Linux jako towarzysz, który podpisuje IPA co 7 dni za pomocą darmowego profilu dewelopera | Automatyczne przeładowanie przez Wi-Fi, działa do iOS 17 | Wymaga komputera w tej samej sieci, limit 3 aplikacji nałożony przez Apple |
 | 
			
		||||
| **TrollStore 1/2** | Urządzenie na iOS 14 – 15.4.1 podatne na błąd CoreTrust | *Permanentne* podpisywanie (brak limitu 7 dni); brak komputera wymagany po zainstalowaniu | Nieobsługiwane na iOS 15.5+ (błąd naprawiony) |
 | 
			
		||||
| **AltStore 2 / SideStore** | macOS/Windows/Linux jako towarzysz, który podpisuje IPA co 7 dni za pomocą darmowego profilu dewelopera | Automatyczne przeładowanie przez Wi-Fi, działa do iOS 17 | Wymaga komputera w tej samej sieci, limit 3 aplikacji narzucony przez Apple |
 | 
			
		||||
| **TrollStore 1/2** | Urządzenie na iOS 14 – 15.4.1 podatne na błąd CoreTrust | *Permanentne* podpisywanie (brak limitu 7 dni); nie wymaga komputera po zainstalowaniu | Nieobsługiwane na iOS 15.5+ (błąd naprawiony) |
 | 
			
		||||
 | 
			
		||||
Dla rutynowych testów pentestowych na aktualnych wersjach iOS Alt/Side-Store są zazwyczaj najbardziej praktycznym wyborem.
 | 
			
		||||
Dla rutynowych testów pentestingowych na aktualnych wersjach iOS Alt/Side-Store są zazwyczaj najbardziej praktycznym wyborem.
 | 
			
		||||
 | 
			
		||||
### Hooking / dynamiczna instrumentacja
 | 
			
		||||
 | 
			
		||||
Możesz podłączyć swoją aplikację dokładnie tak, jak na urządzeniu z jailbreakiem, gdy jest podpisana z `get_task_allow` **i** Tryb dewelopera jest włączony:
 | 
			
		||||
Możesz podłączyć swoją aplikację dokładnie tak, jak na urządzeniu z jailbreakiem, gdy jest podpisana z `get_task_allow` **i** Tryb Dewelopera jest włączony:
 | 
			
		||||
```bash
 | 
			
		||||
# Spawn & attach with objection
 | 
			
		||||
objection -g "com.example.target" explore
 | 
			
		||||
@ -94,9 +94,9 @@ frida -U -f com.example.target -l my_script.js --no-pause
 | 
			
		||||
```
 | 
			
		||||
Najnowsze wydania Frida (>=16) automatycznie obsługują uwierzytelnianie wskaźników i inne środki zaradcze iOS 17, więc większość istniejących skryptów działa od razu.
 | 
			
		||||
 | 
			
		||||
### Zautomatyzowana analiza dynamiczna z MobSF (bez jailbreaka)
 | 
			
		||||
### Zautomatyzowana analiza dynamiczna z MobSF (bez jailbreak)
 | 
			
		||||
 | 
			
		||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) może instrumentować IPA podpisane przez dewelopera na prawdziwym urządzeniu, używając tej samej techniki (`get_task_allow`) i zapewnia interfejs webowy z przeglądarką systemu plików, przechwytywaniem ruchu i konsolą Frida【】. Najszybszym sposobem jest uruchomienie MobSF w Dockerze, a następnie podłączenie iPhone'a przez USB:
 | 
			
		||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) może instrumentować IPA podpisane przez dewelopera na prawdziwym urządzeniu, używając tej samej techniki (`get_task_allow`) i zapewnia interfejs webowy z przeglądarką systemu plików, przechwytywaniem ruchu i konsolą Frida【†L2-L3】. Najszybszym sposobem jest uruchomienie MobSF w Dockerze, a następnie podłączenie iPhone'a przez USB:
 | 
			
		||||
```bash
 | 
			
		||||
docker pull opensecurity/mobile-security-framework-mobsf:latest
 | 
			
		||||
docker run -p 8000:8000 --privileged \
 | 
			
		||||
@ -109,7 +109,7 @@ MobSF automatycznie wdroży binarny plik, włączy serwer Frida w sandboxie apli
 | 
			
		||||
### iOS 17 i uwagi dotyczące trybu blokady
 | 
			
		||||
 | 
			
		||||
* **Tryb blokady** (Ustawienia → Prywatność i bezpieczeństwo) blokuje dynamiczny linker przed ładowaniem niesygnowanych lub zewnętrznie sygnowanych bibliotek dynamicznych. Podczas testowania urządzeń, które mogą mieć włączony ten tryb, upewnij się, że jest **wyłączony**, inaczej sesje Frida/objection zakończą się natychmiast.
 | 
			
		||||
* Uwierzytelnianie wskaźników (PAC) jest egzekwowane w całym systemie na urządzeniach A12 i nowszych. Frida ≥16 transparentnie obsługuje usuwanie PAC — wystarczy, że będziesz na bieżąco aktualizować zarówno *frida-server*, jak i narzędzia Python/CLI, gdy pojawi się nowa główna wersja iOS.
 | 
			
		||||
* Uwierzytelnianie wskaźników (PAC) jest egzekwowane w całym systemie na urządzeniach A12 i nowszych. Frida ≥16 transparentnie obsługuje usuwanie PAC — wystarczy, że będziesz na bieżąco aktualizować zarówno *frida-server*, jak i zestaw narzędzi Python/CLI, gdy pojawi się nowa główna wersja iOS.
 | 
			
		||||
 | 
			
		||||
## Odniesienia
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,100 @@
 | 
			
		||||
# Request Smuggling w downgradowaniu HTTP/2
 | 
			
		||||
# Request Smuggling in HTTP/2 Downgrades
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
**Sprawdź post [https://portswigger.net/research/http-2-downgrades](https://portswigger.net/research/http-2-downgrades)**
 | 
			
		||||
HTTP/2 jest ogólnie uważany za odporny na klasyczne request-smuggling, ponieważ długość każdej ramki DATA jest jawna. **Ta ochrona znika, gdy front-end proxy „downgraduje” żądanie do HTTP/1.x przed przesłaniem go do back-endu**. W momencie, gdy dwa różne parsery (front-end HTTP/2 i back-end HTTP/1) próbują ustalić, gdzie kończy się jedno żądanie, a zaczyna następne, wszystkie stare sztuczki desynchronizacji wracają – plus kilka nowych.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## Dlaczego dochodzi do downgrade'ów
 | 
			
		||||
 | 
			
		||||
1. Przeglądarki już obsługują HTTP/2, ale wiele starszych infrastruktur źródłowych wciąż rozumie tylko HTTP/1.1.
 | 
			
		||||
2. Reverse-proxy (CDN, WAF, load-balancery) zatem kończą TLS + HTTP/2 na krawędzi i **przepisywują każde żądanie jako HTTP/1.1** dla źródła.
 | 
			
		||||
3. Krok tłumaczenia musi stworzyć *oba* nagłówki `Content-Length` **i/lub** `Transfer-Encoding: chunked`, aby źródło mogło określić długość ciała.
 | 
			
		||||
 | 
			
		||||
Kiedy front-end ufa długości ramki HTTP/2 **ale** back-end ufa CL lub TE, atakujący może zmusić je do niezgodności.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## Dwie dominujące klasy prymitywów
 | 
			
		||||
 | 
			
		||||
| Wariant | Długość front-endu | Długość back-endu | Typowy ładunek |
 | 
			
		||||
|---------|-------------------|------------------|----------------|
 | 
			
		||||
| **H2.TE** | ramka HTTP/2 | `Transfer-Encoding: chunked` | Osadź dodatkowe ciało wiadomości chunked, którego końcowe `0\r\n\r\n` *nie* jest wysyłane, więc back-end czeka na „następne” żądanie dostarczone przez atakującego. |
 | 
			
		||||
| **H2.CL** | ramka HTTP/2 | `Content-Length` | Wyślij *mniejszy* CL niż rzeczywiste ciało, aby back-end czytał poza granicą do następnego żądania. |
 | 
			
		||||
 | 
			
		||||
> Te są identyczne w duchu z klasycznymi TE.CL / CL.TE, tylko z HTTP/2 zastępującym jeden z parserów.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## Identyfikacja łańcucha downgrade'ów
 | 
			
		||||
 | 
			
		||||
1. Użyj **ALPN** w handshake TLS (`openssl s_client -alpn h2 -connect host:443`) lub **curl**:
 | 
			
		||||
```bash
 | 
			
		||||
curl -v --http2 https://target
 | 
			
		||||
```
 | 
			
		||||
Jeśli pojawi się `* Using HTTP2`, krawędź obsługuje H2.
 | 
			
		||||
2. Wyślij celowo źle sformułowane żądanie CL/TE *przez* HTTP/2 (Burp Repeater ma teraz rozwijane menu, aby wymusić HTTP/2). Jeśli odpowiedź to błąd HTTP/1.1, taki jak `400 Bad chunk`, masz dowód, że krawędź przekształciła ruch dla parsera HTTP/1 w dół.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## Workflow eksploatacji (przykład H2.TE)
 | 
			
		||||
```http
 | 
			
		||||
:method: POST
 | 
			
		||||
:path: /login
 | 
			
		||||
:scheme: https
 | 
			
		||||
:authority: example.com
 | 
			
		||||
content-length: 13      # ignored by the edge
 | 
			
		||||
transfer-encoding: chunked
 | 
			
		||||
 | 
			
		||||
5;ext=1\r\nHELLO\r\n
 | 
			
		||||
0\r\n\r\nGET /admin HTTP/1.1\r\nHost: internal\r\nX: X
 | 
			
		||||
```
 | 
			
		||||
1. **Front-end** odczytuje dokładnie 13 bajtów (`HELLO\r\n0\r\n\r\nGE`), myśli, że żądanie jest zakończone i przesyła tyle do źródła.
 | 
			
		||||
2. **Back-end** ufa nagłówkowi TE, kontynuuje odczyt, aż zobaczy *drugie* `0\r\n\r\n`, tym samym konsumując prefiks drugiego żądania atakującego (`GET /admin …`).
 | 
			
		||||
3. Reszta (`GET /admin …`) jest traktowana jako *nowe* żądanie w kolejce za żądaniem ofiary.
 | 
			
		||||
 | 
			
		||||
Zamień przemycone żądanie na:
 | 
			
		||||
* `POST /api/logout`, aby wymusić utrwalenie sesji
 | 
			
		||||
* `GET /users/1234`, aby ukraść zasób specyficzny dla ofiary
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## h2c smuggling (aktualizacje w czystym tekście)
 | 
			
		||||
 | 
			
		||||
Badanie z 2023 roku wykazało, że jeśli front-end przekazuje nagłówek HTTP/1.1 `Upgrade: h2c` do back-endu, który obsługuje HTTP/2 w czystym tekście, atakujący może tunelować *surowe* ramki HTTP/2 przez krawędź, która tylko walidowała HTTP/1.1. To omija normalizację nagłówków, zasady WAF i nawet zakończenie TLS.
 | 
			
		||||
 | 
			
		||||
Kluczowe wymagania:
 | 
			
		||||
* Krawędź przesyła **oba** nagłówki `Connection: Upgrade` i `Upgrade: h2c` bez zmian.
 | 
			
		||||
* Źródło przechodzi na HTTP/2 i zachowuje semantykę ponownego użycia połączenia, co umożliwia kolejkowanie żądań.
 | 
			
		||||
 | 
			
		||||
Łagodzenie jest proste – usuń lub twardo zakoduj nagłówek `Upgrade` na krawędzi, z wyjątkiem WebSocketów.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## Znaczące CVE w rzeczywistym świecie (2022-2025)
 | 
			
		||||
 | 
			
		||||
* **CVE-2023-25690** – zasady mod_proxy Apache HTTP Server mogły być łączone w celu rozdzielania i przemycania żądań. (naprawione w 2.4.56)
 | 
			
		||||
* **CVE-2023-25950** – przemycanie żądań/odpowiedzi w HAProxy 2.7/2.6, gdy parser HTX niewłaściwie obsługiwał żądania w potoku.
 | 
			
		||||
* **CVE-2022-41721** – Go `MaxBytesHandler` spowodował, że pozostałe bajty ciała były analizowane jako **HTTP/2** ramki, co umożliwiło przemycanie między protokołami.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## Narzędzia
 | 
			
		||||
 | 
			
		||||
* **Burp Request Smuggler** – od wersji v1.26 automatycznie testuje H2.TE/H2.CL i ukrytą obsługę ALPN. Włącz „HTTP/2 probing” w opcjach rozszerzenia.
 | 
			
		||||
* **h2cSmuggler** – PoC w Pythonie od Bishop Fox do automatyzacji ataku aktualizacji w czystym tekście:
 | 
			
		||||
```bash
 | 
			
		||||
python3 h2csmuggler.py -u https://target -x 'GET /admin HTTP/1.1\r\nHost: target\r\n\r\n'
 | 
			
		||||
```
 | 
			
		||||
* **curl**/`hyper` – tworzenie ręcznych ładunków: `curl --http2-prior-knowledge -X POST --data-binary @payload.raw https://target`.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## Środki obronne
 | 
			
		||||
 | 
			
		||||
1. **End-to-end HTTP/2** – całkowicie wyeliminuj tłumaczenie downgrade.
 | 
			
		||||
2. **Jedno źródło prawdy o długości** – podczas downgrade'u *zawsze* generuj ważny `Content-Length` **i** **usuń** wszelkie nagłówki `Content-Length`/`Transfer-Encoding` dostarczone przez użytkownika.
 | 
			
		||||
3. **Normalizuj przed trasą** – stosuj sanitację nagłówków *przed* logiką trasowania/przepisania.
 | 
			
		||||
4. **Izolacja połączeń** – nie używaj ponownie połączeń TCP back-endu między użytkownikami; „jedno żądanie na połączenie” pokonuje exploity oparte na kolejce.
 | 
			
		||||
5. **Usuń `Upgrade`, chyba że WebSocket** – zapobiega tunelowaniu h2c.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
## Odniesienia
 | 
			
		||||
 | 
			
		||||
* PortSwigger Research – “HTTP/2: The Sequel is Always Worse” <https://portswigger.net/research/http2>
 | 
			
		||||
* Bishop Fox – “h2c Smuggling: request smuggling via HTTP/2 clear-text” <https://bishopfox.com/blog/h2c-smuggling-request>
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user