serveo net что это

Реверс-инжиниринг протокола ngrok v2

ngrok — это сервис, позволяющий создавать туннели на локальный компьютер пользователя. Иными словами, резервируется публичный адрес, все обращения по которому пробрасываются на локальный порт.

К сожалению, с 2016 года поддержка open-source версии клиента (ngrok v1) прекращена, и чтобы воспользоваться сервисом, нужно запустить закрытую версию (ngrok v2), что во многих случаях неприемлемо. Данная статья описывает процесс изучения протокола, используемого официальным клиентом, и создания альтернативного открытого клиента.

А нужно ли оно? Альтернативы ngrok

Как ни странно, у данного сервиса очень мало альтернатив. Конкретно, три:

serveo.net. Предоставляет аналогичный функционал, но использует SSH reverse port forwarding, а не кастомный клиент. К сожалению, в настоящее время проект закрыт.

Serveo is temporarily disabled due to phishing.

Serveo will return in a few days with a few new restrictions to help dissuade abuse. Thanks for your patience!

(P.S. В комментариях подсказали, что существует localhost.run, который предоставляет HTTP-туннели через SSH port forwarding, аналогично serveo.net. Однако, судя по всему, сервис предоставляет только HTTP-туннели, в отличие от ngrok)

Naive attempt #1: mitmproxy

Попробуем прослушать трафик официального приложения с помощью mitmproxy:

Приложение, естественно, начинает ругаться на невалидный сертификат. Однако в тексте ошибки видно, что ngrok пытается отрезолвить адрес сервера tunnel.us.ngrok.com через DNS-over-HTTPS:

Попробуем дернуть сам tunnel.us.ngrok.com:

Видимо, клиент использует certificate pinning с самоподписанным сертификатом. Попробуем игнорировать ошибку:

Google по запросу «illegal WNDINC frame length» выдает библиотеку для Go для мультиплексирования TCP-соединений. Эта же библиотека упоминается в issue с призывом открыть исходники ngrok v2.

Библиотека muxado

Проверим, действительно ли ngrok использует библиотеку muxado:

Из вывода этой команды можно сделать несколько выводов (простите за тавтологию):

Также заметим, что ошибка от сервера была получена по защищенному (TLS) соединению, что означает, что протокол muxado используется внутри TLS-сессии. Это позволяет предположить, что поверх muxado данные передаются открытым текстом, так как дополнительное шифрование было бы избыточным. Таким образом, чтобы снять незашифрованный дамп траффика, достаточно перехватить вызовы (*stream).Read и (*stream).Write.

Прежде чем пытаться перехватывать вызовы, нужно понять, как передаются интересующие нас параметры. Для этого напишем простую программу на Go, использующую библиотеку (в качестве принимающей стороны будет выступать netcat):

Итак, для перехвата траффика нас интересуют:

В выводе objdump на функции github.com/inconshreveable/muxado.(*stream).Write (Забавно, что разработчики Go, похоже, не заморачивались с name mangling.) отчетливо видна загрузка аргументов со стека:

Осталось понять, где именно на стеке лежат нужные нам значения. Для этого воспользуемся gdb и выведем состояние стека на момент вызова функции.

Первый элемент данного массива — адрес возврата, и в передаче аргументов он принимать участие не может. Два последних, очевидно, представляют из себя адрес массива и его длину; так как указатель на поток идет в списке аргументов первым, логично предположить, что именно он находится во второй ячейке. Его можно (с оговорками) использовать в качестве уникального идентификатора потока.

Итак, теперь мы знаем, как расположены в памяти аргументы функции (*stream).Write (для (*stream).Read всё точно так же, так как у функций одинаковый прототип). Осталось реализовать сам перехват.

Naive attempt #2: runtime function hooks

Попробуем перенаправить вызовы (*stream).Write в функцию-прокси:

При попытке вызвать ngrok с данным хуком получаем краш следующего вида:

Тут нас ждет неожиданное препятствие в лице goroutines. Дело в том, что стек под горутины выделяется динамически: при недостатке места в существующем стеке он выделяется заново в другом месте, и текущее содержимое копируется. К сожалению, функции, генерируемые gcc, сохраняют старый указатель стека в регистре rbp (т.н. frame pointer), и при возврате из такой функции указатель стека начинает указывать на уже освобожденный старый стек (use-after-free). Таким образом, C тут не помощник.

Attempt #3: gdb script

