Содержание
- [!] Ngrok error, debug: ./ngrok http 3333 🙁 about saycheese HOT 8 OPEN
- Comments (8)
- ____ ____ _
- Ошибки ngrok «502 плохой шлюз»
- Реверс-инжиниринг протокола ngrok v2
- А нужно ли оно? Альтернативы ngrok
- Serveo is temporarily disabled due to phishing.
- Naive attempt #1: mitmproxy
- Библиотека muxado
- Naive attempt #2: runtime function hooks
- Attempt #3: gdb script
- Attempt #4: assembly
- Заключение
- Noway to start the -config file #235
- Comments
- /usr/local/bin/ngrok -config=»/root/.ngrok2/ngrok.yml»
- /usr/local/bin/ngrok -config=/root/.ngrok2/ngrok.yml
- /usr/local/bin/ngrok -config /root/.ngrok2/ngrok.yml
- Using ngrok to get a public HTTPS address for a local server already serving HTTPS (for free)
[!] Ngrok error, debug: ./ngrok http 3333 🙁 about saycheese HOT 8 OPEN
There are 4 version of ngrok for different devices.
Visit there website and get that suitable for your device.
I will also post a video on this topic.
https://youtu.be/tSiqja49Hc0
noredlac commented on January 15, 2023
Im testing in KaliLinux, should be work? Or its just compatible with termux?
noredlac commented on January 15, 2023
Let me share more data.
I already donwload the github data, i already install Ngrock, eve is working fine, but when i execude the bas i receive this:
[+] Choose a port forwarder: 2
[+] Starting php server. (localhost:3333).
[+] Starting ngrok. (http 3333).
[!] Ngrok error, debug: ./ngrok http 3333
Citarosoftwarerepairs commented on January 15, 2023
I also have this problem
Citarosoftwarerepairs commented on January 15, 2023
____ ____ _
[::] v1.2 coded by @linux_choice [::]
[::] v1.2 Moded by Youtube.com/TechnicalHeadquarter [::]
[::] github.com/thelinuxchoice/saycheese(Repository Deleted) [::]
[01] Mirror website
[02] Custom template(.html file)
[+] Choose an option: 1
[+] Website (default: https://snapcamera.snapchat.com):
[+] Mirroring website with HTTrack.
[+] Starting php server(Turn On Hotspot if on termux) (localhost:3333).
[+] Starting ngrok server(Hotspot must be started) (http 3333).
[!] Ngrok error, debug: ./ngrok http 3333
noredlac commented on January 15, 2023
@angelluis24 Angelluis24 can you test again, i still have the same issue with your repository
ezaejaejot commented on January 15, 2023
adakah yg bisa membantu saya
Thorappankochunni22 commented on January 15, 2023
Источник
Ошибки ngrok «502 плохой шлюз»
Совершенно новичок в использовании любого типа веб-приложений, и я пытался медленно создать бота для обмена сообщениями Facebook. Когда я пытаюсь использовать ngrok, я не могу посетить указанный мне адрес, то есть:
это то, что я вставляю в командную строку, и она возвращает это:
Но когда я беру адрес https://ea986ca5.ngrok.io , как того требует страница разработчика Facebook, он говорит:
Это проблема с моим локальным портом? Спасибо!
Это сработало для меня
ngrok.exe http -host-header = перезаписать localhost:
например, ngrok.exe http -host-header = перезаписать localhost: 5219
Я использую Visual Studio 2017, не знаю, влияет ли это на жизнь.
Попробуйте явно указать IP-адрес localhost:
ngrok http 127.0.0.1:5000 вместо того ngrok http 5000
Как должен был сказать @ njzk2, если у вас нет запущенного веб-сервера, он не может работать. Хотелось бы вам пояснить, если вы все еще запутались.
Что делает ngrok , так это сделать ваш локальный сервер (работающий на localhost) доступным для внешнего мира (остальной части Интернета). Сам по себе это не веб-сервер. Итак, для разработки вашего бота вам необходимо иметь веб-сервер, работающий на определенном порту (в вашем случае это 5000). Затем вы можете указать ngrok на этот порт, чтобы он перенаправлял запросы, отправленные на ваш общедоступный адрес, в программу, работающую на этом порту. Затем веб-сервер будет принимать и обрабатывать запросы от Facebook.
Источник
Реверс-инжиниринг протокола 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:
Из вывода этой команды можно сделать несколько выводов (простите за тавтологию):
- ngrok действительно использует данную библиотеку.
- Автор не пытался как-либо обфусцировать исполняемый файл, так как в нем оставлены символы.
Также заметим, что ошибка от сервера была получена по защищенному (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, который будет распечатывать все передаваемые данные:
Это работает, но для полноценного дампа нужно сохранять и принимаемые данные. И тут возникает несколько проблем:
- Чтобы прочитать принятые данные, нужно дождаться, пока функция завершит выполнение. Эта проблема решается установкой breakpoint’а на инструкцию ret.
- Функция может считать меньше данных, чем планировалось, при этом количество реально считанных байт — одно из возвращаемых значений функции. Нужно понять, как передаются возвращаемые значения. (Также тривиально, достаточно распечатать стек после выполнения функции. Нужное число лежит по адресу $rsp+48).
- Третья, и самая главная проблема. Вывод gdb не предназначен для автоматического парсинга (в качестве примера см. распечатку из раздела ABI), поэтому полученные таким образом дампы пригодны только для визуального анализа. (На самом деле это не проблема, так как протокол крайне прост и распознается с первого взгляда).
Attempt #4: assembly
Открыв бинарник ngrok objdump’ом, можно заметить, что между секциями .text и .rodata присутствует зазор в 0xc10=3088 байт:
Этот же зазор присутствует и в самом файле, там пустое пространство заполнено нулевыми байтами. Это позволяет изменить записанный в файле размер сегмента, содержащего секцию .text (поиск/замена в hex-редакторе), и добавить в пустое пространство код для логгирования вызовов.
Инструкция относительного перехода на архитектуре x86_64 занимает 5 байт: опкод (E9) + смещение до конечного адреса (signed int). Так как размер исполняемого файла ngrok сильно меньше 2 гигабайт, эта инструкция позволяет передать управление в любую точку секции .text, в том числе в наш новый код.
Первая инструкция обоих функций занимает 9 байт, так что первые 5 байт инструкции можно заменить на инструкцию перехода:
Для вызова оригинальной функции достаточно выполнить исходную инструкцию и перейти по адресу func+9
С инструкцией ret в функции (*stream).Read все куда интереснее:
Инструкция ret (записана как retq, в противовес retf) занимает всего 1 байт, при этом следующая за ней инструкция является jump target’ом, поэтому изменять ее нельзя. Однако на саму инструкцию ret переход нигде не производится, поэтому ничто не мешает заменить ее на переход вместе с предыдущей инструкцией (после перехода, естественно, ее придется выполнить).
Таким образом, теперь у нас есть работающий инструмент для снятия дампов траффика с ngrok. Проверим его в действии!
Из этого дампа прекрасно видно внутреннее устройство протокола:
- Очевидно, что потоки авторизации и создания туннеля инициируются клиентом, а потоки с собственно подключениями — сервером. Этого нет в логах, но это очевидно по соображениям здравого смысла.
- В начале каждого потока передается 32-битное число — тип потока. Это 0 для авторизации, 1 для создания туннеля и 3 для входящих соединений.
- Поток с типом -1 — heartbeat. Инициатор соединения периодически отправляет туда случайные 4 байта и ожидает получить их же на выходе. Таких потока создается 2 в обоих направлениях.
- При получении входящего соединения передается 32-битный тип 3, 64-битное число L (little-endian) и JSON-объект длины L байт, описывающий соединение. После этого по соединению передаются сырые данные без каких-либо служебных пакетов.
Заключение
Так как muxado — open-source библиотека, протокол мультиплексирования можно изучить по исходникам. Приводить его здесь не имеет смысла.
Результатом работы стали библиотека на Python для работы с протоколом ngrok, и альтернативный консольный клиент, использующий данную библиотеку. GitHub
Источник
Noway to start the -config file #235
Hi all, I’m trying to start ngrok with the config parameter, but there is no way to make it work 🙁
/usr/local/bin/ngrok -config=»/root/.ngrok2/ngrok.yml»
/usr/local/bin/ngrok -config=/root/.ngrok2/ngrok.yml
/usr/local/bin/ngrok -config /root/.ngrok2/ngrok.yml
I always get response
Incorrect Usage: flag provided but not defined: -config
What I do wrong?
VERSION: 2.0.17 precompiled for linux-arm systems
The text was updated successfully, but these errors were encountered:
You need to provide a command (‘http’, ‘tcp’, ‘tls’, . ) before the config flag like so:
if I try do it, it does not read the config file. 🙁
but if I run the «services —all» everything is ok..
The log output will show where ngrok tries to read the configuration file and any errors it encounters. It’s possible your configuration file is malformed or that the command you’re trying to invoke with it is improper. Please email me if you have further questions, these issues should be only for the ngrok code that is open source.
i want to start multiple tunnels using ngrok .. i edit the yml file with this lines:-
tunnels:
first-app:
addr: 80
proto: http
second-app:
addr: 3000
proto: http
but when i run command «ngrok start —all» it says » Error reading configuration file ‘/root/.ngrok2/ngrok.yml’: config contains tab characters, YAML must use spaces for indentation
»
what could i do to fix this. thanx
.
ohhh i fix it using command » ./ngrok start -all »
after adding the prev lines into the yml file
i want to start multiple tunnels using ngrok .. i edit the yml file with this lines:-
tunnels:
first-app:
addr: 80
proto: http
second-app:
addr: 3000
proto: http
but when i run command «ngrok start —all» it says » Error reading configuration file ‘/root/.ngrok2/ngrok.yml’: config contains tab characters, YAML must use spaces for indentation
»
what could i do to fix this. thanx
.
ohhh i fix it using command » ./ngrok start -all »
after adding the prev lines into the yml file
can you please post your yaml file here?
tunnels:
First-app:
addr: 80
proto: http
Second-app:
addr: 3000
proto: http
you need the spaces, they are the main part
hey , guys you can do that from this way . i tryed that and it is working for me .
tunnels:
first-app:
addr: 80
proto: http
second-app:
addr: 3000
proto: http
guys when i put my script here . it bad shows here . come my pv @Clay1401
Источник
Using ngrok to get a public HTTPS address for a local server already serving HTTPS (for free)
The scenario here is that you’ve got a local web server already serving up a web application over https. You want to be able to access the web application from another machine/device hence you are using ngrok to provide a public URL. By default ngrok assumes that your local web server is just serving http and goes ahead and provides you with a public URL that supports both http and https tunneling through to your local web server. This is really cool, but what happens when you are already serving up https? The https URL that ngrok provides doesn’t work 🙁.
I’m happy to say that the free offering of ngrok now has this capability and it’s super simple to get working!
Let’s say I have a local web server running on port 4200 and it’s already setup with SSL certificate (and so only works when accessing via a https URL).
Instead of starting ngrok with the default command line of:
Use this command line instead:
If your local web server is picky about host headers, then you can also map this through by starting ngrok with this command line:
If you encounter the following error it may be because your version of ngrok is too old and doesn’t support this recent capability. Simply go grab the latest version and try again.
Источник
-
Перейти на CTF площадку Игры Кодебай
Выполняйте задания по кибербезопасности в формате CTF и получайте бесценный опыт. Ознакомиться с подробным описанием можно тут.
-
B правой части каждого сообщения есть стрелки ⇧ и ⇩. Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок ✔ в правой части сообщения.
-
#1
Здравствуйте!
Открыла локальный сервер на 127.0.0.1:4444 и раздала его через ngrok(./ngrok http 127.0.0.1:4444)
При переходе по cсылке или по адресу 192.168.0.109:4444, пишет Tunnel [много цыфр и букв].ngrok.io not found, а если перейти по адресу 127.0.0.1:4444(или localhost:4444, что по сути тоже самое), всё работает отлично
-
#2
А
Здравствуйте!
Открыла локальный сервер на 127.0.0.1:4444 и раздала его через ngrok(./ngrok http 127.0.0.1:4444)
При переходе по cсылке или по адресу 192.168.0.109:4444, пишет Tunnel [много цыфр и букв].ngrok.io not found, а если перейти по адресу 127.0.0.1:4444(или localhost:4444, что по сути тоже самое), всё работает отлично
На роутере порты открыты?
-
#3
На роутере порты открыты?
Для ngrok? Зачем?
-
#4
А
На роутере порты открыты?
Зачем открывать порты для ngrok?
-
#5
Ну если у него работает только под локалхостом, а под тем же айпи что присваевает роутер нет ?
-
#6
Ну если у него работает только под локалхостом, а под тем же айпи что присваевает роутер нет ?
Если служба слушает только 127.0.0.1 (localhost), то по другому интерфейсу ты к ней не подключишься.
-
#7
Здравствуйте, у меня не работает ngrok при вводе токена пишет bad address. Ошибки в токене не может быть, ибо копировал с офф сайта. подскажите, как решить данную проблему?
-
#8
Здравствуйте, у меня не работает ngrok при вводе токена пишет bad address. Ошибки в токене не может быть, ибо копировал с офф сайта. подскажите, как решить данную проблему?
Можете скинуть команду, которую вводите без токена?
-
#10
Убедитесь, что ngrok в директории в которой вы запускаете команду.
Можете зайти в эту директорию -> ПКМ -> Открыть терминал и ввести:
./ngrok authtoken [Ваш токен]
Или можете закинуть ngrok в домашний каталог и выполнить в терминале:
cd
./ngrok authtoken [Ваш токен]
Хочу подчеркнуть, что делать это нужно от обычного пользователя, а не от Root
I want to debug our remote event receiver for a sharepoint online site collection. and since the azure service bus appraoch for debugging RER is not supported anymore. so i am trying to use the ngrok appraoch. I did these steps:-
1- Inside Visual Studio 2015 >> create new sharepoint add-in >> type provider-hosted Add-in >> I enter the url for a test enterprise wiki site collection which have the Sideloading of apps feature enabled.
2- Then i enabled the handle Add-in installed/uninstalled:-
3- Then inside the AppEventReceiver.svc i entered code this code + the methods implementation:-
public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties) { SPRemoteEventResult result = new SPRemoteEventResult(); switch (properties.EventType) { case SPRemoteEventType.AppInstalled: HandleAppInstalled(properties); break; case SPRemoteEventType.AppUninstalling: HandleAppUninstalling(properties); break; case SPRemoteEventType.ItemAdded: HandleItemAdded(properties); break; } return result; } // code goes here for the above methods implementation ..
For debugging the RER, I did these steps:-
1- I run this ngrok command:-
ngrok http --host-header=rewrite 54001// where this port is our RER port inside visual studio
2- Update the Update web.config, with the url i got from the above command:-
3- Set the web application as Start Up project.
4- Navigate to the ngrok url where i got this page:-
5- Register the app and update the web.config with the generated ClientId + ClientSecret
6- After that i run the Visual Studio project >> i got this message to trust the app:-
7- Where the app start showing inside the site content page with a message that it is been added…
8- After that my code reached this break point:-
9- But inside the TokenHelper.cs , I got this exception**:-
An exception of type 'Microsoft.IdentityModel.Tokens.AudienceUriValidationFailedException'occurred in ****Web.dll but was not handled in user code Additional information: "localhost" is not the intended audience "f15f8358-54c4-4767-95b2-98051ed0b1c5/00af9b86.ngrok.io@8208ba41-935e-4b54-ace7-
on this code:-
so can anyone advice on this please?