Автор: Саманта Чалкер

WSSiP — это инструмент для просмотра, взаимодействия и управления сообщениями WebSocket между браузером и веб-сервером.

WebSockets сами по себе являются более новым вариантом клиентского кода JavaScript, который позволяет браузерам подключаться к веб-серверу, чтобы обозначить, что соединение должно быть TCP-соединением. Согласно определению IETF RFC 6455, целью WebSockets является предоставление механизма для браузерных приложений, которым требуется двусторонняя связь с серверами, которая не зависит от открытия нескольких HTTP-соединений (например, с использованием XMLHttpRequest или ‹iframe›). s и длинный опрос). Окончательный вариант спецификации был опубликован в декабре 2011 года. Данные отправляются в виде сообщений, которые можно отправлять либо в виде обычного текста ASCII, либо в необработанном двоичном формате.

Все современные браузеры имеют полную поддержку WebSockets. Поскольку ожидается, что в ближайшем будущем использование WebSocket станет более распространенным, необходимы более совершенные инструменты для тестирования. Инструмент, который может помочь в отладке и фаззинге, не полагаясь на сложные и трудоемкие методы, был бы особенно полезен. Например, Burp Suite отображает только историю всех сообщений WebSocket в одной вкладке и может перехватывать сообщения, но нельзя отправлять свои. Другие перехватывающие прокси либо немного сложны в использовании, только начинают реализовывать эту функцию, либо вообще не реализуют отладку WebSocket. Некоторым консультантам NCC Group приходилось вручную возиться с инструментами разработчика браузера, чтобы отправлять сообщения и тестировать, что делало тестирование программного обеспечения клиентов более трудоемким.

WSSiP призван решить эту проблему. Этот инструмент дополняет другие перехватывающие прокси-серверы, предоставляя пользовательский интерфейс для захвата, перехвата и отправки сообщений и просмотра всех взаимодействий между клиентом и сервером. Он включает в себя поддержку прокси-сервера восходящего потока, что позволяет ему быть частью цепочки с несколькими прокси-серверами между браузером и веб-сервером, концентрируясь на веб-сокетах, оставляя более типичный перехват HTTP для других инструментов, таких как Burp Suite или Pappy Proxy.

WSSiP запрограммирован и работает на Node.js 7.0+. Он использует Electron для интерфейса приложения и React & Material UI для пользовательского интерфейса внутри приложения.

Установка

WSSiP можно запустить одним из трех способов. Первый — загрузить и запустить предварительно скомпилированный двоичный файл для Windows, Mac OS X или Linux. Их можно найти на странице GitHub Release.

Второй — установить через npm:

npm install -g wssip

Установка WSSiP через npm позволяет запустить команду wssip в командной строке, чтобы открыть приложение.

Третий — загрузить исходный код с GitHub и следовать инструкциям в README.

Пример

В качестве примера того, как работает WSSiP, мы будем использовать пример чата из Socket.io. Сначала запускаем WSSiP:

Затем, используя Autochrome, мы переходим к http://localhost:3000, где размещен пример чата Socket.io, и вводим имя Person1:

Оглядываясь назад на WSSiP, к которому подключается Autochrome, новое подключение добавляется на вкладку Активные подключения:

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

Теперь давайте откроем ванильный экземпляр Chrome и пример чата Socket.io, размещенный на локальном хосте: 3000, тот же самый, который использует Person1, и введите «Person2» в качестве имени.

Вернемся к нашему экземпляру Autochrome; некоторые тестовые данные:

Поскольку мы хотим взаимодействовать с тестовым чатом из нашего клиента, мы будем имитировать данные «отправить сообщение в комнату», которые Socket.io отправлял на сервер:

Хотя сообщение «ПРИВЕТ ОТ WSSIP» не совсем появляется в нашем экземпляре Autochrome, пользователь ванильного Chrome сразу увидит:

Наконец, когда мы закрываем наше соединение Autochrome и, следовательно, соединение WebSocket, закрывается ли оно? Соединение WebSocket просто перемещается на вкладку «Неактивные соединения», где мы по-прежнему можем просматривать историю сообщений:

Вывод

WSSiP представляет собой отличный инструмент для отладки и фаззинга соединений WebSocket. Поскольку этот инструмент используется в большем количестве оценок, могут возникнуть неожиданные ошибки, возникающие при использовании WSSiP, и я рекомендую вам отправить отчет об ошибке в разделе Проблемы в репозиторий WSSiP GitHub. Кроме того, такие функции, как сохранение и загрузка из файла для существующих подключений и истории их сообщений, все еще находятся в стадии разработки и появятся в будущей версии.

Для получения дополнительной информации о спецификации WebSocket RFC см. RFC 6455.

Первоначально опубликовано на www.nccgroup.trust.