Напишем скрипт для gdb, который будет распечатывать все передаваемые данные:

Это работает, но для полноценного дампа нужно сохранять и принимаемые данные. И тут возникает несколько проблем:

Attempt #4: assembly

Первая инструкция обоих функций занимает 9 байт, так что первые 5 байт инструкции можно заменить на инструкцию перехода:

Для вызова оригинальной функции достаточно выполнить исходную инструкцию и перейти по адресу func+9

С инструкцией ret в функции (*stream).Read все куда интереснее:

Инструкция ret (записана как retq, в противовес retf) занимает всего 1 байт, при этом следующая за ней инструкция является jump target’ом, поэтому изменять ее нельзя. Однако на саму инструкцию ret переход нигде не производится, поэтому ничто не мешает заменить ее на переход вместе с предыдущей инструкцией (после перехода, естественно, ее придется выполнить).

Таким образом, теперь у нас есть работающий инструмент для снятия дампов траффика с ngrok. Проверим его в действии!

Из этого дампа прекрасно видно внутреннее устройство протокола:

Заключение

Так как muxado — open-source библиотека, протокол мультиплексирования можно изучить по исходникам. Приводить его здесь не имеет смысла.

Результатом работы стали библиотека на Python для работы с протоколом ngrok, и альтернативный консольный клиент, использующий данную библиотеку. GitHub

Источник

Top 4 BEST Ngrok Alternatives In 2021: Review And Comparison

A Comprehensive Review And Comparison of Popular Ngrok Alternatives With Features, Installation, Usage and Pricing To Help You Select The Best Tool:

In this tutorial, we will explore the most popular Ngork competitors that are available in the market.

This is an in-depth comparison of the various tools similar to Ngork along with their features, installation, pricing, etc.

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

What You Will Learn:

Top Ngrok Alternatives To Know In 2021

Enlisted below are the most popular Ngork Competitors that are available in the market.

Comparison Of Ngrok And Its Alternatives

ParameterConfiguration FilesMultiple TunnelsDocumentationPlatform
NgrokSupports yaml based configuration files which could also be used to define and execute tunnels.Ngrok supports running multiple tunnels through the config files.Well maintained documentation.Supports all platforms.
LocaltunnelConfig file support is not available.No support is available for running multiple tunnels.No maintained documentation.Supports all platforms.
ServeoConfig file support not available.3 simultaneous tunnels can be created for the free version.Well maintained documentation.Supports all platforms.
TeleconsoleNot applicableNot applicableWell maintained documentation.Currently supports Unix based and MacOS only.
PagekiteNot applicableNot applicableWell maintained documentation.Supports all the platforms as it is a python script that can be executed on almost all the platforms.

Let’s Explore!!

#1) Localtunnel

Localtunnel is a free tunneling solution, to host your local web applications over the cloud and access the app from the publicly accessible web url.

Installation & Usage

Installation is simple as it’s a node package that could be installed globally or locally.

Once the installation is complete, you can simply create a tunnel as shown below, for any port that will forward the request to the locally hosted and running application.

The above command will issue a web url as below and forward all the requests to that url to your locally hosted application.

The above url can be simply accessed to view the locally hosted app on port 3000 (i.e. the port for which the tunnel was actually created).

Specifying a subdomain for your tunnel is also possible, through the subdomain flag. This will allow you to have a custom sub-domain which will be easy to remember.

You will get the url for your subdomain as shown below (subject to the availability).

Documentation: Localtunnel

Website: Localtunnel

#2) Serveo

Serveo is another easy to use alternative to Ngrok. It allows you to create local tunnels without installing any other third-party software.

It’s an SSH server that allows port forwarding for the locally hosted application.

Suggested reading =>> Port Forwarding Tutorial

Installation & Usage

As opposed to the other tools like Localtunnel and Ngrok, you don’t need to install Serveo separately. You can simply use it through the command line.

For Example: For exposing a locally running application on port 3000, you can make it web-accessible using the following command.

The above statement tells serveo.net domain to create a remote tunnel at port 80 on serveo.net and forward all the requests to the local port 3000.

Once the tunnel gets created, it displays the tunnel name, using which the locally hosted applications can be accessed.

It also allows you to see all the requests/responses going through this tunnel, by viewing a command line log display (by pressing ‘g’ key as mentioned above).

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Documentation: Serveo

Website: Serveo

#3) Teleconsole

Unlike HTTP / HTTPS, Teleconsole allows you to share your terminal session over the web by creating a unique session id.

