2022-09-22 10:00:41
#sql
SQL инъекции возникают из-за недостаточной обработки данных, передаваемых пользователей.
Обработка данных, которая так необходима:
Санитизация
Валидация
Типизация
—#—#—#—#—#—
Как пихать кавычки и как это так работает?
условно у нас есть запрос
GET /checkid?id=2
Берется наше значение и кладется в переменную и с ней идет запрос к БД.
SELECT * FROM users WHERE id='%2%'
Мы можем в тело запроса поместить одинарную кавычку, чтобы запрос выглядел уже так:
SELECT * FROM users WHERE id='%2'%'
Нам в ответ вывалится ошибка, так как вопрос будет не валидным из-за не соответствия количества кавычек в конечном запросе.
Приведя запрос к корректному виду, мы сможем осуществить базовую инъекцию (или не сможем).
SELECT * FROM users WHERE id='%2' -- 1%' // возьмем и закомментируем вторую часть запроса.
Добавляя логику, мы сможем заставить вопрос выполняться.
id=2' or 1=1--1 —>
Запрос:
SELECT * FROM users WHERE id='%2' or 1=1-- 1%'
Комментарии двух видов:
однострочные — "#", "--",
многострочные — /* comment */
Важное дополнение!!!
После комментария "--" необходимо ставить пробел (так говорит спецификация) и лучше символ/цифру после него, так как без пробела+символа это не будет так восприниматься как комментарий, а просто заигнорируется.
#sql_injection
в MySQL до версии [5.0] комментарии можно не закрывать
Передавать в параметры можно так:
test_param=test-- 1
test_param=test/*
Если запихнуть вот такую конструкцию /*! comment*/, то комментарйи внутри нее исполнится.
Пример: SELECT * FROM users WHERE last_name = 'Petya'/*! or 1=1*/;
SELECT * FROM users WHERE last_name = 'Petya'/*!12345 or 1=1*/;
|| Команда выполнится, если версия mysql равно или больше указанному числу (1.23.45 чет тип такого)
ДОПОЛНЯЕТСЯ
————читаем-изучаем————
http://websec.ca/kb/sql_injection
http://pentestmonkey.net/category/cheat-sheet/sql-injection
https://portswigger.net/web-security/sql-injection/cheat-sheet
25 viewsedited 07:00