В этом посте мы рассмотрим, как злоумышленники могут использовать SQL-инъекции и как обнаружить такие уязвимости в вашем приложении.
Пример уязвимости:
🔘 Предположим, на сайте есть форма для входа с полями «Имя пользователя» и «Пароль». Если серверный код формирует SQL-запрос без должной проверки ввода, например:
SELECT * FROM users WHERE username = 'USER' AND password = 'PASS';🔘 Злоумышленник может ввести в поле «Имя пользователя»:
' OR '1'='1🔘 А в поле «Пароль» — любое значение. В результате сформируется запрос:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'any_value';
Этот запрос всегда возвращает истину, позволяя злоумышленнику войти в систему без знания пароля.
Как найти уязвимость:
1️⃣ Введите в поля ввода символы, такие как одинарная кавычка ('), двойная кавычка ("), точка с запятой (;), дефис (--), чтобы проверить, вызывает ли это ошибку SQL.
2️⃣ Программы, такие как Burp Suite, sqlmap, или OWASP ZAP, могут помочь в автоматическом обнаружении и эксплуатации SQLi.
3️⃣ Типы SQL-инъекций:
• Использование UNION для объединения результатов нескольких запросов.
• Использование ошибок базы данных для получения информации о её структуре.
• Отсутствие ошибок в приложении, но возможность извлечь информацию через время отклика или логику приложения.
Пример эксплуатации с использованием sqlmap
🔘 Предположим, у вас есть URL:
http://example.com/product?id=1🔘 Вы можете использовать sqlmap для автоматического тестирования и эксплуатации:
sqlmap -u "http://example.com/product?id=1" --batch --level=5 --risk=3Этот инструмент попытается определить тип базы данных, извлечь таблицы, столбцы и данные из базы данных.
Как защититься:
➡️ Используйте подготовленные выражения, чтобы ввод пользователя не стал частью SQL-запроса.
➡️ Проверяйте и экранируйте все данные от пользователя перед использованием в запросах.
➡️ Ограничьте привилегии учетных записей базы данных до необходимого минимума.
➡️ Веб-фаерволы помогут обнаружить и заблокировать попытки SQL-инъекций.
🐸 Библиотека хакера
#буст