It has to be used with caution and should be shared with someone extremely trustworthy, as it’s as good as giving full access to your terminal.

Let’s see how it works:

Teleconsole server is an SSH proxy, which generates a unique session ID for the requesting clients who want to share the terminal over the remote.

The clients who want to join the remote session need to use the generated session ID in order to access the shared terminal remotely.

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Installation and Usage

Download the binaries for the respective platform from this location. Please note, that currently, it is available only for Unix, Linux, and macOS Platforms.

Once the binary is installed, it can be used as a simple shell script to execute.

Let’s see the below steps:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Once the session ID / Teleconsole ID is obtained, you can use the exposed web UI to access the terminal. The above screenshot shows a webUI for the created session. A remote client can simply use this URL to access the remote SSH session.

Let’s see how the session will look to the remote user.

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

In order to exit/disconnect the session, simply type “exit command” on the remote or local session and the session will get disconnected.

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Documentation: Teleconsole

Website: Teleconsole

#4) Pagekite

Pagekite is another tool that is similar to Ngrok and supports HTTP / HTTPS / TCP and SSH tunnels.

The advantage of using pagekite over Ngrok is its stable domain names which are fixed during the account setup itself. But, this also has a disadvantage, one can not start multiple tunnels simultaneously unlike Ngrok.

Installation and Usage

It’s typically simple to use. A simple curl to get python-based executable is a one time process.

Let’s see the steps below:

#1) get the python-based executable using curl.

#2) setup the pagekite account while starting the tunnel.

#3) While the above command gets executed, it will prompt to register the given domain name against an email id that the user needs to provide. Once an available domain name is found and registration is successful, the domain name is setup.

Once the domain name setup is successful, the same domain name can be used for setting up the tunnel.

For Example : If the domain name setup is foodomain, then you can start a tunnel to the localhost port 3000 using the command below:

Documentation: Pagekite

Website: Pagekite

Conclusion

In this tutorial, we looked at the most popular Ngrok alternatives and explored a few other tools like Localtunnel, Serveo, Pagekite, and Teleconsole that can perform the same or similar functionality.

We also compared all the tools against various parameters. You can select the best tool for your requirements based on this comparison and review. In general, Ngrok is more widely used compared to other tools.

Источник

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Как без белого IP локальный веб-сервер сделать доступным из Интернета

Выполнение атак социальной инженерии требует наличие веб-сервера, на котором запущен сайт или размещена страница, которая пытается перехитрить пользователя и сделать так, чтобы он ввёл определённые данные или совершил какое-либо действие.

Это фишинговый веб-сервер должен быть доступен из Интернета, а для этого требуется публичный IP. Многие клиенты Интернет-провайдеров выходят в Интернет через NAT, а это означает, что они никак не могут сделать свой веб-сервер публичным.

В данной статье я покажу, как с помощью программы ngrok можно обойтись без внешнего IP адреса.

Программа ngrok работает следующим образом:

Чтобы было понятно, посмотрим как работает ngrok на конкретном примере:

У меня на компьютере с Windows установлен веб-сервер. Кстати, программа ngrok работает на Windows, Linux, Linux ARM и некоторые других операционных системах. Мой компьютер находится как минимум на одним NAT’ом — в моём роутере не настроена проброска портов на компьютер. Но, скорее всего, мой Интернет-провайдер также использует NAT, чтобы сразу большое количество пользователей могли выходить в Интернет через 1 IP адрес. В таких условиях я никак не смогу сделать свой веб-сервер публичным, даже если настрою форвардинг портов от роутера.

Так вот, в такой безвыходной ситуации и поможет ngrok. Чтобы мой веб-сервер стал доступным из Интернета, мне достаточно запустить такую команду:

На экране следующая информация:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Интересующие меня данные заключается в строках:

Она означает, что подключение к http://4b348924.ngrok.io и https://4b348924.ngrok.io (протоколы HTTP и HTTPS соответственно) будет перенаправлено на http://localhost:80. Проверим это: с другого компьютера (Linux), я открою ссылку https://4b348924.ngrok.io. Выведен список файлов в корневой директории веб сервера Windows:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Отрою файл i.php (у меня он имеет адрес https://4b348924.ngrok.io/i.php):

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Как видим, файл выполнился на локальном сервере и показаны результаты его работы.

Вернёмся на компьютер Windows где запущены ngrok и веб-сервер:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

