Как узнать сервер приложения
IP-адреса — это цифровые идентификаторы, с помощью которых устройства могут находить друг друга в интернете или локальных сетях и обмениваться данными. Поэтому каждый подключённый компьютер или мобильный девайс получает свой IP.
Даже если вы не технический специалист, вам не помешает знать, как определять IP-адреса своих гаджетов. Это может пригодиться, к примеру, если вы захотите подключить сетевой принтер или решите предоставить удалённый доступ к личному компьютеру через интернет.
Любое сетевое устройство может иметь как внутренний, так и внешний IP-адрес. Первый тип служит для взаимодействия техники внутри локальных сетей, второй — в рамках всего интернета.
Как узнать внешний (публичный) IP-адрес
Быстро посмотреть свой внешний IP с компьютера или мобильного устройства можно на одном из специальных сайтов вроде 2IP, WhatIsMyIP и IP-Ping. Зайдя на любой из них, вы сразу увидите внешний IP (он же Public IP) на самом видном месте.
Устройства, которые выходят в интернет через один роутер, имеют общий внешний IP.
Как узнать внутренний (локальный) IP-адрес
С внутренними IP-адресами всё немного сложнее: на каждой платформе их проверяют по-разному.
Как узнать IP-адрес в Windows
Найдите через поиск по системе утилиту «Командная строка». Кликните по её значку правой кнопкой мыши и запустите от имени администратора. В открывшемся окне введите команду ipconfig и нажмите Enter. На экране появятся данные, среди которых должна быть строка IPv4. Рядом с ней вы увидите код формата 192.168.1.40 — это и есть внутренний IP-адрес компьютера.
Как узнать IP-адрес в macOS
Чтобы посмотреть IP-адрес в macOS, достаточно зайти в раздел «Системные настройки» → «Сеть» и выбрать на боковой панели текущее соединение. Внутренний IP-адрес Mac отображается под статусом подключения.
Как узнать IP-адрес в Android
Внутренний IP-адрес Android-устройства обычно доступен в разделе с настройками Wi-Fi. Интерфейс на разных аппаратах может сильно отличаться, но вы наверняка без особого труда найдёте нужное меню самостоятельно. Если нет — можете установить бесплатную программу IP Tools. Она отобразит внутренний и внешний IP-адреса сразу после запуска.
Как узнать IP-адрес в iOS
На iPhone или iPad внутренний IP можно легко найти в разделе с параметрами Wi-Fi. Достаточно нажать на круглую иконку рядом с активным беспроводным соединением, и в следующем меню появится IP.
Как узнать чужой IP-адрес
Вы можете узнать внешний IP другого пользователя Сети (например, чтобы определить его приблизительное местоположение) с помощью сервиса IP Logger. Но для этого необходимо, чтобы человек кликнул по созданной вами ссылке.
Сначала создайте URL, который позволит вам узнать чужой IP. Для этого перейдите на сайт IP Logger и в блоке «Ссылка / Картинка» вставьте URL на любую страницу или изображение. Это может быть, к примеру, ссылка на новость или статью. Затем кликните «Получить код логгера». В следующем окне скопируйте адрес из поля «Ваша ссылка для сбора IP-адресов» и запомните свой ID в системе.
Когда пользователь кликнет по ссылке, IP Logger просто откроет для него целевую страницу, а для вас сохранит чужой IP. Последний можно будет посмотреть на сайте сервиса: достаточно ввести свой ID на главной странице IP Logger в блоке «Просмотр логгера».
Не забывайте, что пользователь может выходить в интернет через прокси или VPN. В таком случае узнать его настоящий IP-адрес не выйдет.
Если же вас интересует, как узнать IP-адрес роутера, можете ознакомиться с другим материалом Лайфхакера.
На компьютере может быть установлено довольно много программ и все они резервируют в операционной системе определенный порт для взаимодействия с другим программным обеспечением по сети. В большинстве случаев пользователь заранее знает какой порт использует программа. Это может быть официально зарезервированный порт, под определенный сетевой протокол. Например почтовые программы используют для приема почты протокол POP3 и резервируют порт 110. Бывают неофициально резервируемые порты, например порт 1540 используемый агентом сервера 1С:Предприятие. Информацию об используемых неофициальных портах разработчики программного обеспечения указывают в документации.
Определения порта программы стандартными средствами Windows
Узнать какой порт использует программа в операционной системе Windows можно используя инструменты командной строки - tasklist и netstat. С помощью tasklist узнаем номер идентификатора процесса - PID, затем в netstat находим номер порта этого процесса.
Поиск идентификатора процесса PID
1. Открываем командную строку: сочетание клавиш <Win +R> и вводим команду CMD.
2. Запускаем tasklist и находим PID процесса.
Если необходимо отобразить полный список процессов, в том числе служебных и системных, необходимо использовать tasklist без аргументов.
Команда tasklist /fi "status eq running" найдет только те процессы, которые были запущенны программами. Это сократит список процессов и облегчит поиск.
Находим в списке нужную программу, например OneDrive.exe и запоминаем соответствующий PID.
Поиск порта процесса
Для получения списка используемых портов воспользуемся утилитой командной строки netstat.
B netstat были использованы слtдующие аргументы:
-a - показывает все сокеты, используемые процессами
-o - показывает PID процесса
-n - показывает адреса в числовом формате
В результате будет получен довольно крупный список активных сетевых соединений, среди которых необходимо найти соединение с нужным PID.
Чтобы отфильтровать список и сразу найти сетевое соединение с нужным PID перенаправим результаты netstat в утилиту findstr "PID_number", где PID_number - идентификатор искомого процесса.
В найденных результатах видно, что процесс c PID 15304 (программа OneDrive.exe) использует несколько сетевых портов: 11906, 11907, 11908.
Обращайте внимание на то, для какого траспортного протокола открыт порт: ТСР или UDP. Это информация будет важна, когда будете пробрасывать порт через межсетевой экран.
Программы для просмотра сетевых соединений
Этот способ подойдет для тех, кто не хочет погружаться в работу утилит командной строки Windows, а желает быстро и просто получить информацию о портах, которые использует программа, в графическом интерфейсе.
Без труда в интернете можно найти 2 бесплатные программы для полчения списка сетевых соединений операционной системы - это "TCPView" и "Curr ports".
TCPView
После запуска программы будет сразу показан список всех сетевых соединений процессов с информацией о протоколе, локальном и удаленном адресе, локальном и удаленном порте соединения. Список можно фильтровать, сортировать и следить за изменениями онлайн. В дополнение к этому можно убить какой-либо процесс или определить кому принадлежит ip-адрес хоста, с которым установлено соединение.
Из мелких недостатков - отсутствие русского языка.
CurrPorts
Из плюсов программы следует отметить наличие русского языка. Чтобы русифицировать программу нужно скачать отдельный файл русификации и положить его в папку с программой.
Сегодня у нас насыщенная программа (еще бы, столько областей кибербезопасности за раз!): рассмотрим декомпиляцию Android-приложения, перехватим трафик для получения URL-адресов, пересоберем apk без исходного кода, поработаем криптоаналитиками и многое другое:)
1. Реверсим apk
Итак, перед нами то немногое, что удалось извлечь из полуразобранного робота – apk-приложение , которое каким-то образом должно помочь нам получить ключ. Сделаем самое очевидное: запустим apk и посмотрим на его функционал. Более чем минималистичный интерфейс приложения сомнений не оставляет – это кастомный файловый клиент FileDroid, позволяющий скачать файл с удаленного сервера. Окей, выглядит несложно. Подключаем телефон к Интернету, делаем пробную попытку скачивания (сразу key.txt – ну а вдруг?) – безуспешно, файл на сервере отсутствует.
Переходим к следующему по уровню сложности мероприятию – декомпилируем apk c помощью JADX и анализируем исходный код приложения, который, к счастью, совсем не обфусцирован. Наша текущая задача – понять, какие файлы предлагает удаленный сервер для скачивания, и выбрать из них тот самый, с ключом.
Начинаем с класса com.ctf.filedroid.MainActivity, содержащего пока самый интересный для нас метод onClick(), в котором обрабатывается нажатие на кнопку «Download». Внутри этого метода дважды происходит обращение к классу ConnectionHandler: cперва вызывается метод ConnectionHandler.getToken(), а только затем – ConnectionHandler.getEncryptedFile(), в который передается имя файла, запрошенного пользователем.
Ага, то есть сначала нам нужен токен! Разберемся чуть подробнее с процессом его получения.
Метод ConnectionHandler.getToken() принимает на вход две строки, а затем отправляет GET-запрос, передавая эти строки в качестве параметров «crc» и «sign». В ответ сервер присылает данные в JSON-формате, из которых наше приложение извлекает токен доступа и использует его для скачивания файла. Это всё, конечно, хорошо, но что за «crc» и «sign»?
Чтобы понять это, двигаемся дальше в сторону класса Checks, любезно предоставляющего методы badHash() и badSign(). Первый из них подсчитывает контрольную сумму от classes.dex и resources.arsc, конкатенирует эти два значения и оборачивает в Base64 (обратим внимание на флаг 10 = NO_WRAP | URL_SAFE, вдруг пригодится). А что же второй метод? А он делает тоже самое с SHA-256 fingerprint’ом подписи приложения. Эх, похоже, что FileDroid не очень-то жаждет быть пересобранным :(
Окей, допустим, что токен получили. Что дальше? Передаем его на вход метода ConnectionHandler.getEncryptedFile(), который присовокупляет к токену имя запрошенного файла и формирует еще один GET-запрос, на этот раз с параметрами «token» и «file». Сервер в ответ (судя по названию метода) отправляет зашифрованный файл, который сохраняется на /sdcard/.
Ладно, будем решать проблемы по мере их поступления, а сейчас наша основная проблема состоит в том, что мы всё еще не знаем, какой файл нам нужно скачать. Однако в процессе изучения класса ConnectionHandler мы не могли не заметить, что прямо между методами getToken() и getEncryptedFile() разработчики FileDroid забыли еще один очень соблазнительный метод под говорящим названием getListing(). Значит, сервер такой функционал поддерживает… Кажется, это то, что нужно!
Для получения листинга нам потребуются уже известные «crc» и «sign» – не проблема, мы уже знаем, откуда они берутся. Считаем значения, отправляем GET-запрос и … Так, стоп. А куда мы GET-запрос собираемся отправлять? Неплохо было бы сначала получить URL-адрес удаленного сервера. Эх, возвращаемся в MainActivity.onClick() и смотрим, как формируются аргументы netPath для вызова методов getToken() и getEncryptedFile():
Странные буквосочетания «fnks» и «qdmk» вынуждают нас обратиться к результату декомпиляции метода wat.getSecure(). Спойлер: этот результат у JADX так себе.
При более пристальном рассмотрении становится понятно, что всё это не слишком приятное содержимое метода можно заменить на привычный switch-case такого вида:
Так как «fnks» и «qdmk» уже используются для получения токена и скачивания файла, то «tkog» должен давать URL, необходимый для запроса листинга доступных файлов на сервере. Кажется, появляется надежда дешево получить требуемый путь… В первую очередь посмотрим, как хранятся URL’ы в приложении. Открываем функцию com.ctf.filedroid.x37AtsW8g.rlieh786d() и видим, что каждый URL сохранен в виде закодированного массива байтов, а сама функция формирует из этих байтов строку и возвращает её.
Хорошо. Но далее строка передается в функцию com.ctf.filedroid.wat.radon(), реализация которой вынесена в нативную библиотеку libae3d8oe1.so. Реверсить arm64? Хорошая попытка, FileDroid, но давай в другой раз?
2. Получаем URL-адреса сервера
Попробуем подойти с другой стороны: перехватить трафик, получить URL-адреса в открытом виде (а в качестве бонуса – еще и значения контрольной суммы и подписи!), сопоставить их байтовым массивам из com.ctf.filedroid.x37AtsW8g.rlieh786d() – может быть шифрование окажется обычным шифром Цезаря или XOR. Тогда не составит труда восстановить третий URL-адрес и выполнить листинг.
Для перенаправления трафика можно использовать любой удобный прокси ( Charles , fiddler , BURP и т.п.). Выполняем настройку переадресации на мобильном устройстве, устанавливаем соответствующий сертификат, проверяем, что перехват осуществляется успешно, и запускаем FileFroid. Пытаемся скачать произвольный файл и … видим «NetworkError». Вызвана эта ошибка наличием certificate-pinning (см. метод com.ctf.filedroid.ConnectionHandler.sendRequest): файловый клиент проверяет, что «зашитый» в приложение сертификат соответствует серверу, с которым осуществляется взаимодействие. Теперь понятно, почему контролируется целостность ресурсов приложения!
Однако в перехваченном трафике мы можем увидеть хотя бы доменное имя сервера, к которому обращается файловый клиент, а значит, надежда расшифровать URL-адреса остается!
Вернемся к функции com.ctf.filedroid.x37AtsW8g.rlieh786d() и отметим, что во всех массивах совпадают первые несколько десятков байт:
Кроме того, последний байт третьего массива намекает, что без base64 дело не обошлось. Попробуем декодировать и поксорить получившиеся байты с известной частью URL:
Кажется, никто никогда еще так не радовался ARMag3dd0n’у! Дело за малым: последовательно декодируем из base64 URL-адреса и ксорим с найденным ключом. Но… а если бы это был не XOR, а самопальный перестановочный шифр, который не подберешь и со ста попыток?
3. Пересобираем apk с помощью Frida
В рамках этого write-up’а рассмотрим более безболезненный (и, на наш взгляд, более красивый) способ решения – с помощью фреймфорка Frida , который позволит в run-time исполнить произвольные методы apk-приложения с нужными нам аргументами. Для этого потребуется телефон с root-правами или эмулятор. Предполагаем следующий план действий:
- Установка компонентов Frida на ПК и подопытный телефон.
- Восстановление URL-адресов, соответствующих запросам на получение токена или листинга, и скачивание файла (с помощью Frida).
- Извлечение значений контрольной суммы и подписи оригинального приложения.
- Получение листинга файлов, хранящихся на сервере, и выявление нужного файла.
- Скачивание и расшифрование файла.
Вновь обращаемся к классу MainActivity и обнаруживаем, что в onCreate() вызывается метод doChecks(), который и вывел в лог приведенные ошибки:
Кроме того, в onResume() также проверяется, открыт ли типичный для Frida порт:
Наш файловый клиент оказывается немного нетолерантным к отладке, руту и самой Frida. Такое противодействие абсолютно не входит в наши планы, поэтому получаем smali-код приложения с помощью утилиты apktool , открываем в любом текстовом редакторе файл MainActivity.smali, находим метод onCreate() и превращаем вызов doChecks() в безобидный комментарий:
Затем лишаем метод suicide() возможности действительно завершить работу приложения:
Далее снова соберем наше слегка улучшенное приложение с помощью apktool и подпишем его, выполнив следующие команды (могут понадобиться права Администратора):
Переустанавливаем приложение на телефоне, запускаем его – ура, загрузка проходит без происшествий, лог чист!
Переходим к установке фреймворка Frida на ПК и мобильное устройство:
Запускаем сервер фреймворка Frida на мобильном устройстве:
Подготавливаем простой скрипт get-urls.js, который вызовет wat.getSecure() для всех поддерживаемых серверов запросов:
Запускаем FileDroid на мобильном устройстве и «цепляемся» нашим скриптом к соответствующему процессу:
4. Получаем листинг файлов на сервере
Наконец-то удаленный сервер стал для нас чуть ближе! Теперь нам известно, что сервер поддерживает запросы по следующим путям:
Вручную тоже можно. Любым удобным инструментом считаем CRC32 от classes.dex и resources.arsc (например, для Linux – стандартной утилитой crc32), получаем значения 1276945813 и 2814166583 соответственно, конкатенируем их (выйдет 12769458132814166583) и кодируем в base64, например, тут :
Для того, чтобы выполнить аналогичную процедуру для подписи приложения, в окне JADX переходим в раздел «APK Signature», копируем значение «SHA-256 Fingerprint» и кодируем его в base64 как байтовый массив:
Важно: в оригинальном apk base64-кодирование осуществляется с флагом URL_SAFE, т.е. вместо символов «+» и «/» используются «–» и «_» соответственно. Необходимо убедиться, что при самостоятельном кодировании это будет тоже соблюдаться. Для этого при кодировании онлайн можно заменить используемый алфавит с «ABCDEFGHIJKLMNOPQRSTUVWXYZabcde fghijklmnopqrstuvwxyz0123456789+/» на «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl mnopqrstuvwxyz0123456789–_», а при использовании скрипта на python3 – просто вызвать функцию base64.urlsafe_b64encode().
Наконец-то у нас есть все составляющие успешного получения листинга файлов:
Далее запросим одноразовый токен доступа и скачаем файл:
Открываем скачанный файл и вспоминаем об одном небольшом обстоятельстве, оставленном нами на потом:
5. Добавим щепоточку криптографии.
Эх, рановато мы отложили FileDroid. Снова вернемся в JADX и посмотрим, не оставили ли разработчики файлового клиента чего-нибудь полезного для нас. Да, это тот случай, когда code cleanup явно не популярен: неиспользуемый метод decryptFile() спокойно ждет нашего внимания в классе ConnectionHandler. Что мы имеем?
Помещаем зашифрованный файл 0p3n1fuw4nt2esk4p3.jpg на /sdcard/, запускаем FileDroid и инжектим скрипт decrypt.js с помощью Frida. После того, как скрипт отработает, на /sdcard/ появится файл plainfile.jpg. Открываем его и … just solved!
Это непростое задание требовало от участников знаний и навыков сразу в нескольких сферах инфобеза, и мы рады тому, что большинство соревнующихся успешно с ним справилось! Надеемся, что те, кому чуть-чуть не хватило времени или знаний до получения ключа, теперь тоже успешно пройдут аналогичные таски в любом CTF :)
Как узнать IP адрес на Андроид. В этой статье мы расскажем о том, как узнать IP адрес на Android устройстве. Но, для начала нужно коротко рассказать о том, что такое IP адрес и для чего он используется.
IP адрес это адрес вашего компьютера в сети. IP адрес выдается каждому активному устройству, подключенному к сети. Другими словами IP адрес получают компьютеры, ноутбуки, медиа плееры, телевизоры, телефоны, смартфоны, планшеты, роутеры и другие подобные устройства, которые подключаются к сети.
Также нужно отметить, что IP адрес бывает внутренний и внешний. Внутренний IP адрес это адрес, который используется внутри вашей локальной компьютерной сети, а внешний IP адрес это адрес под которым ваш компьютер доступен из Интернета.
Как узнать внутренний IP адрес на Андроид
Для того чтобы узнать внутренний IP адрес на Андроид устройстве вам необходимо зайти в настройки. Поэтому открываем верхнюю шторку и нажимаем на кнопку с иконкой в виде шестеренки. Также вы можете зайти в настройки Андроида через меню «Все программы» или с помощью ярлыка на рабочем столе.
После этого нужно перейти в раздел настроек «Об устройстве». В зависимости от вашего устройства и прошивки данный раздел настроек может называться по-разному. Например, «О планшете», как на скриншоте внизу.
Дальше вам нужно открыть раздел «Общая информация». Как и в предыдущем случае, данный раздел может называться по-разному. Например, на смартфонах от Samsung данный раздел обычно называется «Состояние».
После этого перед вами откроется окно «Общая информация». Здесь будет указан IP адрес вашего Андроид устройства.
Нужно напомнить, что это внутренний IP адрес. О том, как узнать внешний IP адрес Андроид устройства читайте ниже.
Как узнать внешний IP адрес на Андроид
Для того чтобы узнать внешний IP адрес Андроид устройства вам необходимо зайти на специальный сайт, который определяет внешний IP адрес пользователя. Сейчас существует большое количество подобных сайтов. Поэтому предлагаем вам список наиболее популярных из них:
Сайт отображает ваш внешний IP адрес, а также некоторую другую информацию о вас. Например, версию Андроида и веб-браузера.
Читайте также: