- Как поделиться своим локальным веб-сервером с Интернетом. Ngrok
- Установка Ngrok
- Ngrok
- Полезно знать об Ngrok.
- HackWare.ru
- Этичный хакинг и тестирование на проникновение, информационная безопасность
- Как без белого IP локальный веб-сервер сделать доступным из Интернета
- Как установить ngrok
- Установка ngrok в Kali Linux и в любой другой дистрибутив Linux
- Установка в ngrok BlackArch
- Установка ngrok в Windows
- Как получить токен аутентификации ngrok (authtoken)
- Как узнать чужой IP
- Как отправить файл без файлообменников и почты
- Прокси с ngrok
- Команды и опции ngrok
- Заключение
Как поделиться своим локальным веб-сервером с Интернетом. Ngrok
Довольно часто у разработчика возникает необходимость показать свои наработки, расположенные на локальном компьютере. Если же приходится тестировать мобильные приложения, то доступ к API также нужен.
Конечно, можно купить ip-адрес, домен, хостинг, настроить всё это. Но проще, быстрее и доступнее использовать утилиту ngrok, создающую туннель к localhost.
Скачать ngrok можно по адресу: https://ngrok.com/
Программа доступна для Mac OS, Windows, Linux и FreBSD. В ограниченном режиме можно использовать бесплатно, которого, к слову сказать, хватает с лихвой в большинстве случаев.
Для начала нужно установить программу.
Установка Ngrok
Mac OS X 64-Bit:
Linux 64-Bit:
Linux 32-bit:
FreeBSD 64-Bit:
FreeBSD 32-Bit:
Например, для Xubuntu:
Если выдаёт ошибку, проверьте права на запись файлов в указанной директории.
Далее необходимо распаковать архив. В нашем случае с Xubuntu:
Или сделать распаковку в окне:
Теперь перемещаем утилиту:
Затем даём права на запуск скрипта:
Вывести помощь в терминале можно командой:
Создание туннеля в простейшем варианте (обратите внимание на порт, обычно он 80, у мена 8000):
Где http://370f2cc5.ngrok.io уникальный адрес в Интернет.
Можно в hosts файл прописать домен, например, mysite.local, после чего запустить туннель:
Если зарегистрироваться, то:
- будет доступ через SSL
- появится возможность защиты туннеля паролем
- станет доступен выбор поддоменов с резервированием
- будет возможно туннелирование TCP и UDP
Ngrok
Ngrok — это платформа, которая с помощью установленной утилиты, позволяет, организовать удалённый доступ на веб-сервер или какой-то другой сервис, запущенный ПК. Доступ организуется через созданный при запуске ngrok безопасный туннель. ПК, при этом, может находиться за NAT’ом, и не иметь статического IP адреса.
Совсем не обязательно тащить тестовый проект куда-то ещё, можно показать его заказчику прямо с локальной машины, или, например, с помощью Ngrok можно очень легко расшарить файлы лежащие на ПК.
Для начала, нам потребуется веб-сервер, запущенный на компьютере (конечно же, его нужно настроить при необходимости):
И непосредственно сам Ngrok. Его можно запускать от обычного пользователя, и со включенным selinux:
Сразу после запуска, можно увидеть, что сервис создал временный поддомен вида abcde123.ngrok.io для организации доступа на ПК, а локально по адресу 127.0.0.1:4040, была запущена панель, в которой отображаются данные по удалённым подключениям к туннелю. Пробуем открыть домен abcde123.ngrok.io из любого места, и получаем доступ к настроенной на веб-сервере директории.
При необходимости, мы можем указать регион, в котором будет запущен прокси:
Или защитить запущенный туннель паролем для доступа:
В случае появления ошибки вида:
Стоит проверить, запущен ли веб-сервер локально, и работает ли он на 80 порте.
Полезно знать об Ngrok.
Авторизуемся. Если вы планируете использовать сервер часто, имеет смысл зарегистрироваться на ngrok.com, забрать со страницы настроек авторизации токен, и добавить его в локальный клиент с помощью команды:
Токен будет записан в файл
/.ngrok2/ngrok.yml и теперь, клиент при работе с сервисом будет авторизовываться на нём. Это позволит получить доступ к бесплатному тарифу, но с лимитами бОльшими, чем доступны не авторизованному пользователю. На платных тарифах имеются дополнительные возможности, делающие работу с сервисом удобной (резерв поддоменов, например), но в рамках данной заметки я рассматриваю только то, что пользователь может использовать без оплаты.
Проксируем на другие ПК в локальной сети. Совсем не обязательно держать веб-сервер на той же машине, где запускается Ngrok. Если сервис в локальной сети работает на отдельной машине, мы можем проксировать трафик туда:
Работаем не только с веб-сервером. На самом деле мы можем настроить удалённый доступ к любому tcp сервису, запущенному на ПК. Например, если мы хотим получить доступ по SSH, то можем сделать вот так:
При этом, от сервиса мы получим адрес вида tcp://0.tcp.ngrok.io:18211 -> localhost:22, и для доступа на ПК нам останется просто соединиться по SSH на хостнейм 0.tcp.ngrok.io и порт 18211. Любители поднимать игровые серверы могут поступать аналогично. Просто запускаете проксирование на нужный tcp порт, даёте координаты друзьям и приступаете к игре.
Заглядываем в документацию. Описанное в заметке — далеко не все возможности, так что всем заинтересовавшимся я настоятельно рекомендую заглянуть в документацию, где в очень доступной форме, с примерами команд, приведено описание всех возможностей данного сервиса и утилиты.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как без белого IP локальный веб-сервер сделать доступным из Интернета
Выполнение атак социальной инженерии требует наличие веб-сервера, на котором запущен сайт или размещена страница, которая пытается перехитрить пользователя и сделать так, чтобы он ввёл определённые данные или совершил какое-либо действие.
Это фишинговый веб-сервер должен быть доступен из Интернета, а для этого требуется публичный IP. Многие клиенты Интернет-провайдеров выходят в Интернет через NAT, а это означает, что они никак не могут сделать свой веб-сервер публичным.
- арендовать хостинг
- арендовать внешний IP у своего Интернет-провайдера
В данной статье я покажу, как с помощью программы ngrok можно обойтись без внешнего IP адреса.
Программа ngrok работает следующим образом:
- её нужно запустить на своём компьютере где установлен веб-сервер и указать порт, на который она должна перенаправлять трафик (например, 80й порт)
- ngrok связывается с облачным сервисом и генерирует вам субдомен третьего уровня
- при поступлении подключения к этому субдомену, программа перенаправляет трафик на ваш локальный компьютер, например, на ваш локальный веб-сервр
Чтобы было понятно, посмотрим как работает ngrok на конкретном примере:
У меня на компьютере с Windows установлен веб-сервер. Кстати, программа ngrok работает на Windows, Linux, Linux ARM и некоторые других операционных системах. Мой компьютер находится как минимум на одним NAT’ом — в моём роутере не настроена проброска портов на компьютер. Но, скорее всего, мой Интернет-провайдер также использует NAT, чтобы сразу большое количество пользователей могли выходить в Интернет через 1 IP адрес. В таких условиях я никак не смогу сделать свой веб-сервер публичным, даже если настрою форвардинг портов от роутера.
Так вот, в такой безвыходной ситуации и поможет ngrok. Чтобы мой веб-сервер стал доступным из Интернета, мне достаточно запустить такую команду:
На экране следующая информация:
Интересующие меня данные заключается в строках:
Она означает, что подключение к http://4b348924.ngrok.io и https://4b348924.ngrok.io (протоколы HTTP и HTTPS соответственно) будет перенаправлено на http://localhost:80. Проверим это: с другого компьютера (Linux), я открою ссылку https://4b348924.ngrok.io. Выведен список файлов в корневой директории веб сервера Windows:
Отрою файл i.php (у меня он имеет адрес https://4b348924.ngrok.io/i.php):
Как видим, файл выполнился на локальном сервере и показаны результаты его работы.
Вернёмся на компьютер Windows где запущены ngrok и веб-сервер:
После «HTTP Requests» показаны строки, которые запрашивал удалённый пользователь. Более подробную информацию можно просмотреть по ссылке http://127.0.0.1:4040 на которой запущен веб-интерфейс ngrok. Там можно анализировать отдельные запросы:
Или просматривать статус ngrok в целом:
Как установить ngrok
Установка ngrok в Kali Linux и в любой другой дистрибутив Linux
Установка в ngrok BlackArch
Установка ngrok в Windows
Перейдите на страницу официального сайта и скачайте ngrok для Windows: https://ngrok.com/download
Распакуйте скаченный архив, отройте командную строку и перейдите в папку с исполнимым файлом с помощью cd, например, у меня программа помещена в папку C:\Users\MiAl\Downloads\:
Для проверки выведите справку командой:
Как получить токен аутентификации ngrok (authtoken)
Программа ngrok является бесплатной, но предусматривает платные тарифы. Бесплатных состояний может быть два:
- без регистрации
- с регистрации
Без регистрации вы можете использовать ngrok сразу после скачивания исполнимого файла. Без регистрации вы сможете выполнить только простейшие действия, например, как приведённое выше — создать тоннель от домена третьего уровня до своего локального сервера. На самом деле, для многих этого достаточно.
С регистрацией открываются дополнительные возможности, например, можно перенаправлять трафик на 443 порт (используется протоколом HTTPS) локального или удалённого сервера.
После регистрации на странице https://dashboard.ngrok.com/auth вы найдёте свой токен аутентификации. Этот токен можно указывать при каждом запуске ngrok, но намного удобнее сохранить его в системе командой вида:
После этого токен ngrok будет сохранён в файле, и ngrok будет автоматически считывать его оттуда при каждом запуске.
Как узнать чужой IP
В качестве демонстрации применения ngrok рассмотрим пару примеров. Предположим, мне нужно узнать IP адрес пользователя, с которым я общаюсь, например, по чату или через email. Для этого мне достаточно, чтобы он зашёл на любую страницу моего веб-сервера.
На веб-сервере я делаю следующую подготовку:
1. Создаю папку hacked-accounts (допустим, предлог — ссылка в Интернете на базу данных утёкших учётных данных).
2. Создаю файл index.php с примерно следующим содержимым:
Суть работы скрипта очень проста — берутся все значения массива $_SERVER и сохраняются в файл со сгенерированным именем. Массив $_SERVER содержи HTTP заголовки и IP клиента, сделавшего запрос.
3. Дальше я просто отсылаю ссылку https://4b348924.ngrok.io/hacked-accounts/, можно добавить разные финтифлюшки в виде значений параметров https://4b348924.ngrok.io/hacked-accounts/?users=admin&sort=newest (эти «шашечки» ни на что не влияют).
При открытии этой ссылки пользователь увидит что-то вроде такого:
Но при каждой попытке открыть ссылку на веб-сервере будут создаваться новые файлы с информацией:
Пример содержимого файла:
Особый интерес представляют следующие строки:
- HTTP_USER_AGENT (User Agent, программа, с помощью который была открыта ссылка)
- HTTP_REFERER (с какой страницы пришёл пользователь)
- HTTP_ACCEPT_LANGUAGE (языки, которые предпочитает User Agent пользователя)
- HTTP_X_FORWARDED_FOR (самое важное — IP адрес здесь!)
- QUERY_STRING (строка запроса — можно указать разные значения для разных людей, чтобы различать пришедшие запросы)
Что касается REMOTE_ADDR, то значением там всегда будет примерно «::1». В REMOTE_ADDR содержится IP адрес программы, сделавшей запрос, в данном случае запрос сделала программа ngrok, которая запущена на том же самом компьютере поэтому её IP адресом является loopback.
Как отправить файл без файлообменников и почты
Предположим, нужно переслать другому пользователю файл, но при этом не использовать файлообменники, почту или аналогичные сервисы. Это можно сделать с помощью ngrok.
Теперь выдуманная ситуация следующая — мне действительно нужно быстро и без файлообменников передать пользователю другой файл. Для этого на локальном компьютере даже не нужен веб-сервер — функции простого веб-сервера будет выполнять сам ngrok.
Для выполнения задуманного, мне нужно предоставить доступ к папке hacked-accounts-real, расположенной по пути C:\Server\data\htdocs\hacked-accounts-real\, тогда достаточно запустить следующую команду:
Обратите внимание, что перед папкой стоит строка «file:///».
При открытии вновь сгенерированной ссылки будет получен доступ ко всем файлам в указанной папке:
Прокси с ngrok
ngrok может создавать туннели не только до локальных сетевых служб, но и до любых других адресов в Интернете. При этом получается прокси.
Если нужно создать туннель до веб-сайта, то если на одном IP адресе работают много сайтов, то нужно заменять присылаемый заголовок на правильный, это можно сделать опцией -host-header. В следующем примере будет создана ссылка, при переходе на которую будет открываться сайт HackWare.ru:
Команды и опции ngrok
У ngrok много других примеров использования, в том числе на бесплатном пакете. Дополнительную информацию о командах и опциях вы найдёте на странице https://kali.tools/?p=5489.
Заключение
Итак, ngrok может использоваться как замена хостингу для разовых задач. Например, если на удалённом сервере обнаружена уязвимость Удалённое выполнение кода и есть возможность запустить команду для скачивания шелла, то этот шелл нужно где-то разместить на доступном публично сервере. В качестве очень быстрого решения можно использовать ngrok + ОС, настроенная для работы через Tor.
В следующей статье будет показан более интересный пример использования ngrok в социальной инженерии.