From ef713a105ef03af38144e93482b6c6f24040c8e0 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 16 Jul 2025 12:10:03 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/android-app-pentesting/drozer-tutoria --- .../exploiting-content-providers.md | 68 ++++++++++++++++--- theme/ai.js | 46 ++++++++++--- 2 files changed, 96 insertions(+), 18 deletions(-) diff --git a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md index b99e0451c..4d9380f13 100644 --- a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md +++ b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md @@ -38,7 +38,7 @@ Content Provider: com.mwr.example.sieve.FileBackupProvider Multiprocess Allowed: True Grant Uri Permissions: False ``` -Moguće je sastaviti kako doći do **DBContentProvider** počinjanjem URI-ja sa “_content://_”. Ovaj pristup se zasniva na uvidima dobijenim korišćenjem Drozer-a, gde su ključne informacije bile locirane u _/Keys_ direktorijumu. +Moguće je sastaviti kako doći do **DBContentProvider** tako što se URI-ji započinju sa “_content://_”. Ovaj pristup se zasniva na uvidima dobijenim korišćenjem Drozer-a, gde su ključne informacije bile locirane u _/Keys_ direktorijumu. Drozer može **pogoditi i isprobati nekoliko URI-ja**: ``` @@ -65,7 +65,7 @@ Upit će biti kao: `content://name.of.package.class/declared_name` ## **Content Providers sa podrškom za bazu podataka** Verovatno se većina Content Providers koristi kao **interfejs** za **bazu podataka**. Stoga, ako možete da mu pristupite, mogli biste da **izvučete, ažurirate, umetnete i obrišete** informacije.\ -Proverite da li možete da **pristupite osetljivim informacijama** ili pokušajte da ih promenite kako biste **zaobišli mehanizme autorizacije**. +Proverite da li možete da **pristupite osetljivim informacijama** ili pokušajte da ih promenite da biste **obišli mehanizme autorizacije**. Kada proveravate kod Content Provider-a, **pazite** takođe na **funkcije** nazvane kao: _query, insert, update i delete_: @@ -87,7 +87,7 @@ email: incognitoguy50@gmail.com ``` ### Insert content -Kvarći bazu podataka naučićete **ime kolona**, zatim, mogli biste da ubacite podatke u DB: +Upitom u bazu podataka saznaćete **ime kolona**, zatim, moći ćete da ubacite podatke u DB: ![](<../../../images/image (98).png>) @@ -97,7 +97,7 @@ _Napomena da u insert i update možete koristiti --string da označite string, - ### Update content -Poznavajući ime kolona mogli biste takođe **modifikovati unose**: +Poznavajući ime kolona, takođe možete **modifikovati unose**: ![](<../../../images/image (780).png>) @@ -107,8 +107,8 @@ Poznavajući ime kolona mogli biste takođe **modifikovati unose**: ### **SQL Injection** -Jednostavno je testirati SQL injection **(SQLite)** manipulišući **projekcijom** i **poljima selekcije** koja se prosleđuju provajderu sadržaja.\ -Kada kvarćete Content Provider postoje 2 zanimljiva argumenta za pretragu informacija: _--selection_ i _--projection_: +Jednostavno je testirati SQL injection **(SQLite)** manipulisanjem **projekcijom** i **poljima selekcije** koja se prosleđuju provajderu sadržaja.\ +Kada upitujete Content Provider, postoje 2 zanimljiva argumenta za pretragu informacija: _--selection_ i _--projection_: ![](<../../../images/image (784).png>) @@ -153,7 +153,7 @@ Content providers se takođe mogu koristiti za **pristup fajlovima:** ### Čitaj **fajl** -Možete čitati fajlove iz Content Providera +Možete čitati fajlove iz Content Provider-a ``` dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts 127.0.0.1 localhost @@ -165,7 +165,7 @@ Ako možete pristupiti datotekama, možete pokušati da zloupotrebite Putanju Pr dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts 127.0.0.1 localhost ``` -**Automatsko otkrivanje putanje prolaska od strane Drozer** +**Automatsko otkrivanje putanje prolaza od strane Drozer** ``` dz> run scanner.provider.traversal -a com.mwr.example.sieve Scanning com.mwr.example.sieve... @@ -173,10 +173,62 @@ Vulnerable Providers: content://com.mwr.example.sieve.FileBackupProvider/ content://com.mwr.example.sieve.FileBackupProvider ``` +## 2023-2025 Ažuriranja & Moderni Saveti + +### Drozer 3.x (Python 3) je dostupan + +WithSecure je obnovio održavanje drozer-a 2022. godine i portovao framework na **Python 3** (najnovija **3.1.0 – april 2024**). +Pored ispravki kompatibilnosti, novi moduli koji su posebno korisni prilikom rada sa Content Providers uključuju: + +* `scanner.provider.exported` – lista samo provajdera sa `android:exported="true"`. +* `app.provider.grant` – automatski poziva `grantUriPermission()` tako da možete komunicirati sa provajderima koji očekuju `FLAG_GRANT_READ_URI_PERMISSION` / `FLAG_GRANT_WRITE_URI_PERMISSION` na Android 12+. +* Bolje upravljanje **Scoped Storage** tako da provajderi zasnovani na fajlovima na Android 11+ i dalje mogu biti dostupni. + +Ažurirajte (host & agent): +```bash +pipx install --force "git+https://github.com/WithSecureLabs/drozer@v3.1.0" +adb install drozer-agent-3.1.0.apk +``` +### Korišćenje ugrađenog `cmd content` pomoćnika (ADB ≥ 8.0) + +Uređaji sa modernim Android operativnim sistemom dolaze sa CLI-jem koji može da upita/aktualizuje provajdere **bez instaliranja bilo kakvog agenta**: +```bash +adb shell cmd content query --uri content://com.test.provider/items/ +adb shell cmd content update --uri content://com.test.provider/items/1 \ +--bind price:d:1337 +adb shell cmd content call --uri content://com.test.provider \ +--method evilMethod --arg 'foo' +``` +Kombinujte sa `run-as ` ili sa rootovanim shell-om da testirate interne provajdere. + +### Nedavne stvarne CVE koje su zloupotrebile Content Providers + +| CVE | Godina | Komponenta | Klasa greške | Uticaj | +|-----|--------|------------|--------------|--------| +| CVE-2024-43089 | 2024 | MediaProvider | Putanja prelaz | Pročitajte proizvoljnu datoteku iz privatne memorije bilo koje aplikacije | +| CVE-2023-35670 | 2023 | MediaProvider | Putanja prelaz | Otkriće informacija | + +Ponovo kreirajte CVE-2024-43089 na ranjivoj verziji: +```bash +adb shell cmd content read \ +--uri content://media/external_primary/file/../../data/data/com.target/shared_prefs/foo.xml +``` +### Lista provere za jačanje API 30+ + +* Deklarisati `android:exported="false"` osim ako provajder **mora** biti javan – od API 31 atribut je obavezan. +* Sprovoditi **dozvole** i/ili `android:grantUriPermissions="true"` umesto izlaganja celog provajdera. +* Na belu listu staviti dozvoljene `projection`, `selection` i `sortOrder` argumente (npr. graditi upite sa `SQLiteQueryBuilder.setProjectionMap`). +* U `openFile()` kanonizovati traženi put (`FileUtils`) i odbaciti `..` sekvence kako bi se sprečilo pretraživanje. +* Kada izlažete datoteke, preferirati **Storage Access Framework** ili `FileProvider`. + +Ove promene u novijim verzijama Androida znače da mnoge legacijske eksploatacione primitivne metode i dalje funkcionišu, ali zahtevaju dodatne zastavice/dozvole koje ažurirani drozer moduli ili `cmd content` pomoćnik mogu automatski primeniti. + ## Reference - [https://www.tutorialspoint.com/android/android_content_providers.htm](https://www.tutorialspoint.com/android/android_content_providers.htm) - [https://manifestsecurity.com/android-application-security-part-15/](https://manifestsecurity.com/android-application-security-part-15/) - [https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf) +- [https://github.com/WithSecureLabs/drozer/releases/tag/3.1.0](https://github.com/WithSecureLabs/drozer/releases/tag/3.1.0) +- [https://source.android.com/security/bulletin/2024-07-01](https://source.android.com/security/bulletin/2024-07-01) {{#include ../../../banners/hacktricks-training.md}} diff --git a/theme/ai.js b/theme/ai.js index 68d091923..a376d751b 100644 --- a/theme/ai.js +++ b/theme/ai.js @@ -4,9 +4,10 @@ (() => { - const KEY = 'htSummerDiscountDismissed'; - const IMG = '/images/discount.jpeg'; - const TXT = 'HT Summer Discount, Last Days!'; + const KEY = 'htSummerDiscountsDismissed'; + const IMG = '/images/discount.jpeg'; + const TXT = 'Click here for HT Summer Discounts, Last Days!'; + const URL = 'https://training.hacktricks.xyz'; /* Stop if user already dismissed */ if (localStorage.getItem(KEY) === 'true') return; @@ -32,13 +33,37 @@ display: flex; flex-direction: column; align-items: stretch; `); - /* --- Title bar (separate, over image) --- */ + /* --- Title bar (link + close) --- */ const titleBar = $('div', ` - padding: 1rem; text-align: center; + position: relative; + padding: 1rem 2.5rem 1rem 1rem; /* room for the close button */ + text-align: center; background: #222; color: #fff; font-size: 1.3rem; font-weight: 700; `); - titleBar.textContent = TXT; + + const link = $('a', ` + color: inherit; + text-decoration: none; + display: block; + `); + link.href = URL; + link.target = '_blank'; + link.rel = 'noopener noreferrer'; + link.textContent = TXT; + titleBar.appendChild(link); + + /* Close "X" (no persistence) */ + const closeBtn = $('button', ` + position: absolute; top: .25rem; right: .5rem; + background: transparent; border: none; + color: #fff; font-size: 1.4rem; line-height: 1; + cursor: pointer; padding: 0; margin: 0; + `); + closeBtn.setAttribute('aria-label', 'Close'); + closeBtn.textContent = '✕'; + closeBtn.onclick = () => overlay.remove(); + titleBar.appendChild(closeBtn); /* --- Image --- */ const img = $('img'); @@ -62,14 +87,15 @@ modal.append(titleBar, img, label); overlay.appendChild(modal); - (document.readyState === 'loading' - ? () => document.addEventListener('DOMContentLoaded', () => document.body.appendChild(overlay), { once: true }) - : () => document.body.appendChild(overlay))(); + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => document.body.appendChild(overlay), { once: true }); + } else { + document.body.appendChild(overlay); + } })(); - /** * HackTricks AI Chat Widget v1.16 – resizable sidebar * ---------------------------------------------------