PDA

Просмотр полной версии : Практическое руководство по эксплуатации уязвимости SQL Injection: от теории до реального кейса


Сергей Попов
23.05.2025, 12:13
https://forum.antichat.xyz/attachments/4941763/1747988581793.png



Представьте, что всего одна строка в текстовом поле входа способна обойти всю систему аутентификации и открыть доступ к базе данных сайта. Звучит как кино? Это реальность, и имя ей — SQL Injection.

Введение
SQL Injection — одна из самых опасных и распространённых уязвимостей в веб-приложениях. Несмотря на то, что о ней говорят уже больше 20 лет, до сих пор тысячи сайтов остаются уязвимыми.

В этой статье мы разберём:

Как работает SQL-инъекция на примере уязвимого веб-приложения.

Практическую эксплуатацию с использованием Python и SQLmap.

Как защититься от таких атак.

Современные техники обхода WAF и сложные кейсы.
Если вы занимаетесь пентестом или веб-разработкой — этот материал поможет вам глубже понять механизмы атаки и защиты.
Как работает SQL Injection?
SQL-инъекция возникает, когда приложение некорректно обрабатывает пользовательский ввод, позволяя злоумышленнику внедрить произвольный SQL-код.

Пример уязвимого PHP-кода:

PHP:



$username
=
$_POST
[
'username'
]
;
$password
=
$_POST
[
'password'
]
;
$query
=
"SELECT * FROM users WHERE username='$username' AND password='$password'"
;
$result
=
mysqli_query
(
$conn
,
$query
)
;


Если ввести

admin' --

в поле

username

, запрос превратится в:

SQL:



SELECT
*
FROM
users
WHERE
username
=
'admin'
--' AND password='...'


Комментарий

--

отключает проверку пароля, и злоумышленник получает доступ к аккаунту администратора.
Эксплуатация SQL-инъекции на практике
Рассмотрим реальный кейс с уязвимым сайтом (используем легальный стенд, например, We;come DVWA - Damn Vulnerable Web Application или OWASP WebGoat | OWASP Foundation).
1. Установка DVWA (для новичков)

Скачайте DVWA с We;come DVWA - Damn Vulnerable Web Application.

Установите XAMPP или LAMP для локального сервера.

Разместите файлы DVWA в папке

htdocs

(или аналогичной).

Настройте базу данных в

config.inc.php

.

Запустите сервер и откройте DVWA в браузере.
2. Обнаружение уязвимости
Проверим форму входа на SQL-инъекцию:

Вводим

'

— если появляется ошибка SQL, уязвимость есть.

Пробуем

' OR 1=1 --

— если авторизация проходит, инъекция подтверждена.
3. Извлечение данных с помощью UNION-атаки
Если приложение выводит результаты запроса, можно использовать UNION для получения данных из других таблиц.

Пример запроса:

SQL:



'
UNION
SELECT
username
,
password
FROM
users
--


В ответе могут оказаться хэши паролей, которые затем можно взломать через John the Ripper password cracker или hashcat - advanced password recovery.
4. Автоматизация с помощью SQLmap
Для ускорения тестирования используем SQLmap:

Bash:



sqlmap -u
"http://example.com/login.php"
--data
=
"username=admin&password=123"
--dbs


Объяснение флагов:


-u

— URL-адрес цели.


--data

— данные POST-запроса.


--dbs

— извлечение списка баз данных.
5. Современные техники: SQLi в REST API и обход WAF
SQLi в REST API
Если приложение использует JSON, инъекцию можно внедрить в тело запроса:

JSON:



{
"username"
:
"admin' OR 1=1 --"
,
"password"
:
"password"
}


Обход WAF
Для обхода WAF можно использовать:

Модификацию ключевых слов:

SQL:



SELSELECTECT
*
FROM
users
WHERE
username
=
'admin'


Каскадные запросы:

SQL:



'; SELECT * FROM users WHERE '
1
'='
1

Рекомендуемые материалы по SQL Injection на античат

CTF: Решаем SQL Injection задания

Практический разбор SQLi-задач (https://forum.antichat.xyz/threads/581085/) с использованием SQLmap и ручных техник. Подходит для подготовки к CTF и отработки навыков на легальных стендах.

SQL-injection, Error Based - XPATH

Разбор инъекций (https://forum.antichat.xyz/threads/568855/) через функции

extractvalue()

и

updatexml()

в MySQL, с примерами и объяснением механизмов.

SQL Injection: обсуждение и вопросы

Форумная тема с обсуждением различных техник SQL-инъекций, включая Boolean-based и обход фильтров, с примерами запросов и советами от участников.
Как защититься от SQL Injection?

Используйте подготовленные выражения (Prepared Statements)

PHP:



$stmt
=
$conn
-
>
prepare
(
"SELECT * FROM users WHERE username=? AND password=?"
)
;
$stmt
-
>
bind_param
(
"ss"
,
$username
,
$password
)
;
$stmt
-
>
execute
(
)
;


Применяйте ORM (например, SQLAlchemy, Django ORM)

ORM автоматически экранируют запросы, предотвращая инъекции.

Ограничивайте права БД

У приложения не должно быть прав на

DROP TABLE

или

UNION SELECT

.

Используйте WAF (например, ModSecurity)

WAF помогает блокировать известные шаблоны атак.

Проверяйте ввод данных

Используйте whitelisting (разрешение только ожидаемых значений).
SQL Injection остаётся серьёзной угрозой, но её можно избежать, следуя best practices. Если вы тестируете свои приложения — обязательно проверяйте их на уязвимости, а если разрабатываете — всегда используйте параметризованные запросы.

FAQ

Как тестировать SQLi легально?
Только на своих приложениях или через bug bounty (например, на HackerOne).

Какие ещё есть виды SQL-инъекций?
Слепые (Blind SQLi), основанные на времени (Time-Based) и ошибках (Error-Based).

Как обнаружить слепую SQLi?
Через условные ошибки или задержки ответа (например,

SLEEP(5)

).

Какие ORM лучше защищают от SQLi?
Django ORM, SQLAlchemy и Hibernate автоматически экранируют запросы.

Можно ли защититься только с помощью WAF?
Нет, WAF помогает, но не заменяет безопасный код.



Хотите глубже разобрать техники SQL-инъекций и научиться использовать их профессионально?

На курсе «SQL Injection: от сканирования до эксплуатации» от античат вы:

Освоите 20+ техник SQLi (Classic, Blind, Time-based, Error-based, Out-of-Band)

Научитесь автоматизировать атаки с SQLmap и писать свои payload’ы

Получите практику на легальных стендах и CTF-задачах

Разберёте методы обхода WAF и эксплуатации SQLi в API

Старт ближайшего потока — 23 июня.


Попробуйте повторить атаку на DVWA и поделитесь результатами в комментариях!