<?xml version="1.0" encoding="utf-8"?>
Это первая статья нашего курса eMAPT, я проверил отзывы об экзамене, пока я не вижу никаких больших проблем. Мы подготовимся к экзамену и получим сертификат. Почему "не для программистов"? Потому что я далеко не программист, я живу за счет знаний русского и английского. То что я не знаю программирование не означает что так нужно, если по продолжению какие то навыки понадобястя, мы их получим.Цель: Иметь какие то знания в мобильном пентесте приложений
Знания: +- Линукс, веб, программирование - я сам не знаю
Содержание
- Что такое eMAPT?
- Процесс Пентестирования Мобильных Приложений (Разведка)
- Архитектура Android
- Создаем Лабораторию
- Предлаборатория
- ЛАБ
https://habr.com/ru/articles/16770/
Если я написал что-то неправильно, пожалуйста, прокомментируйте и дайте мне знать!
Что такое eMAPT?
eMAPT - eLearnSecurity Mobile Application Penetration Tester - это сертификация безопасности мобильных приложений, разработанная INE. На этом экзамене у нас будет 2 APK, мы должны обнаружить уязвимости в этих приложениях, а затем написать наше собственное приложение, которое позволит нам использовать эти уязвимости.Каковы предварительные требования?
Я не видел никаких предварительных требований на веб-сайте INE, но есть некоторые вещи, которые упоминались в обзорах. Согласно отзывам, предпочтительнее обладать знаниями Java.
Согласно одной из статей:
Джоас, как разработать apk-файл, который использует другие уязвимости? Это примерно тот же apk, он будет взаимодействовать с другими уязвимыми apk, то есть заходить в ваши папки и т.д., и вы запрограммируете, apk, который открывает Google Chrome или собирает информацию из другого apk и так далее. - https://www.linkedin.com/pulse/emaptv2-exam-elearnsecurity-overview-joas-antonio/
Что такое тестирование на проникновение мобильных приложений?
Тестирование мобильных приложений на проникновение - это процесс тестирования безопасности мобильных приложений, целью которого является выявление уязвимостей. В принципе, это то же самое, что и веб-пентест, но на этот раз мы делаем это для мобильных приложений.
Я прочитал несколько статей, одна из них - /threads/99358/ - которую я перевел, но я думаю, что начинать непосредственно с объяснения инструментов - не самый лучший "101". Я постараюсь объяснить все с самых азов.
Процесс Пентестирования Мобильных Приложений
РазведкаРазведка (в нашем случаи) это процесс нахождения информации о приложении/приложениях какой либо компании. Начинаем с посещения веб-сайта, чтобы собрать информацию о доступных мобильных приложениях. После этого найдём эти мобильные приложения в App Store или Play Market. При этом изучим другие приложения, разработанные тем же разработчиком. Кроме того, ознакомимся с отзывами пользователей, поскольку они могут непреднамеренно указать на потенциальные уязвимости.
Статический анализ
На этом этапе мы углубляемся в исходный код приложения, используя ручные или автоматизированные инструменты. Вместо того чтобы запускать приложение, мы тщательно проверяем его исходный код на наличие неправильных настроек безопасности, открытых ключей API, конфиденциальных данных, таких как электронные письма, имена пользователей и пароли.
Динамический анализ
Этот шаг включает в себя активный запуск приложения и манипулирование им. Мы перехватываем трафик приложения, проверяем доступ к памяти, просматриваем хранилище памяти, пытаемся обойти закрепление SSL (SSL Pinning) и обходим механизмы обнаружения root (Root Detection).
Отчет
Процесс составления отчетов для мобильного пентестинга, похож на процесс создания отчетов для веб-приложений, но в данном случае мы объединяем результаты как веб-, так и мобильного OWASP TOP 10, чтобы обеспечить всестороннюю оценку.
Разведка
Для понимания этой части, давайте воспользуемся практическим примером - приложения компании "Bolt". Я начал с проверки приложения "Bolt" в магазине Google Play. В приложении вы увидите раздел "App Support", который выполняет ту же функцию, что и страница "Свяжитесь с нами" на веб-сайтах. Здесь вы найдете электронную почту и контактные данные компании. Ниже этого раздела находится раздел "More by Bolt Technology", в котором представлены приложения, разработанные компанией "Bolt". Это хорошая идея провести тестирование на безопасность на менее популярных приложениях, так как вероятно будет легче обнаружить в них уязвимости. Далее, вы увидите раздел "Similar Apps", который можно рассматривать как список конкурентов приложения "Bolt". В разделе "About this app" вы найдете информацию о дате последнего обновления, которая показывает, когда приложение было последний раз изменено. Это может дать представление о версиях, которые, возможно, все еще имеют некоторые проблемы. Обычно компании здесь не предоставляют много информации. Раздел "Ratings and Reviews" позволяет клиентам оставить свой отзыв о приложении. В этом разделе может содержаться информация о возможных уязвимостях в приложении или, по крайней мере, он может предоставить информацию о проблематичных функциях.
Изображение [1]: Bolt
Когда мы переходим в раздел "More by Bolt Technology", мы снова увидим список приложений, разработанных компанией "Bolt".
Изображение [2]: Bolt
Я проверил отзывы о приложении, чтобы узнать, есть ли какие-либо ошибки с которыми пользователи столкнулись при использовании приложухи. В одном отзыве описывается ситуация, когда пользователь указал неправильное местоположение (вход в торговом центре), и водитель изменил его на правильное. Несколько отзывов показывают, что водители могут отменять заказы без какого-либо подтверждения со стороны пользователя. Также была проблема в котором пользователь не мог оставить чаевые для водителя через приложение.
Исходя из этих отзывов, части приложения, которые следует проверить, включают возможность оставления чаевых в программе, отменa заказов и изменение местоположения в программе для водителя.
Изображение [3]: Отзывы
Изображение [4]: Отзывы
Сейчас пришло время проверить App Store, он в основном аналогичен Play Market, с небольшими различиями.
Мы видим название корпорации, и если нажать на него, мы увидим список приложений, принадлежащих "BOLT TECHNOLOGY OU". Также мы видим "Путешествия: № 29 в этой категории", что также дает нам информацию о конкурентах Bolt. Есть раздел "Что нового", который показывает список обновлений, внесенных в приложение. Также обратите внимание, что компания не предоставляет описания исправлений ошибок. Ниже находится "Оценки и отзывы", но вернемся к этому позже.
Изображение [5]: Bolt
Изображение [6]: Bolt
Также мы видим "Конфиденциальность приложения", который показывает, какие данные приложение собирает с устройства и какую информацию от пользователя. Остальное вы можете посмотреть сами, мне нет смысла повторять.
Изображение [7]: Bolt
Что касается отзывов, русскоязычные отзывы касаются в основном денег, а не самого приложения, а именно платежей. Что я могу сказать, похоже, "Яндекс" победил в этом аспекте, наверное.
Изображение [8]: Отзывы
Архитектура Android
Изображение [9]: Архитектура Android
Linux Kernel / Ядро Linux
Ядро Linux - это самый низкоуровневый компонент операционной системы Android.Так что же оно делает?
Оно напрямую взаимодействует с аппаратной частью устройства. Android может работать на разных смартфонах, планшетах и других устройствах, при условии наличия совместимого/подходящего (compatible) ядра Linux для этой аппаратуры. Ядро управляет процессами и обеспечивает возможность одновременного выполнения нескольких приложений. Android-приложения требуют памяти для работы, и за эффективное управление системной памятью отвечает ядро Linux. Ядро Linux предоставляет функции безопасности, такие как права пользователей и групп, контроль доступа и изоляцию процессов; мы будем с ними работать при добавлении сертификата BurpSuite. Android также использует файловую систему, предоставляемую ядром Linux, для хранения и управления файлами; разрешения для файлов такие же, как в Linux. Android-приложения взаимодействуют с аппаратной частью и ядром через системные вызовы; эти системные вызовы позволяют приложениям выполнять задачи, такие как работа с файлами, сетевое взаимодействие, управление процессами и другие.
Platform Libraries and Android Runtime / Библиотеки платформы и среда выполнения Android
Платформенные библиотеки предоставляют разработчикам предварительно скомпилированный (pre-compiled) код и интерфейсы прикладного программирования (API - Application Programming Interface), упрощая разработку приложений для Android. Эти библиотеки исключают необходимость для разработчиков писать сложный код низкого уровня, позволяя им более легко получать доступ к системным функциям и службам.Media / Mедиа
Эта библиотека предоставляет поддержку различных операций с аудио и видео, таких как воспроизведение, запись и кодирование. Она позволяет разработчикам интегрировать мультимедийные функции беспрепятственно в свои приложения.
SQLite
SQLite - это базовый механизм для управления данными приложений и важная часть системы хранения и управления данными Android.
OpenGL
OpenGL отвечает за отрисовку 2D и 3D графики. Он предоставляет API для аппаратного ускорения графики, позволяя приложениям взаимодействовать с графическим процессором (GPU) для более быстрой и эффективной отрисовки.
FreeType
FreeType - это механизм рендеринга шрифтов, используемый для отображения текста в приложениях Android.
SSL/TLS Libraries / Библиотеки
Эти библиотеки для обеспечения безопасности сетевых коммуникаций в приложениях Android. Они обеспечивают низкоуровневое шифрование. (SSL Pinning - это методика повышения безопасности в сетевых коммуникациях. - не путать с библиотеками)
Android Runtime
Android Runtime / Среда выполнения Android (ART) - это основной компонент, отвечающий за выполнение (execution) и управление приложениями Android.
Zygote
Zygote загружает часто используемые общие библиотеки и ресурсы в память, что ускоряет запуск новых приложений. При запуске приложения Android создается новый процесс путем практически полного дублирования процесса Zygote. Этот новый процесс наследует состояние памяти, ресурсы и код от процесса Zygote. Поскольку новый процесс является копией процесса Zygote, он также разделяет загруженные библиотеки и ресурсы из Zygote. Это совместное использование ресурсов позволяет приложениям Android запускаться быстрее и использовать меньше памяти.
По сути, этот процесс загружает библиотеки в память, и при запуске нового приложения этот процесс клонируется, и приложение получает возможность использовать уже загруженные библиотеки, таким образом потребляя меньше места и энергии.
Dalvik VM
Dalvik Virtual Machine (Виртуальная машина) был первоначальным исполнительным механизмом для Android перед ART. Он отвечал за выполнение и управление приложениями Android.
Core Libraries / Основные библиотеки
Эти библиотеки предоставляют фундаментальные функции для разработки приложений Android, служа основой для создания различных функциональных возможностей.
Android Application Framework / Фреймворк приложений Android
Фреймворк приложений Android - это компонент, который предоставляет широкий спектр услуг как для разработки, так и для запуска приложений. Он служит в качестве высокоуровневой основы (high-level framework), которую разработчики могут использовать в качестве фундамента для своих приложений.Activity Manager / Менеджер активности
Менеджер активности играет роль в контроле жизненного цикла приложений, обязанности включают в себя запуск, возобновление, приостановку и завершение активностей внутри приложений.
Content Provider / Поставщики контента
Поставщики контента позволяют приложениям извлекать и сохранять данные из других приложений.
Window Manager / Менеджер окон
Менеджер окон отвечает за управление отображением пользовательских интерфейсов на экране. Он занимается позиционированием окон и обеспечивает их взаимодействие.
Package Manager / Менеджер пакетов
Менеджер пакетов отвечает за установку и удаление приложений. Он следит за установленными приложениями и связанными с ними разрешениями.
Notification Manager / Менеджер уведомлений
Менеджер уведомлений позволяет приложениям создавать и управлять уведомлениями.
View System / Система представлений
Система представлений - управляет элементами пользовательского интерфейса (UI) и виджетами, обеспечивая их отображение, расположение (layout) и обработку событий (event handling).
Создаем Лабораторию
Здесь мы настроим лабораторию, которую в дальнейшем будем использовать при пентестировании Android приложений.Многие источники утверждают, что пентестинг мобильных приложений Android - это то же самое, что и пентестинг Android. Я не мастер в этом, но есть большая разница между приложениями для тестирования на проникновение и всей операционной системой в целом. Android - это ОС, и все, что мы делаем, - это тестируем приложения, которые работают в этой ОС.
JADX-GUI
JADX-GUI - это инструмент, предназначенный для декомпиляции и проверки файлов приложений Android (APK). Он декомпилирует файлы APK в исходный код Java и обладает базовыми функциями анализа кода, такими как поиск строк и вызов методов(method call) в коде.Я использую MAC, я знаю, что не все это делают, поэтому я добавлю видео с YouTube для пользователей Windows о том, как вы можете загружать инструменты. Для пользователей MAC это будет актуально, для других, если у вас возникнут какие-либо вопросы / проблемы при установке, не стесняйтесь комментировать, я постараюсь ответить.
Код:
brew install jadx
jadx-gui
Изображение [10]: jadx
Изображение [11]: jadx
APKTool
APKTool - это инструмент для декомпиляции, модификации и перекомпиляции APK-файлов. Во время декомпиляции мы можем извлекать ресурсы из APK- изображения, XML-файлй и т.д., Мы также можем редактировать исходный код приложения и перекомпилировать его.
Изображение [12]: apktool
Android Studio
Android Studio - это IDE для разработки приложений для Android. В основном он используется разработчиками для отладки и повышения производительности кода. Мы будем использовать его в качестве эмулятора Android. Мы также можем использовать другие приложения, такие как Genymotion. В курсах, которые я проверил, установлена Android Studio, поэтому я думаю, что лучше иметь ее. Из того, что я вижу, это выглядит более удобным.Вы можете скачать Android Studio с ее официального сайта (https://developer.android.com/studio) , я думаю, что видео с установкой для этого не нужно.
Изображение [13]: Android Studio
Изображение [14]: Android Studio
Genymotion
Genymotion - это программа для виртуализации мобильных устройств. Genymotion предоставляет широкий выбор виртуальных мобильных устройств это в нашу пользу + я привык с ней тестить. Правда профессионально мобильным пентестом я не занимался, в основном просто как и в веб чекал API/Запросы, OWASP Top 10 короче. Мы можем скачать Genymotion отсюда: https://www.genymotion.com/download/Предлаборатория
Наша лаборатория будет InjuredAndroid https://github.com/B3nac/InjuredAndroid . К сожалению, он больше не доступен в Google Play, но это не проблема. Мы разберемся с флагами начального уровня, а остальное будет в следующей части статьи. Перед началом лабораторной работы я хочу показать вам, как загрузить (pull) приложение из Google Play, поскольку это будет полезно в будущем. Зачем пользоваться apkpure, если мы можем сделать (загрузить приложение из Google Play в наш лаб) сами, верно?В качестве примера мы используем Marvel Unlimited, но в этой статье мы не будем проводить никакого статического/ динамического анализа.
Итак, давайте сначала создадим устройство в Android Studio. Сначала мы открываем нашу Android Studio и нажимаем на "More Actions". Выбираем “Virtual Device Manager”
Изображение [15]: Android Studio
Изображение [16]: Действия
Изображение [17]: Создание устройства
Кликаем на “Create Device”, теперь у нас есть большой выбор телефонов, планшетов и так далее. Мы будем использовать телефон, на котором есть Play Store. Мы делаем это для того, чтобы иметь возможность легко загружать приложения. Я выбираю "Pixel 7 Pro" без особой причины, вы можете выбрать все, что захотите, и протестировать чтобы понять подходит ли вам.
Изображение [18]: Создание устройства
Что такое уровень API Android?
Android похож на большой набор инструментов, который разработчики могут использовать для создания приложений. Уровни API Android представляют собой различные версии Android toolbox. Они пронумерованы по порядку, начиная с 1 и повышаясь по мере разработки новых версий Android.
Что такое версия платформы Android?
Версия платформы Android - это конкретная версия операционной системы Android, которая работает на устройстве.
Итак, что же нам следует выбрать? Давайте пока выберем "Nougat", я объясню причину, когда мы проверим AndroidManifest.xml файл некоторых других приложений.
Изображение [19]: Создание устройства
Обычно нам понадобятся 2 виртуальные машины Android, одна для извлечения из нее APK-файла, другая для тестирования этого APK-файла. На самом деле с Genymotion нам это не нужно, вы можете иметь устройство с Google Play, скачать APK и протестировать его по своему усмотрению. Единственная причина, по которой мы делаем это с Android Studio, заключается в том, что она широко используется и в будущем может нам понадобиться, так что нам не придется настраивать ее с нуля в будущих статьях. В любом случае, главный смысл этой статьи заключается в том, чтобы у нас была настройка/лаборатория (setup/lab).
Если у вас нет Nougat, вы можете легко установить.
Изображение [20]: Загрузка образа системы (system image)
После установки просто следуйте инструкциям на скриншотах, и виртуальная машина запустится.
Изображение [21]: Создание устройства
Изображение [22]: Создание устройства
Изображение [23]: Android Готов
Теперь нам нужно войти в Google Play и установить нужное приложение. Я установлю Marvel Unlimited, он занимает 17 мб и может быть простым для понимания. После установки мы можем просто загрузить apk с нашей виртуальной машины на наш ПК.
Изображение [24]: Google Play
Изображение [25]: Marvel
Изображение [26]: Marvel
Кстати, прежде чем загружать приложение с нашей виртуальной машины Android, мы должны установить ADB.
Что такое SDK?
SDK - Software Development Kit - это набор программных средств, которые мы используем для создания приложений.
Что такое ADB?
ADB - Android Debug Bridge - это инструмент командной строки, который является частью Android SDK. Мы используем его для взаимодействия с нашими устройствами Android с компьютера. Простыми словами, это оболочка (shell/terminal) нашей виртуальной машины.
Как установить adb в Windows?
Для MacOS / OS X
Код:
brew install android-platform-tools
adb shell pm list packages | grep marvel
adb shell pm path com.marvel.unlimited
sudo adb pull /data/app/com.marvel.unlimited-1/base.apk /tuda/kuda/xotim/marvel.apk
Изображение [27]: adb
Хорошо, теперь у нас есть APK, в этой части мы проведем базовый статический анализ, так что нет необходимости в другой виртуальной машине. НО, поскольку цель этой статьи - создать готовую лабораторию, давайте установим имеющийся у нас APK на нашу вторую виртуальную машину Android. На этот раз я буду использовать "Marshmallow", вы можете установить как раньше, теперь наш пользователь будет "root".
Изображение [28]: Создание устройства
Хорошо, теперь давайте установим APK в нашу новую виртуальную машину, мы можем сделать это с помощью ADB.
Код:
adb shell whoami
adb install /tuda/kuda/ustanovili/uje/marvel.apk
Изображение [29]: adb
Как вы можете видеть на скриншоте ниже, наш APK установлен.
Изображение [30]: Marvel Готов
Мы можем устанавливать приложения из APKPure, если захотим, но я просто не вижу для этого причин, кроме экономии времени. И выполнение того, что я показал, займет максимум 5 минут вашего времени сна, а не времени аниме, время аниме священно.
Хорошо, теперь, когда у нас есть все необходимое, мы можем начать нашу лабораторию.
ЛАБ
Как вы уже знаете, поврежденный Android недоступен в Google Play, поэтому мы по иронии судьбы загрузим его с APKPure. Ссылка для установки: https://apkpure.com/injuredandroid/b3nac.injuredandroid/download Я не несу ответственности, если вы обнаружите вредоносное ПО (заразитесь).AndroidManifest.xml
После установки InjuredAndroid я установил его на свою виртуальную машину. Когда мы открываем приложение, мы видим разные флаги. Прежде чем что-либо решать, давайте разберемся, что такое AndroidManifest.xml .
Изображение [31]: adb
Изображение [32]: InjuredAndroid
Изображение [33]: InjuredAndroid
Проще говоря, Android Manifest - это XML-файл, который содержит метаданные приложения Android. Давайте проверим файл AndroidManifest нашего приложения. Для этого мы должны открыть наше приложение в JADX GUI.
Изображение [34]: AndroidManifest.xml
Код:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="17" android:versionName="1.0.9" android:compileSdkVersion="29" android:compileSdkVersionCodename="10" package="b3nac.injuredandroid" platformBuildVersionCode="29" platformBuildVersionName="10">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application android:theme="@style/AppTheme" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:supportsRtl="true" android:networkSecurityConfig="@xml/network_security_config" android:roundIcon="@mipmap/ic_launcher_round" android:appComponentFactory="androidx.core.app.CoreComponentFactory">
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_seventeen" android:name="b3nac.injuredandroid.FlagSeventeenActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_c_s_p_bypass" android:name="b3nac.injuredandroid.CSPBypassActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http" android:host="b3nac.com" android:pathPattern="/.*/"/>
<data android:scheme="https" android:host="b3nac.com" android:pathPattern="/.*/"/>
</intent-filter>
</activity>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_assembly" android:name="b3nac.injuredandroid.AssemblyActivity"/>
<activity android:theme="@style/AppTheme" android:name="io.flutter.embedding.android.FlutterActivity" android:configChanges="fontScale|layoutDirection|density|screenSize|uiMode|screenLayout|orientation|keyboardHidden|keyboard|locale" android:windowSoftInputMode="adjustResize" android:hardwareAccelerated="true"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_rce" android:name="b3nac.injuredandroid.RCEActivity">
<intent-filter android:label="filter_view_flag11">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="flag13" android:host="rce"/>
</intent-filter>
</activity>
<activity android:name="b3nac.injuredandroid.SettingsActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_exported_protected_intent" android:name="b3nac.injuredandroid.ExportedProtectedIntent" android:exported="true"/>
<activity android:name="b3nac.injuredandroid.QXV0aA" android:exported="true"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_twelve_protected" android:name="b3nac.injuredandroid.FlagTwelveProtectedActivity"/>
<activity android:label="@string/title_activity_deep_link" android:name="b3nac.injuredandroid.DeepLinkActivity">
<intent-filter android:label="filter_view_flag11">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="flag11"/>
</intent-filter>
<intent-filter android:label="filter_view_flag11">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="https"/>
</intent-filter>
</activity>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_ten_unicode" android:name="b3nac.injuredandroid.FlagTenUnicodeActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_one_login" android:name="b3nac.injuredandroid.FlagOneLoginActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_nine_firebase" android:name="b3nac.injuredandroid.FlagNineFirebaseActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_eight_login" android:name="b3nac.injuredandroid.FlagEightLoginActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_seven_sqlite" android:name="b3nac.injuredandroid.FlagSevenSqliteActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flags_overview" android:name="b3nac.injuredandroid.FlagsOverview"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_six_login" android:name="b3nac.injuredandroid.FlagSixLoginActivity"/>
<activity android:name="b3nac.injuredandroid.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="b3nac.injuredandroid.XSSTextActivity"/>
<activity android:name="b3nac.injuredandroid.DisplayPostXSS"/>
<activity android:name="b3nac.injuredandroid.FlagOneSuccess"/>
<activity android:name="b3nac.injuredandroid.b25lActivity" android:exported="true"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_two" android:name="b3nac.injuredandroid.FlagTwoActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_three" android:name="b3nac.injuredandroid.FlagThreeActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_four" android:name="b3nac.injuredandroid.FlagFourActivity"/>
<receiver android:name="b3nac.injuredandroid.FlagFiveReceiver" android:exported="true"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_flag_five" android:name="b3nac.injuredandroid.FlagFiveActivity"/>
<activity android:theme="@style/AppTheme.NoActionBar" android:label="@string/title_activity_test_broadcast_reciever" android:name="b3nac.injuredandroid.TestBroadcastReceiver" android:exported="true"/>
<activity android:name="b3nac.injuredandroid.ContactActivity"/>
<activity android:theme="@android:style/Theme.Translucent.NoTitleBar" android:name="com.google.firebase.auth.internal.FederatedSignInActivity" android:permission="com.google.firebase.auth.api.gms.permission.LAUNCH_FEDERATED_SIGN_IN" android:exported="true" android:excludeFromRecents="true" android:launchMode="singleTask"/>
<service android:name="com.google.firebase.components.ComponentDiscoveryService" android:exported="false" android:directBootAware="true">
<meta-data android:name="com.google.firebase.components:com.google.firebase.auth.FirebaseAuthRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
<meta-data android:name="com.google.firebase.components:com.google.firebase.firestore.FirestoreRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
<meta-data android:name="com.google.firebase.components:com.google.firebase.database.DatabaseRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/>
</service>
<meta-data android:name="flutterProjectType" android:value="module"/>
<meta-data android:name="flutterEmbedding" android:value="2"/>
<provider android:name="com.google.firebase.provider.FirebaseInitProvider" android:exported="false" android:authorities="b3nac.injuredandroid.firebaseinitprovider" android:initOrder="100"/>
<activity android:theme="@android:style/Theme.Translucent.NoTitleBar" android:name="com.google.android.gms.common.api.GoogleApiActivity" android:exported="false"/>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
</application>
</manifest>
Давайте попробуем разобраться в некоторых ключевых понятиях здесь. Файл начинается с "<?xml version="1.0" encoding="utf-8"?>", который показывает версию XML и кодировку символов. После этого:
<manifest>
Манифест - это файл, который содержит основную информацию о приложении, такую как его версия, разрешения, компоненты
android:compileSdkVersion="29"
Этот атрибут указывает на версию SDK, используемую для компиляции приложения.
package="b3nac.injuredandroid"
Этот атрибут указывает на уникальное имя пакета приложения.
<uses-sdk>
Этот элемент указывает минимальную и целевую версии SDK, необходимые для запуска приложения. В нашем случаи minSdkVersion="21", a targetSdkVersion="29"
<uses-permission>
Элементы с этим тегом определяют разрешения, необходимые для работы приложения. В нашем случаи:
Код:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Таким образом, наши разрешения для приложений не кажутся опасными, на самом деле это зависит от того, что приложение собирается записать во внешнее хранилище, поскольку оно может быть доступно другим приложениям. В остальном это приложение кажется обычным.
<application>
Этот элемент описывает основные характеристики приложения, активности, службы и т. д.
<activity>
Элементы с этим тегом описывают активности приложения, это просто экран который пользователь видит и с которым может взаимодействовать. Этот элемент имеет атрибут "exported" который указывает, может ли активность быть доступным для использования или взаимодействия другими приложениями. Этот атрибут может иметь два значения: "true" и "false".
- exported="true" - это означает, что другие приложения могут взаимодействовать с этой активностью
- exported="false" - это означает, что другие приложения не могут взаимодействовать с этой активностью
Элементы с этим тегом описывают намерения, тоесть действия и данные которые она может принимать.
Флаг №1
Когда мы нажимаем на флаг 1, появляется окно, которое запрашивает ввод, и внизу есть кнопка оповещения, когда мы нажимаем на нее один раз, это говорит о том, что флаг находится у нас под носом, когда мы нажимаем на него во второй раз, это говорит о том, что флаг также находится под графическим интерфейсом. Из этих 2 подсказок мы можем понять, что флаг где-то есть в коде. Гениально, верно?) (я шучу)
Изображение [35]: Флаг №1
Изображение [36]: Флаг №1
Мы можем просто проверить код, связанный с флагом № 1. Итак, что означает этот код? Существует метод, называемый submitFlag, который выполняет действие при нажатии кнопки. Он проверяет, равен ли текст в EditText строке "F1ag_0n3". Если это значение истинно, то запускается новое действие под названием FlagOneSuccess.
Изображение [37]: JADX
Изображение [38]: Флаг №1
Код:
public final void submitFlag(View view) {
EditText editText = (EditText) findViewById(R.id.editText2);
C2646d.m696b(editText, "editText2");
if (C2646d.m697a(editText.getText().toString(), "F1ag_0n3")) {
Intent intent = new Intent(this, FlagOneSuccess.class);
new FlagsOverview().m3890J(true);
new ApplicationC1464j().m3870b(this, "flagOneButtonColor", true);
startActivity(intent);
}
}
Теперь мы можем просто ввести флаг, и задача будет решена.
Изображение [39]: Флаг №1
Флаг №2
Теперь мы делаем то же самое со вторым флагом, это дает нам подсказку, что ключевыми словами являются "activity" и "exported", мы можем проверить наш файл манифеста, чтобы увидеть действия, которые можно экспортировать.
Изображение [40]: Флаг №2
Изображение [41]: Флаг №2
Существует множество действий, которые можно экспортировать, вы можете спросить меня, почему я выбрал именно это, я внук Ванги или Распутина? Ну, у него есть активность b25lActivity, и когда я искал его (кликнул просто), я увидел "flagTwoButtonColor", вот почему я решил проверить именно эту активность.
Изображение [42]: AndroidManifest.xml
Изображение [43]: b25lActivity
Код:
adb shell am start b3nac.injuredandroid/.b25lActivity
Изображение [44]: adb
Изображение [45]: Флаг №2
Флаг №3
Теперь мы проверяем "flagThreeActivity", это дает нам подсказку о том, что существует XML-файл, который содержит наш флаг. Обычно файл "strings.xml " может содержать некоторую конфиденциальную информацию, такую как ключи и т.д. Мне лень проверять XML-файлы один за другим, поэтому я просто просмотрю "flagThreeActivity" в JADX-GUI.
Изображение [46]: Флаг №3
Изображение [47]: Флаг №3
Когда мы проверяем FlagThreeActivity, мы снова видим метод submitFlag, теперь он проверяет, равен ли введенный нами флаг (EditText) результату getString(R.string.cmVzb3VyY2VzX3lv). Я решил просто проверить "cmVzb3VyY2VzX3lv", чтобы понять, что это такое.
Код:
public final void submitFlag(View view) {
EditText editText = (EditText) findViewById(R.id.editText2);
C2646d.m696b(editText, "editText2");
if (C2646d.m697a(editText.getText().toString(), getString(R.string.cmVzb3VyY2VzX3lv))) {
Intent intent = new Intent(this, FlagOneSuccess.class);
new FlagsOverview().m3888L(true);
new ApplicationC1464j().m3870b(this, "flagThreeButtonColor", true);
startActivity(intent);
}
}
Изображение [48]: JADX
Изображение [49]: JADX
Изображение [50]: JADX
Изображение [51]: JADX
Изображение [52]: Флаг №3
Флаг №4
Давайте на этот раз проверим JADX-GUI напрямую. Итак, я проверил флаг на активность, все так же, как и в предыдущих, но на этот раз код проверяет, равен ли введенный нами флаг m3875a. Поэтому я решил проверить m3875a, чтобы понять, что это такое. Также из кода мы можем сказать, что происходит некоторая расшифровка.
Изображение [53]: JADX
Изображение [54]: JADX
Изображение [55]: Base64 Decode
Изображение [56]: Флаг №4
Флаг №5
Это также касается экспортируемое действие. Когда мы открываем FlagFiveActivity, мы получаем некоторую ошибку. В ошибке есть "FlagFiveReceiver", который говорит, что есть какой-то "приемник/receiver". Поэтому я просто проверил AndroidManifest.xml .
Изображение [57]: Флаг №5
Изображение [58]: JADX
Мы видим, что существует действие "TestBroadcastReceiver", мы решаем лабораторную работу, просто запустив TestBroadcastReceiver
Изображение [59]: adb
Изображение [60]: Флаг №5
Что ж, на самом деле мы могли бы решить эту проблему и другим способом. Мы могли бы просто проверить ошибку и увидеть "com.b3nac.injuredandroid.intent.action.CUSTOM_INTENT" и просто выполнить поиск по нему.
Изображение [61]: JADX
Автор grozdniyandy
Источник https://xss.pro/
Вложения
Последнее редактирование: