Найти в Дзене
B0rn2beR00T

Решение Codeby Games (Базовая авторизация 2)

Приветствую, друзья! На этот раз разберём тачку с SQLi и WAF на борту. Вспомним как обходить блокировку вредоносных запросов и получим доступ ко всей информации БД сервера. Статья больше рассчитана для новичков и поэтому не содержит каких-то сложных методик. Более опытные хацкеры могут посмотреть разборы статей HTB с SQLi. Там будет больше сложных моментов. Приступим к разбору! В распоряжении у нас только форма авторизации на web-ресурсе. Попробуем вписать креды test:test и посмотрим как на это отреагирует сам сервер. Эту учётку нам дали в описании таска. Первое, что бросается в глаза - поля логина и пароля открытым текстом отражены в URL. Это. конечно, хорошая страшилка для любого кодера или DevOps. Второй момент - нам присвоен ID пользователя после авторизации. Тут вроде всё в норме. При просмотре исходного кода, видим как формируется SQL-запрос. Это явно оставили разработчики таска для наглядности. Попробуем внедрить кавычку в форму с логином, чтобы обнаружить SQLi: test'-- -
test
Оглавление

Приветствую, друзья!

-2

На этот раз разберём тачку с SQLi и WAF на борту. Вспомним как обходить блокировку вредоносных запросов и получим доступ ко всей информации БД сервера. Статья больше рассчитана для новичков и поэтому не содержит каких-то сложных методик. Более опытные хацкеры могут посмотреть разборы статей HTB с SQLi. Там будет больше сложных моментов. Приступим к разбору!

Сбор информации

В распоряжении у нас только форма авторизации на web-ресурсе. Попробуем вписать креды test:test и посмотрим как на это отреагирует сам сервер. Эту учётку нам дали в описании таска.

-3

Первое, что бросается в глаза - поля логина и пароля открытым текстом отражены в URL. Это. конечно, хорошая страшилка для любого кодера или DevOps. Второй момент - нам присвоен ID пользователя после авторизации. Тут вроде всё в норме.

-4

При просмотре исходного кода, видим как формируется SQL-запрос. Это явно оставили разработчики таска для наглядности.

-5

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

test'-- -
test
-6

Ага! Нашу пробную инъекцию заблокировал WAF. Значит нужно его байпасить.

Крутим SQLi и обходим WAF

WAF заблокировал наш запрос. Теперь попробуем обойти фильтрацию при помощи sqlmap:

sqlmap -u <url с параметрами login&password> --batch --risk=3 --level=3 --tampler=scape2comment --tables

--tamper=scape2comment — это скрипт для обфускации, который пытается обойти примитивные фильтры WAF путем замены пробелов на последовательности /**/, чтобы замаскировать вредоносный SQL-код, не сломав при этом его синтаксис.

Пример: ' UNION SELECT 1,2,3-- заменяется на '/**/UNION/**/SELECT/**/1,2,3--

-7

Так мы получаем инъекцию. Чтобы сразу получить информацию об имеющихся таблицах БД пропишем --tables. Задампим ещё их при помощи --dump!

-8

В таблице flag будет лежать заветный флажок.

-9

Выводы

Давай представим, что ты настраиваешь WAF, смотришь логи и видишь очередной union/**/select/**/from. В голове сразу мысль – опять скрипткидди с запустил sqlmap. Расслабься. Это не ручной пентестер и уж тем более не APT. Это болванка, которую можно и нужно отшибать на подлете.

Любой тампер в sqlmap – это по сути Python-скрипт, который занимается обфускацией полезной нагрузки. Его задача – сделать так, чтобы твой WAF не распознал в строке UNION SELECT, но СУБД при этом его поняла.

Классика жанра – space2comment. Замена пробелов на /**/ – это не магия 80-го уровня.

Как будем защищаться:

  • Самое простое и действенное — валидация и санитизация входных данных.
  • Белые списки
  • При обнаружении подозрительной активности не сразу бань IP, а начни искусственно задерживать ответ (например, на 10 секунд). Это в разы замедлит перебор и может заставить злоумышленника подумать, что канал просто плохой, и он уйдет искать жертву попроще.

Спасибо за внимание! Не забывайте оценивать моё творчество лайком. Всех благ!