Exploiting Content Providers
Використання постачальників контенту
Вступ
Дані надходять з одного додатку до інших за запитом компонента, відомого як постачальник контенту. Ці запити обробляються за допомогою методів класу ContentResolver. Постачальники контенту можуть зберігати свої дані в різних місцях, таких як база даних, файли або через мережу.
У файлі Manifest.xml потрібно зробити декларацію постачальника контенту. Наприклад:
Для доступу до content://com.mwr.example.sieve.DBContentProvider/Keys
необхідний дозвіл READ_KEYS
. Цікаво відзначити, що шлях /Keys/
доступний у наступному розділі, який не захищений через помилку розробника, який захистив /Keys
, але оголосив /Keys/
.
Можливо, ви зможете отримати доступ до приватних даних або використати деякі вразливості (SQL Injection або Path Traversal).
Отримати інформацію з викритих постачальників контенту
Можливо скласти шлях до DBContentProvider, починаючи URIs з "content://". Цей підхід ґрунтується на отриманих відомостях під час використання Drozer, де ключова інформація була знаходиться в каталозі /Keys.
Drozer може вгадувати та спробувати кілька URIs:
Вам також слід перевірити код ContentProvider для пошуку запитів:
Також, якщо ви не можете знайти повні запити, ви можете перевірити, які імена декларовані ContentProvider у методі onCreate
:
Запит буде виглядати як: content://name.of.package.class/declared_name
Content Providers, підтримувані базою даних
Ймовірно, більшість Content Providers використовуються як інтерфейс для бази даних. Тому, якщо ви зможете до нього отримати доступ, ви зможете витягти, оновити, вставити та видалити інформацію. Перевірте, чи ви можете отримати доступ до чутливої інформації або спробуйте змінити її для обхіду механізмів авторизації.
При перевірці коду Content Provider шукайте також функції, названі як: query, insert, update та delete:
Тому що ви зможете їх викликати
Запит вмісту
Вставити вміст
Запитуючи базу даних, ви дізнаєтеся назви стовпців, після чого зможете вставити дані в БД:
Зверніть увагу, що при вставці та оновленні ви можете використовувати --string для позначення рядка, --double для позначення дробового числа, --float, --integer, --long, --short, --boolean
Оновити вміст
Знаючи назви стовпців, ви також можете змінювати записи:
Видалити вміст
SQL Injection
Дуже просто провести тестування на SQL ін'єкцію (SQLite), маніпулюючи проекцією та полями вибірки, які передаються до постачальника контенту. Під час запиту до постачальника контенту є 2 цікаві аргументи для пошуку інформації: --selection та --projection:
Ви можете спробувати зловживати цими параметрами для тестування SQL ін'єкцій:
Автоматичне виявлення SQLInjection за допомогою Drozer
Провайдери контенту, підтримані файловою системою
Провайдери контенту також можуть бути використані для доступу до файлів:
Читання файлу
Ви можете читати файли з провайдера контенту
Отслідження шляху
Якщо ви можете отримати доступ до файлів, ви можете спробувати використати отслідження шляху (у цьому випадку це не є обов'язковим, але ви можете спробувати використати "../" та подібні трюки).
Автоматичне виявлення обхіду шляху за допомогою Drozer
Посилання
Last updated