После «HTTP Requests» показаны строки, которые запрашивал удалённый пользователь. Более подробную информацию можно просмотреть по ссылке http://127.0.0.1:4040 на которой запущен веб-интерфейс ngrok. Там можно анализировать отдельные запросы:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Или просматривать статус ngrok в целом:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Как установить 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 (эти «шашечки» ни на что не влияют).

При открытии этой ссылки пользователь увидит что-то вроде такого:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Но при каждой попытке открыть ссылку на веб-сервере будут создаваться новые файлы с информацией:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Пример содержимого файла:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Особый интерес представляют следующие строки:

Что касается REMOTE_ADDR, то значением там всегда будет примерно «::1». В REMOTE_ADDR содержится IP адрес программы, сделавшей запрос, в данном случае запрос сделала программа ngrok, которая запущена на том же самом компьютере поэтому её IP адресом является loopback.

Как отправить файл без файлообменников и почты

Предположим, нужно переслать другому пользователю файл, но при этом не использовать файлообменники, почту или аналогичные сервисы. Это можно сделать с помощью ngrok.

Теперь выдуманная ситуация следующая — мне действительно нужно быстро и без файлообменников передать пользователю другой файл. Для этого на локальном компьютере даже не нужен веб-сервер — функции простого веб-сервера будет выполнять сам ngrok.

Для выполнения задуманного, мне нужно предоставить доступ к папке hacked-accounts-real, расположенной по пути C:\Server\data\htdocs\hacked-accounts-real\, тогда достаточно запустить следующую команду:

Обратите внимание, что перед папкой стоит строка «file:///».

При открытии вновь сгенерированной ссылки будет получен доступ ко всем файлам в указанной папке:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Прокси с ngrok

ngrok может создавать туннели не только до локальных сетевых служб, но и до любых других адресов в Интернете. При этом получается прокси.

Если нужно создать туннель до веб-сайта, то если на одном IP адресе работают много сайтов, то нужно заменять присылаемый заголовок на правильный, это можно сделать опцией -host-header. В следующем примере будет создана ссылка, при переходе на которую будет открываться сайт HackWare.ru:

serveo net что это. Смотреть фото serveo net что это. Смотреть картинку serveo net что это. Картинка про serveo net что это. Фото serveo net что это

Команды и опции ngrok

У ngrok много других примеров использования, в том числе на бесплатном пакете. Дополнительную информацию о командах и опциях вы найдёте на странице https://kali.tools/?p=5489.

Заключение

Итак, ngrok может использоваться как замена хостингу для разовых задач. Например, если на удалённом сервере обнаружена уязвимость Удалённое выполнение кода и есть возможность запустить команду для скачивания шелла, то этот шелл нужно где-то разместить на доступном публично сервере. В качестве очень быстрого решения можно использовать ngrok + ОС, настроенная для работы через Tor.

В следующей статье будет показан более интересный пример использования ngrok в социальной инженерии.

Источник

Serveo

Используйте SSH для предоставления локальных серверов через Интернет, а также для проверки и воспроизведения трафика HTTP.

Когда вы устанавливаете SSH-соединение с serveo.net, субдомен будет назначен для пересылки трафика HTTP (и HTTPS) на ваш локальный сервер.

Основное использование выглядит так:

Несколько портов могут быть запрошены одновременно:

Целевой сервер не обязательно должен быть на локальном хосте:

Субдомен выбирается детерминистически на основе вашего IP-адреса, предоставленного имени пользователя SSH и доступности субдомена, поэтому вы часто получаете один и тот же субдомен между перезапусками. Вы также можете запросить определенный поддомен (из списка установок):

Измените имя пользователя SSH, чтобы получить другой поддомен:

Могут быть запрошены порты, отличные от 80, и необработанный трафик TCP будет перенаправлен. (В этом случае нет способа маршрутизировать соединения на основе имени хоста, и хост, если он указан, будет игнорироваться.)

SSH-R 1492: локальный хост: 1492 serveo.net

Если порт 0 запрошен, случайный порт TCP будет перенаправлен:

Нажатие g запустит сеанс графического интерфейса. Используйте клавиши со стрелками вверх и вниз для проверки запросов / ответов, а клавиши со стрелками влево и вправо для переключения между представлениями запросов и ответов. Используйте j, k, u, d, p и n для прокрутки нижней панели инспектора. Нажмите r, чтобы повторить выбранный запрос. Нажмите ч или? в любое время за помощью.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *