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
5a8d0ce0d4
commit
f4af61f1d4
@ -4,22 +4,22 @@
|
||||
|
||||
## Ana fikir
|
||||
|
||||
**`get_task_allow`** yetkisi ile imzalanmış uygulamalar, üçüncü taraf uygulamaların **`task_for_pid()`** adlı bir fonksiyonu, başlangıç uygulamasının işlem kimliği ile argüman olarak çalıştırmasına izin verir; böylece üzerinde kontrol sağlamak ve belleğine erişmek için görev portunu alabilirler.
|
||||
**`get_task_allow`** yetkisi ile imzalanmış uygulamalar, üçüncü taraf uygulamaların **`task_for_pid()`** adlı bir fonksiyonu, başlangıç uygulamasının işlem kimliği ile argüman olarak çalıştırmasına izin verir; böylece üzerinde görev portunu alabilir (onu kontrol edebilir ve belleğine erişebilir).
|
||||
|
||||
Ancak, IPA'yı çekip, yetki ile yeniden imzalayıp cihazınıza geri yüklemek o kadar kolay değildir. Bunun nedeni FairPlay korumasıdır. Uygulamanın imzası değiştiğinde, DRM (Dijital Haklar Yönetimi) anahtarı **geçersiz hale gelir ve uygulama çalışmaz**.
|
||||
|
||||
Eski bir jailbreak'li cihazda, IPA'yı yüklemek, **favori aracınızı kullanarak şifre çözmek** (örneğin Iridium veya frida-ios-dump gibi) ve cihazdan geri almak mümkündür. Ancak, mümkünse, şifrelenmemiş IPA için sadece istemci olarak hareket etmeniz önerilir.
|
||||
Eski bir jailbreak'li cihazda, IPA'yı yüklemek, **favori aracınızı kullanarak şifre çözmek** (örneğin Iridium veya frida-ios-dump gibi) ve cihazdan geri almak mümkündür. Ancak, mümkünse, şifrelenmemiş IPA için sadece istemci olarak talep etmeniz önerilir.
|
||||
|
||||
## Şifrelenmemiş IPA'yı elde etme
|
||||
|
||||
### Apple'dan alın
|
||||
### Apple'dan almak
|
||||
|
||||
1. Pentest yapmak için uygulamayı iPhone'a yükleyin.
|
||||
2. macOS'unuzda [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) uygulamasını yükleyin ve başlatın.
|
||||
3. Mac'inizde `Terminal`i açın ve `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` dizinine gidin. IPA daha sonra bu klasörde görünecektir.
|
||||
4. iOS cihazınızı görmelisiniz. Üzerine çift tıklayın ve ardından üst menü çubuğundan Ekle + → Uygulamalar'a tıklayın.
|
||||
5. Ekle'ye tıkladıktan sonra, Configurator IPA'yı Apple'dan indirecek ve cihazınıza yüklemeye çalışacaktır. Daha önce önerimi takip ettiyseniz ve IPA'yı zaten yüklediyseniz, uygulamayı yeniden yüklemenizi isteyen bir istem belirecektir.
|
||||
6. IPA, `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` dizininde indirilmiş olmalıdır; buradan alabilirsiniz.
|
||||
6. IPA, `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` dizinine indirilmelidir; buradan alabilirsiniz.
|
||||
|
||||
Bu süreç hakkında daha ayrıntılı bilgi için [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) adresini kontrol edin.
|
||||
|
||||
@ -47,13 +47,13 @@ Not edin ki, herhangi bir `invalid signature` hatasını önlemek için Cydia'da
|
||||
Yüklendikten sonra, şifrelenmemiş IPA'yı elde etmek için Cydia'dan **Iridium tweak**'i kullanabilirsiniz.
|
||||
|
||||
|
||||
### Yetkilendirmeleri Yamanla ve Yeniden İmzala
|
||||
### Yetkilendirmeleri Yamanla & Yeniden İmzala
|
||||
|
||||
`get-task-allow` yetkilendirmesi ile uygulamayı yeniden imzalamak için `app-signer`, `codesign` ve `iResign` gibi çeşitli araçlar mevcuttur. `app-signer`, yeniden imzalanacak IPA dosyasını belirtip, **`get-taks-allow`** koyarak ve kullanılacak sertifika ve dağıtım profili ile çok kolay bir şekilde yeniden imzalamaya olanak tanıyan çok kullanıcı dostu bir arayüze sahiptir.
|
||||
`get-task-allow` yetkilendirmesi ile uygulamayı yeniden imzalamak için `app-signer`, `codesign` ve `iResign` gibi çeşitli araçlar mevcuttur. `app-signer`, yeniden imzalanacak IPA dosyasını belirtip, **`get-task-allow`** ekleyerek ve kullanılacak sertifika ile provisioning profili belirterek IPA dosyasını çok kolay bir şekilde yeniden imzalamaya olanak tanıyan oldukça kullanıcı dostu bir arayüze sahiptir.
|
||||
|
||||
Sertifika ve imzalama profilleri ile ilgili olarak, Apple, Xcode aracılığıyla tüm hesaplar için **ücretsiz geliştirici imzalama profilleri** sunmaktadır. Sadece bir uygulama oluşturun ve bir tane yapılandırın. Ardından, `Ayarlar` → `Gizlilik ve Güvenlik` bölümüne giderek **iPhone'un geliştirici uygulamalarını güvenilir hale getirmesini** sağlayın ve `Geliştirici Modu`na tıklayın.
|
||||
Sertifika ve imzalama profilleri ile ilgili olarak, Apple, Xcode aracılığıyla tüm hesaplar için **ücretsiz geliştirici imzalama profilleri** sunmaktadır. Sadece bir uygulama oluşturun ve bir tane yapılandırın. Ardından, **iPhone'u geliştirici uygulamalarını güvenilir hale getirmek için** `Ayarlar` → `Gizlilik & Güvenlik` bölümüne giderek `Geliştirici Modu`na tıklayın.
|
||||
|
||||
Yeniden imzalanmış IPA ile, onu cihazda kurup pentest yapmak için zamanı geldi:
|
||||
Yeniden imzalanmış IPA ile, onu cihazda kurma zamanı geldi:
|
||||
```bash
|
||||
ideviceinstaller -i resigned.ipa -w
|
||||
```
|
||||
@ -61,7 +61,7 @@ ideviceinstaller -i resigned.ipa -w
|
||||
|
||||
### Geliştirici Modunu Etkinleştir (iOS 16+)
|
||||
|
||||
iOS 16 ile Apple **Geliştirici Modu**nu tanıttı: `get_task_allow` taşıyan *veya* bir geliştirme sertifikası ile imzalanmış herhangi bir ikili, cihazda Geliştirici Modu etkinleştirilene kadar başlatılmayı reddedecektir. Bu bayrak açık değilse Frida/LLDB'yi de ekleyemezsiniz.
|
||||
iOS 16 ile Apple **Geliştirici Modu**nu tanıttı: `get_task_allow` taşıyan *veya* bir geliştirme sertifikası ile imzalanmış herhangi bir ikili, cihazda Geliştirici Modu etkinleştirilene kadar başlatılmayı reddedecektir. Bu bayrak açık olmadıkça Frida/LLDB'yi de ekleyemezsiniz.
|
||||
|
||||
1. **Herhangi** bir geliştirici imzalı IPA'yı telefona yükleyin veya gönderin.
|
||||
2. **Ayarlar → Gizlilik ve Güvenlik → Geliştirici Modu**'na gidin ve açın.
|
||||
@ -74,9 +74,9 @@ Geliştirici Modu, devre dışı bırakılana veya telefon silinene kadar aktif
|
||||
Artık jailbreak olmadan yan yükleme yapmak ve yeniden imzalanmış IP'leri güncel tutmak için birkaç olgun yol bulunmaktadır:
|
||||
|
||||
| Araç | Gereksinimler | Güçlü Yönler | Sınırlamalar |
|
||||
|------|---------------|--------------|--------------|
|
||||
| **AltStore 2 / SideStore** | IPA'yı her 7 günde ücretsiz bir geliştirici profili ile yeniden imzalayan macOS/Windows/Linux eşlikçisi | Wi-Fi üzerinden otomatik yeniden yükleme, iOS 17'ye kadar çalışır | Aynı ağda bilgisayar gerektirir, Apple tarafından 3 uygulama limiti uygulanır |
|
||||
| **TrollStore 1/2** | CoreTrust hatasına karşı savunmasız iOS 14 – 15.4.1'deki cihaz | *Kalıcı* imzalama (7 günlük limit yok); kurulduktan sonra bilgisayar gerekmez | iOS 15.5+ üzerinde desteklenmiyor (hata yamanmış) |
|
||||
|------|--------------|-----------|-------------|
|
||||
| **AltStore 2 / SideStore** | IPA'yı her 7 günde ücretsiz bir geliştirici profili ile yeniden imzalayan macOS/Windows/Linux eşlikçisi | Wi-Fi üzerinden otomatik yeniden yükleme, iOS 17'ye kadar çalışır | Aynı ağda bilgisayar gerektirir, Apple tarafından 3 uygulama limiti uygulanmıştır |
|
||||
| **TrollStore 1/2** | CoreTrust hatasına karşı savunmasız iOS 14 – 15.4.1 cihazı | *Kalıcı* imzalama (7 günlük limit yok); kurulduktan sonra bilgisayar gerekmez | iOS 15.5+ üzerinde desteklenmiyor (hata yamanmış) |
|
||||
|
||||
Mevcut iOS sürümlerinde rutin pentestler için Alt/Side-Store genellikle en pratik seçimdir.
|
||||
|
||||
@ -94,7 +94,7 @@ Son Frida sürümleri (>=16) otomatik olarak işaretçi kimlik doğrulamasını
|
||||
|
||||
### Jailbreak olmadan otomatik dinamik analiz MobSF ile
|
||||
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) gerçek bir cihazda dev-imzalı bir IPA'yı aynı teknikle (`get_task_allow`) enstrümante edebilir ve dosya sistemi tarayıcısı, trafik yakalama ve Frida konsolu ile bir web UI sağlar【】. En hızlı yol, MobSF'yi Docker'da çalıştırmak ve ardından iPhone'unuzu USB ile bağlamaktır:
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) gerçek bir cihazda dev-imzalı bir IPA'yı aynı teknikle (`get_task_allow`) enstrümante edebilir ve dosya sistemi tarayıcısı, trafik yakalama ve Frida konsolu ile bir web UI sağlar【†L2-L3】. En hızlı yol, MobSF'yi Docker'da çalıştırmak ve ardından iPhone'unuzu USB ile bağlamaktır:
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf:latest
|
||||
docker run -p 8000:8000 --privileged \
|
||||
|
||||
@ -1,7 +1,100 @@
|
||||
# HTTP/2 Düşürmelerinde İstek Sızdırma
|
||||
# HTTP/2 Düşürmelerinde İstek Smuggling'i
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Gönderiyi kontrol et [https://portswigger.net/research/http-2-downgrades](https://portswigger.net/research/http-2-downgrades)**
|
||||
HTTP/2 genellikle klasik istek-smuggling'e karşı bağışık olarak kabul edilir çünkü her DATA çerçevesinin uzunluğu açıktır. **Bu koruma, bir ön uç proxy'si isteği HTTP/1.x'e “düşürdüğünde” kaybolur ve bunu arka uca iletir.** İki farklı ayrıştırıcı (HTTP/2 ön ucu ve HTTP/1 arka ucu) bir isteğin nerede bittiği ve diğerinin nerede başladığı konusunda anlaşmaya çalıştığında, tüm eski senkronizasyon bozulma numaraları geri gelir - artı birkaç yeni numara.
|
||||
|
||||
---
|
||||
## Düşürmelerin Nedenleri
|
||||
|
||||
1. Tarayıcılar zaten HTTP/2 konuşuyor, ancak birçok eski köken altyapısı hala yalnızca HTTP/1.1'i anlıyor.
|
||||
2. Bu nedenle, ters proxy'ler (CDN'ler, WAF'lar, yük dengeleyiciler) TLS + HTTP/2'yi kenarda sonlandırır ve **her isteği HTTP/1.1 olarak yeniden yazar**.
|
||||
3. Çeviri adımı, kökenin gövde uzunluğunu belirleyebilmesi için *her ikisini de* `Content-Length` **veya** `Transfer-Encoding: chunked` başlıklarını oluşturmak zorundadır.
|
||||
|
||||
Ön uç HTTP/2 çerçeve uzunluğuna **güvendiğinde** ancak arka uç CL veya TE'ye güvendiğinde, bir saldırgan bunların anlaşmazlık yaşamasını sağlayabilir.
|
||||
|
||||
---
|
||||
## İki Dominant Temel Sınıf
|
||||
|
||||
| Varyant | Ön uç uzunluğu | Arka uç uzunluğu | Tipik yük |
|
||||
|---------|-----------------|-----------------|-----------------|
|
||||
| **H2.TE** | HTTP/2 çerçevesi | `Transfer-Encoding: chunked` | Son `0\r\n\r\n` gönderilmeyen ekstra bir chunked mesaj gövdesi ekleyin, böylece arka uç saldırgan tarafından sağlanan “sonraki” isteği bekler. |
|
||||
| **H2.CL** | HTTP/2 çerçevesi | `Content-Length` | Gerçek gövdeden *daha küçük* bir CL gönderin, böylece arka uç sınırın ötesine geçerek sonraki isteği okur. |
|
||||
|
||||
> Bunlar, klasik TE.CL / CL.TE ile ruhsal olarak aynıdır, sadece HTTP/2 bir ayrıştırıcıyı değiştirmiştir.
|
||||
|
||||
---
|
||||
## Düşürme Zincirini Tanımlama
|
||||
|
||||
1. **ALPN** kullanarak bir TLS el sıkışmasında (`openssl s_client -alpn h2 -connect host:443`) veya **curl**:
|
||||
```bash
|
||||
curl -v --http2 https://target
|
||||
```
|
||||
Eğer `* Using HTTP2` görünüyorsa, kenar H2 konuşuyor demektir.
|
||||
2. HTTP/2 üzerinden kasıtlı olarak hatalı bir CL/TE isteği gönderin (Burp Repeater artık HTTP/2'yi zorlamak için bir açılır menüye sahiptir). Eğer yanıt bir HTTP/1.1 hatası olan `400 Bad chunk` ise, kenarın trafiği bir HTTP/1 ayrıştırıcısı için dönüştürdüğüne dair kanıtınız var demektir.
|
||||
|
||||
---
|
||||
## Sömürü İş Akışı (H2.TE örneği)
|
||||
```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. **Ön uç** tam olarak 13 bayt okur (`HELLO\r\n0\r\n\r\nGE`), isteğin tamamlandığını düşünür ve bu kadarını orijine iletir.
|
||||
2. **Arka uç** TE başlığına güvenir, *ikinci* `0\r\n\r\n` görünene kadar okumaya devam eder ve böylece saldırganın ikinci isteğinin ön ekini (`GET /admin …`) tüketir.
|
||||
3. Kalan (`GET /admin …`) kurbanın arkasında bekleyen *yeni* bir istek olarak işlenir.
|
||||
|
||||
Kaçırılan isteği şunlarla değiştirin:
|
||||
* `POST /api/logout` oturum sabitlemeyi zorlamak için
|
||||
* `GET /users/1234` kurbana özgü bir kaynağı çalmak için
|
||||
|
||||
---
|
||||
## h2c smuggling (düz metin yükseltmeleri)
|
||||
|
||||
2023'te yapılan bir çalışma, bir ön ucun HTTP/1.1 `Upgrade: h2c` başlığını düz metin HTTP/2'yi destekleyen bir arka uca iletmesi durumunda, bir saldırganın yalnızca HTTP/1.1'i doğrulayan bir kenar üzerinden *ham* HTTP/2 çerçevelerini tünelleme yapabileceğini göstermiştir. Bu, başlık normalizasyonunu, WAF kurallarını ve hatta TLS sonlandırmasını atlar.
|
||||
|
||||
Ana gereksinimler:
|
||||
* Kenar, **her iki** `Connection: Upgrade` ve `Upgrade: h2c` başlıklarını değiştirmeden iletmelidir.
|
||||
* Orijin, HTTP/2'ye geçiş yapmalı ve istek kuyruklama yeteneklerini sağlayan bağlantı yeniden kullanım anlamlarını korumalıdır.
|
||||
|
||||
Hafifletme basittir – WebSocket'ler hariç, kenarda `Upgrade` başlığını kaldırın veya sabit kodlayın.
|
||||
|
||||
---
|
||||
## Dikkate değer gerçek dünya CVE'leri (2022-2025)
|
||||
|
||||
* **CVE-2023-25690** – Apache HTTP Server mod_proxy yeniden yazma kuralları, istek bölme ve kaçırma için zincirlenebilir. (2.4.56'da düzeltildi)
|
||||
* **CVE-2023-25950** – HTX ayrıştırıcısının hatalı bir şekilde işlediği boru hatlı isteklerde HAProxy 2.7/2.6 istek/yanıt kaçırma.
|
||||
* **CVE-2022-41721** – Go `MaxBytesHandler`, kalan gövde baytlarının **HTTP/2** çerçeveleri olarak işlenmesine neden olarak protokoller arası kaçırmayı sağladı.
|
||||
|
||||
---
|
||||
## Araçlar
|
||||
|
||||
* **Burp Request Smuggler** – v1.26'dan itibaren otomatik olarak H2.TE/H2.CL ve gizli ALPN desteğini test eder. Uzantı seçeneklerinde “HTTP/2 probing”i etkinleştirin.
|
||||
* **h2cSmuggler** – düz metin yükseltme saldırısını otomatikleştirmek için Bishop Fox tarafından oluşturulan Python PoC:
|
||||
```bash
|
||||
python3 h2csmuggler.py -u https://target -x 'GET /admin HTTP/1.1\r\nHost: target\r\n\r\n'
|
||||
```
|
||||
* **curl**/`hyper` – manuel yükler oluşturma: `curl --http2-prior-knowledge -X POST --data-binary @payload.raw https://target`.
|
||||
|
||||
---
|
||||
## Savunma önlemleri
|
||||
|
||||
1. **Uçtan uca HTTP/2** – düşürme çevirisini tamamen ortadan kaldırın.
|
||||
2. **Uzunluk gerçeğinin tek kaynağı** – düşürme sırasında, *her zaman* geçerli bir `Content-Length` **ve** **kaldırın** herhangi bir kullanıcı tarafından sağlanan `Content-Length`/`Transfer-Encoding` başlıklarını.
|
||||
3. **Yol öncesi normalleştirme** – başlık sanitizasyonunu *yol verme/yazma mantığından önce* uygulayın.
|
||||
4. **Bağlantı izolasyonu** – kullanıcılar arasında arka uç TCP bağlantılarını yeniden kullanmayın; “her bağlantıda bir istek” kuyruk tabanlı istismarları bozar.
|
||||
5. **WebSocket hariç `Upgrade` başlığını kaldırın** – h2c tünellemesini önler.
|
||||
|
||||
---
|
||||
## Referanslar
|
||||
|
||||
* 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