Что нового

Article [12] Burp Suite. WebSockets

Vander 0

Vander

Команда форума
10.11.2019
495
1 158
Приветствую уважаемую аудиторию форума Protey!

1593345153822.png

В этом разделе мы объясним, как управлять сообщениями и соединениями WebSocket, опишем виды уязвимостей, которые могут возникнуть в результате работы WebSockets, а также приведем несколько примеров использования WebSocket уязвимостей.

Что такое WebSocket?

WebSocket — протокол связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и веб-сервером в режиме реального времени.

В настоящее время в W3C осуществляется стандартизация API Web Sockets. Черновой вариант стандарта этого протокола утверждён IETF.

WebSocket разработан для воплощения в веб-браузерах и веб-серверах, но он может быть использован для любого клиентского или серверного приложения. Протокол WebSocket — это независимый протокол, основанный на протоколе TCP. Он делает возможным более тесное взаимодействие между браузером и веб-сайтом, способствуя распространению интерактивного содержимого и созданию приложений реального времени.

1593345271784.png

WebSockets широко используются в современных веб-приложениях. Они инициируются через HTTP и обеспечивают долговременные соединения с асинхронной связью в обоих направлениях.

WebSockets используются для самых разных целей, включая выполнение действий пользователя и передачу конфиденциальной информации. Практически любая уязвимость веб-безопасности, возникающая при обычном HTTP, также может возникать в связи с коммуникациями WebSockets.

Web sockets infographic.png

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

Далее мы объясним разницу между HTTP и WebSocket, опишем, как устанавливаются соединения WebSocket, и обрисуем, как выглядят сообщения WebSocket.

В чем разница между HTTP и WebSockets?

Большая часть связи между веб-браузерами и веб-сайтами использует HTTP. С помощью HTTP клиент отправляет запрос, а сервер возвращает ответ. Как правило, ответ происходит немедленно, и транзакция завершена. Даже если сетевое соединение остается открытым, оно будет использоваться для отдельной транзакции запроса и ответа.

Некоторые современные веб-сайты используют WebSockets. Соединения WebSocket инициируются через HTTP и обычно долговечны. Сообщения могут быть отправлены в любом направлении в любое время и не имеют транзакционного характера. Соединение обычно остается открытым и бездействующим, пока клиент или сервер не будут готовы отправить сообщение.

WebSockets особенно полезны в ситуациях, когда требуются сообщения с низкой задержкой или инициируемые сервером сообщения, такие как потоки финансовых данных в реальном времени.

Как устанавливаются соединения WebSocket?

Соединения WebSocket обычно создаются с использованием клиентского JavaScript, как показано ниже:

Код:
var ws = new WebSocket("wss://normal-website.com/chat");
Заметка
  • Протокол wss устанавливает WebSocket через зашифрованное соединение TLS, в то время как протокол ws использует незашифрованное соединение.
Чтобы установить соединение, браузер и сервер выполняют рукопожатие WebSocket по HTTP. Браузер выдает запрос рукопожатия WebSocket следующим образом:

Код:
GET /chat HTTP/1.1
Host: normal-website.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocket
Если сервер принимает соединение, он возвращает ответ рукопожатия WebSocket, как показано ниже:

Код:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
На этом этапе сетевое соединение остается открытым и может использоваться для отправки сообщений WebSocket в любом направлении.

Заметка

Стоит отметить несколько особенностей сообщений рукопожатия WebSocket:

  • Заголовки Connection и Upgrade в запросе и ответе указывают, что это рукопожатие WebSocket.
  • Заголовок запроса Sec-WebSocket-Version указывает версию протокола WebSocket, которую клиент желает использовать. Обычно это 13.
  • Заголовок запроса Sec-WebSocket-Key содержит случайное значение в кодировке Base64, которое должно генерироваться случайным образом в каждом запросе квитирования.
  • Заголовок ответа Sec-WebSocket-Accept содержит хэш значения, представленного в заголовке запроса Sec-WebSocket-Key, объединенного с определенной строкой, определенной в спецификации протокола. Это сделано для предотвращения вводящих в заблуждение ответов в результате неверно настроенных серверов или кэширования прокси.
Как выглядят сообщения WebSocket?

Как только соединение WebSocket установлено, сообщения могут отправляться клиентом или сервером асинхронно в любом направлении.

Простое сообщение может быть отправлено из браузера с использованием клиентского JavaScript, как показано ниже:

Код:
ws.send("Peter Wiener");
В принципе, сообщения WebSocket могут содержать любой контент или формат данных. В современных приложениях обычно JSON используется для отправки структурированных данных в сообщениях WebSocket.

Например, приложение чат-бота, использующее WebSockets, может отправить сообщение, подобное следующему:

Код:
{"user":"Hal Pline","content":"I wanted to be a Playstation growing up, not a device to answer your inane questions"}
Продолжение следует...
 
Верх Низ