Translated ['src/mobile-pentesting/ios-pentesting/ios-pentesting-without

This commit is contained in:
Translator 2025-07-12 18:08:15 +00:00
parent 5a8d0ce0d4
commit f4af61f1d4
2 changed files with 108 additions and 15 deletions

View File

@ -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 \

View File

@ -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}}