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