Всем привет.
В этой статье покажу, как можно эксплуатировать SQL инъекцию в онлайн чате, который работает через websocketы. Вытаскивать базу и детектить скулю будем через sqlmap.
Это моя первая статья, так что надеюсь, что всё изложу понятно и по делу. Поддержите меня лайком и тёплым словом, если статься понравиться. Может ещё сделаю о чем-то интересном
Теории тут не будет — о том, что такое вебсокеты и скуля, уже не раз писали на форуме. Да и вся нужная информация спокойно гуглится.
Ладно, меньше слов — больше дела. Поехали.
Для примера у нас есть простой чат, где пользователи переписываются друг с другом по душам.
Для удобства на экране видно и время отклика сервера.
Давайте перехватим трафик через Burp и посмотрим, что именно происходит под капотом.
Вот и первый запрос:
Здесь мы подключаемся к websocket серверу. Код ответа 101 говорит о том, что соединение прошло успешно.
Я выделил заголовки, которые чаще всего встречаются именно у websocket соединений — если вы их видите, значит, websocket сейчас начнет использоваться (ну иль уже используеться, просто переподключение к серверу), и стоит обратить внимание на вкладку WebSockets history (она рядом с HTTP history в Burp Suite).
А вот и сам запрос — передаётся username и text. Тут всё просто и понятно для недалёкого, останавливаться надолго не будем.
Дальнейшие запросы повторяются и ничего нового не несут, так что их показывать смысла нема.
Теперь отправим этот запрос на сервер через Repeater и начнём играться. Для начала — просто отправим одинарную кавычку '
Вот тут уже становится интересно. Но давайте сразу по честному: на реальных таргетах найти error based скулю — задача почти без шансов. В большинстве случаев от одиночной кавычки толку будет ноль. Та и от спец. символов тоже.
Так что если более серьёзно подходить к делу — стоит запускать sqlmap и хотя бы немного протестировать ручками, посмотреть, как сервер себя ведёт.
Но в нашем учебном примере всё по красоте — error-based есть, dbms – sqlite. Так что давайте сдампим базу через всеми любимый sqlmap.
Тут есть один нюанс: sqlmap из коробки не умеет работать с websocketами.
На помощь приходит sqlmap-websocket-proxy — он действует как промежуточный прокси между sqlmap и websocket сервером.
Команда для запуска sqlmap websocket proxy будет выглядеть вот так:
sqlmap запустили. Если всё сделали правильно, во вкладке с sqlmap-websocket-proxy будет отображаться отладка — там видно, какие пейлоады sqlmap отправляет на сервер.
Ну и, конечно, в самом чате тоже будет заметна активность.
Как можно увидеть, я специально выделил пейлоады, при которых ответ от сервера занял 950 мс и больше. Именно на этих запросах sqlmap и зацепил time based SQL инъекцию.
В от и сама скуля. Ну а дальше сами знаете че делать. У меня на этом все

В этой статье покажу, как можно эксплуатировать SQL инъекцию в онлайн чате, который работает через websocketы. Вытаскивать базу и детектить скулю будем через sqlmap.
Это моя первая статья, так что надеюсь, что всё изложу понятно и по делу. Поддержите меня лайком и тёплым словом, если статься понравиться. Может ещё сделаю о чем-то интересном
Теории тут не будет — о том, что такое вебсокеты и скуля, уже не раз писали на форуме. Да и вся нужная информация спокойно гуглится.
Ладно, меньше слов — больше дела. Поехали.
Для примера у нас есть простой чат, где пользователи переписываются друг с другом по душам.
Для удобства на экране видно и время отклика сервера.
Давайте перехватим трафик через Burp и посмотрим, что именно происходит под капотом.
Вот и первый запрос:
Здесь мы подключаемся к websocket серверу. Код ответа 101 говорит о том, что соединение прошло успешно.
Я выделил заголовки, которые чаще всего встречаются именно у websocket соединений — если вы их видите, значит, websocket сейчас начнет использоваться (ну иль уже используеться, просто переподключение к серверу), и стоит обратить внимание на вкладку WebSockets history (она рядом с HTTP history в Burp Suite).
А вот и сам запрос — передаётся username и text. Тут всё просто и понятно для недалёкого, останавливаться надолго не будем.
Дальнейшие запросы повторяются и ничего нового не несут, так что их показывать смысла нема.
Теперь отправим этот запрос на сервер через Repeater и начнём играться. Для начала — просто отправим одинарную кавычку '
Вот тут уже становится интересно. Но давайте сразу по честному: на реальных таргетах найти error based скулю — задача почти без шансов. В большинстве случаев от одиночной кавычки толку будет ноль. Та и от спец. символов тоже.
Так что если более серьёзно подходить к делу — стоит запускать sqlmap и хотя бы немного протестировать ручками, посмотреть, как сервер себя ведёт.
Но в нашем учебном примере всё по красоте — error-based есть, dbms – sqlite. Так что давайте сдампим базу через всеми любимый sqlmap.
Тут есть один нюанс: sqlmap из коробки не умеет работать с websocketами.
На помощь приходит sqlmap-websocket-proxy — он действует как промежуточный прокси между sqlmap и websocket сервером.
Команда для запуска sqlmap websocket proxy будет выглядеть вот так:
sqlmap-websocket-proxy -u "ws://websock.test:3000/" -d '{"username":"User","text":"hahaha%param%"}' -p 3349
- В -d передаём данные, где %param% — это та самая точка, куда sqlmap будет подставлять payloadы.
- В -p указываем порт, на котором будет крутиться прокси.
- В -u — URL websocket сервера. Обратите внимание, он должен начинаться с ws:// (если соединение не защищённое) или wss:// (если шифруется).
Этот -u — уже не реальный сервер, а наш локальный прокси, который будет пересылать запросы в WebSocket. Там вот в терминале об этом написаноsqlmap -u "http://localhost:3349/?param1=1" [ну и дальше ваши аргументы]
sqlmap запустили. Если всё сделали правильно, во вкладке с sqlmap-websocket-proxy будет отображаться отладка — там видно, какие пейлоады sqlmap отправляет на сервер.
Ну и, конечно, в самом чате тоже будет заметна активность.
Как можно увидеть, я специально выделил пейлоады, при которых ответ от сервера занял 950 мс и больше. Именно на этих запросах sqlmap и зацепил time based SQL инъекцию.
В от и сама скуля. Ну а дальше сами знаете че делать. У меня на этом все