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
faff2a8143
commit
8000ee33ef
@ -6,9 +6,9 @@
|
||||
|
||||
Застосунки, підписані з **правом `get_task_allow`**, дозволяють стороннім застосункам виконувати функцію **`task_for_pid()`** з ідентифікатором процесу початкового застосунку як аргумент, щоб отримати порт завдання над ним (мати можливість контролювати його та отримувати доступ до його пам'яті).
|
||||
|
||||
Однак це не так просто, як просто витягти IPA, повторно підписати його з правом і перепрошити його назад на ваш пристрій. Це пов'язано з захистом FairPlay. Коли підпис змінюється, ключ DRM (управління цифровими правами) **стає недійсним, і застосунок не працюватиме**.
|
||||
Однак це не так просто, як просто витягти IPA, повторно підписати його з правом і завантажити назад на ваш пристрій. Це пов'язано з захистом FairPlay. Коли підпис змінюється, ключ DRM (управління цифровими правами) **анулюється, і застосунок не працюватиме**.
|
||||
|
||||
З старим джейлбрейкнутим пристроєм можна встановити IPA, **декодувати його за допомогою вашого улюбленого інструменту** (такого як Iridium або frida-ios-dump) і витягти його з пристрою. Хоча, якщо це можливо, рекомендується просто запитати у клієнта декодований IPA.
|
||||
З старим джейлбрейкнутим пристроєм можливо встановити IPA, **декодувати його за допомогою вашого улюбленого інструменту** (такого як Iridium або frida-ios-dump) і витягти його з пристрою. Хоча, якщо це можливо, рекомендується просто запитати у клієнта декодований IPA.
|
||||
|
||||
|
||||
## Отримати декодований IPA
|
||||
@ -40,7 +40,7 @@ unzip redacted.ipa -d unzipped
|
||||
cd unzipped
|
||||
zip -r ../no-min-version.ipa *
|
||||
```
|
||||
Тоді встановіть IPA, наприклад, за допомогою:
|
||||
Потім встановіть IPA, наприклад, за допомогою:
|
||||
```bash
|
||||
ideviceinstaller -i no-min-version.ipa -w
|
||||
```
|
||||
@ -49,13 +49,13 @@ ideviceinstaller -i no-min-version.ipa -w
|
||||
Після встановлення ви можете використовувати **Iridium tweak** з Cydia, щоб отримати розшифрований IPA.
|
||||
|
||||
|
||||
### Патчування прав та повторне підписання
|
||||
### Патчинг прав та повторне підписання
|
||||
|
||||
Щоб повторно підписати додаток з правом `get-task-allow`, доступно кілька інструментів, таких як `app-signer`, `codesign` та `iResign`. `app-signer` має дуже зручний інтерфейс, який дозволяє дуже легко повторно підписати файл IPA, вказуючи IPA для повторного підписання, **додати `get-task-allow`** та сертифікат і профіль для використання.
|
||||
|
||||
Щодо сертифіката та профілів підписання, Apple пропонує **безкоштовні профілі підписання для розробників** для всіх облікових записів через Xcode. Просто створіть додаток і налаштуйте один. Потім налаштуйте **iPhone, щоб довіряти додаткам розробника**, перейшовши в `Налаштування` → `Конфіденційність та безпека`, і натисніть на `Режим розробника`.
|
||||
Щодо сертифіката та профілів підписання, Apple пропонує **безкоштовні профілі підписання для розробників** для всіх облікових записів через Xcode. Просто створіть додаток і налаштуйте один. Потім налаштуйте **iPhone, щоб довіряти додаткам розробника**, перейшовши в `Settings` → `Privacy & Security`, і натисніть на `Developer Mode`.
|
||||
|
||||
З повторно підписаним IPA настав час встановити його на пристрій для тестування:
|
||||
З повторно підписаним IPA настав час встановити його на пристрій для пентестування:
|
||||
```bash
|
||||
ideviceinstaller -i resigned.ipa -w
|
||||
```
|
||||
@ -77,10 +77,10 @@ ideviceinstaller -i resigned.ipa -w
|
||||
|
||||
| Інструмент | Вимоги | Переваги | Обмеження |
|
||||
|------------|--------|----------|-----------|
|
||||
| **AltStore 2 / SideStore** | компаньйон macOS/Windows/Linux, який повторно підписує IPA кожні 7 днів з безкоштовним профілем розробника | Автоматичне перезавантаження через Wi-Fi, працює до iOS 17 | Потрібен комп'ютер в тій же мережі, обмеження на 3 додатки, накладене Apple |
|
||||
| **TrollStore 1/2** | Пристрій на iOS 14 – 15.4.1, вразливий до помилки CoreTrust | *Постійне* підписування (без обмеження на 7 днів); комп'ютер не потрібен після установки | Не підтримується на iOS 15.5+ (помилка виправлена) |
|
||||
| **AltStore 2 / SideStore** | macOS/Windows/Linux компаньйон, який повторно підписує IPA кожні 7 днів з безкоштовним профілем розробника | Автоматичне перезавантаження через Wi-Fi, працює до iOS 17 | Потрібен комп'ютер в тій же мережі, обмеження на 3 додатки, накладене Apple |
|
||||
| **TrollStore 1/2** | Пристрій на iOS 14 – 15.4.1, вразливий до помилки CoreTrust | *Постійне* підписування (без 7-денного обмеження); комп'ютер не потрібен після установки | Не підтримується на iOS 15.5+ (помилка виправлена) |
|
||||
|
||||
Для рутинних пентестів на актуальних версіях iOS Alt/Side-Store зазвичай є найпрактичнішим вибором.
|
||||
Для рутинних пентестів на сучасних версіях iOS Alt/Side-Store зазвичай є найпрактичнішим вибором.
|
||||
|
||||
### Хукінг / динамічна інструментація
|
||||
|
||||
@ -92,11 +92,11 @@ objection -g "com.example.target" explore
|
||||
# Or plain Frida
|
||||
frida -U -f com.example.target -l my_script.js --no-pause
|
||||
```
|
||||
Останні випуски Frida (>=16) автоматично обробляють автентифікацію вказівників та інші пом'якшення iOS 17, тому більшість існуючих скриптів працюють з коробки.
|
||||
Останні версії Frida (>=16) автоматично обробляють автентифікацію вказівників та інші пом'якшення iOS 17, тому більшість існуючих скриптів працюють без додаткових налаштувань.
|
||||
|
||||
### Автоматизований динамічний аналіз з MobSF (без джейлбрейка)
|
||||
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) може інструментувати IPA з підписом розробника на реальному пристрої, використовуючи ту ж техніку (`get_task_allow`), і надає веб-інтерфейс з браузером файлової системи, захопленням трафіку та консоллю Frida【】. Найшвидший спосіб - запустити MobSF у Docker, а потім підключити ваш iPhone через USB:
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) може інструментувати IPA з підписом розробника на реальному пристрої, використовуючи ту ж техніку (`get_task_allow`), і надає веб-інтерфейс з браузером файлової системи, захопленням трафіку та консоллю Frida【†L2-L3】. Найшвидший спосіб - запустити MobSF у Docker, а потім підключити ваш iPhone через USB:
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf:latest
|
||||
docker run -p 8000:8000 --privileged \
|
||||
@ -109,7 +109,7 @@ MobSF автоматично розгорне бінарний файл, уві
|
||||
### iOS 17 та застереження режиму блокування
|
||||
|
||||
* **Режим блокування** (Налаштування → Конфіденційність та безпека) блокує динамічний зв'язувач від завантаження непідписаних або зовнішньо підписаних динамічних бібліотек. При тестуванні пристроїв, на яких може бути увімкнено цей режим, переконайтеся, що він **вимкнений**, інакше ваші сесії Frida/objection завершаться негайно.
|
||||
* Аутентифікація вказівників (PAC) застосовується на всіх пристроях A12+. Frida ≥16 прозоро обробляє видалення PAC — просто підтримуйте актуальність як *frida-server*, так і інструментів Python/CLI, коли виходить нова основна версія iOS.
|
||||
* Аутентифікація вказівників (PAC) застосовується на всіх пристроях A12+. Frida ≥16 прозоро обробляє зняття PAC — просто підтримуйте актуальними як *frida-server*, так і Python/CLI інструменти, коли виходить нова основна версія iOS.
|
||||
|
||||
## Посилання
|
||||
|
||||
|
@ -1,7 +1,100 @@
|
||||
# Запитне підсумовування в HTTP/2 даунгрейдах
|
||||
# Request Smuggling in HTTP/2 Downgrades
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Перевірте пост [https://portswigger.net/research/http-2-downgrades](https://portswigger.net/research/http-2-downgrades)**
|
||||
HTTP/2 зазвичай вважається захищеним від класичного request-smuggling, оскільки довжина кожного DATA фрейму є явною. **Ця захист зникає, як тільки фронтальний проксі “знижує” запит до HTTP/1.x перед тим, як передати його на бекенд**. У момент, коли два різні парсери (фронтальний HTTP/2 і бекенд HTTP/1) намагаються домовитися, де закінчується один запит і де починається наступний, всі старі трюки десинхронізації повертаються – плюс кілька нових.
|
||||
|
||||
---
|
||||
## Чому відбуваються зниження
|
||||
|
||||
1. Браузери вже підтримують HTTP/2, але багато застарілої інфраструктури все ще розуміє лише HTTP/1.1.
|
||||
2. Зворотні проксі (CDN, WAF, балансувальники навантаження) тому завершують TLS + HTTP/2 на краю і **переписують кожен запит як HTTP/1.1** для походження.
|
||||
3. Крок перекладу повинен створити *обидва* заголовки `Content-Length` **і/або** `Transfer-Encoding: chunked`, щоб походження могло визначити довжину тіла.
|
||||
|
||||
Коли фронтальний проксі довіряє довжині фрейму HTTP/2 **але** бекенд довіряє CL або TE, зловмисник може змусити їх не погоджуватися.
|
||||
|
||||
---
|
||||
## Дві домінуючі класи примітивів
|
||||
|
||||
| Варіант | Довжина фронтального | Довжина бекендного | Типове навантаження |
|
||||
|---------|---------------------|---------------------|---------------------|
|
||||
| **H2.TE** | HTTP/2 фрейм | `Transfer-Encoding: chunked` | Вбудувати додаткове тіло повідомлення з частинами, останній `0\r\n\r\n` якого *не* надсилається, тому бекенд чекає на “наступний” запит, наданий зловмисником. |
|
||||
| **H2.CL** | HTTP/2 фрейм | `Content-Length` | Надіслати *менший* CL, ніж реальне тіло, щоб бекенд читав за межами кордону в наступний запит. |
|
||||
|
||||
> Це ідентичні за духом класичним TE.CL / CL.TE, просто з HTTP/2, що замінює один з парсерів.
|
||||
|
||||
---
|
||||
## Визначення ланцюга зниження
|
||||
|
||||
1. Використовуйте **ALPN** у TLS рукопожатті (`openssl s_client -alpn h2 -connect host:443`) або **curl**:
|
||||
```bash
|
||||
curl -v --http2 https://target
|
||||
```
|
||||
Якщо з'являється `* Using HTTP2`, край говорить H2.
|
||||
2. Надішліть навмисно неправильно сформований запит CL/TE *через* HTTP/2 (Burp Repeater тепер має випадаюче меню для примусової роботи з HTTP/2). Якщо відповідь є помилкою HTTP/1.1, такою як `400 Bad chunk`, у вас є доказ того, що край конвертував трафік для парсера HTTP/1 вниз за течією.
|
||||
|
||||
---
|
||||
## Робочий процес експлуатації (приклад 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. **Фронт-енд** читає точно 13 байтів (`HELLO\r\n0\r\n\r\nGE`), вважає, що запит завершено, і пересилає цю частину до оригіналу.
|
||||
2. **Бек-енд** довіряє заголовку TE, продовжує читати, поки не побачить *другий* `0\r\n\r\n`, таким чином споживаючи префікс другого запиту атакуючого (`GET /admin …`).
|
||||
3. Решта (`GET /admin …`) розглядається як *новий* запит, що стоїть у черзі за запитом жертви.
|
||||
|
||||
Замініть підслуханий запит на:
|
||||
* `POST /api/logout` для примусової фіксації сесії
|
||||
* `GET /users/1234` для викрадення ресурсу, специфічного для жертви
|
||||
|
||||
---
|
||||
## h2c smuggling (чисті текстові оновлення)
|
||||
|
||||
Дослідження 2023 року показало, що якщо фронт-енд передає заголовок HTTP/1.1 `Upgrade: h2c` бек-енду, який підтримує чистий текст HTTP/2, атакуючий може тунелювати *сирі* HTTP/2 фрейми через край, який лише перевіряв HTTP/1.1. Це обминає нормалізацію заголовків, правила WAF і навіть завершення TLS.
|
||||
|
||||
Ключові вимоги:
|
||||
* Край передає **обидва** `Connection: Upgrade` і `Upgrade: h2c` без змін.
|
||||
* Оригінал переходить на HTTP/2 і зберігає семантику повторного використання з'єднання, що дозволяє чергування запитів.
|
||||
|
||||
Зменшення ризиків просте – видалити або жорстко закодувати заголовок `Upgrade` на краю, за винятком WebSockets.
|
||||
|
||||
---
|
||||
## Помітні реальні CVE (2022-2025)
|
||||
|
||||
* **CVE-2023-25690** – Правила переписування mod_proxy Apache HTTP Server можуть бути з'єднані для розділення запитів і підслуховування. (виправлено в 2.4.56)
|
||||
* **CVE-2023-25950** – HAProxy 2.7/2.6 підслуховування запитів/відповідей, коли парсер HTX неправильно обробляв конвеєрні запити.
|
||||
* **CVE-2022-41721** – Go `MaxBytesHandler` призвів до того, що залишкові байти тіла були розібрані як **HTTP/2** фрейми, що дозволило міжпротокольне підслуховування.
|
||||
|
||||
---
|
||||
## Інструменти
|
||||
|
||||
* **Burp Request Smuggler** – з версії v1.26 автоматично тестує H2.TE/H2.CL і приховану підтримку ALPN. Увімкніть “HTTP/2 probing” в параметрах розширення.
|
||||
* **h2cSmuggler** – Python PoC від Bishop Fox для автоматизації атаки чистого тексту:
|
||||
```bash
|
||||
python3 h2csmuggler.py -u https://target -x 'GET /admin HTTP/1.1\r\nHost: target\r\n\r\n'
|
||||
```
|
||||
* **curl**/`hyper` – створення ручних корисних навантажень: `curl --http2-prior-knowledge -X POST --data-binary @payload.raw https://target`.
|
||||
|
||||
---
|
||||
## Заходи захисту
|
||||
|
||||
1. **End-to-end HTTP/2** – повністю усунути зниження перекладу.
|
||||
2. **Єдине джерело правди про довжину** – під час зниження *завжди* генерувати дійсний `Content-Length` **і** **видаляти** будь-які заголовки `Content-Length`/`Transfer-Encoding`, надані користувачем.
|
||||
3. **Нормалізувати перед маршрутом** – застосовувати санітаризацію заголовків *перед* логікою маршрутизації/переписування.
|
||||
4. **Ізоляція з'єднання** – не повторно використовувати TCP з'єднання бек-енду між користувачами; “один запит на з'єднання” перемагає експлойти на основі черги.
|
||||
5. **Видалити `Upgrade`, якщо не WebSocket** – запобігає тунелюванню h2c.
|
||||
|
||||
---
|
||||
## Посилання
|
||||
|
||||
* PortSwigger Research – “HTTP/2: Продовження завжди гірше” <https://portswigger.net/research/http2>
|
||||
* Bishop Fox – “h2c Smuggling: підслуховування запитів через HTTP/2 чистий текст” <https://bishopfox.com/blog/h2c-smuggling-request>
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user