SQLi: инъекционная атака
Что такое SQL-инъекция?
SQLi — это своего рода атака в веб-приложении, когда злоумышленник может выполнять вредоносные запросы в базе данных веб-сайта. SQL — это метод внедрения кода, используемый для выполнения вредоносных операторов SQL.
Например, если вы хотите войти на веб-сайт и забыли имя пользователя и пароль, с помощью инъекции SQLi мы можем войти или получить доступ к веб-странице, не зная пароля.
Как работает SQL-инъекция?
SQL-инъекция содержит вставку или внедрение SQL-запроса через входные данные от клиента в приложении. Они вводятся в плоскость данных, которые влияют на предопределенные команды SQL.
Атаки с внедрением SQL нацелены на уязвимости в динамических операторах SQL. Думайте о динамическом операторе SQL как о многомерной математической функции, параметры которой фиксированы, а результат определяется значениями, помещенными в независимые переменные.
Точно так же динамический оператор SQL также состоит из предопределенного набора параметров (например, веб-формы), и полный оператор генерируется только тогда, когда пользователь вводит данные.
См. следующий пример оператора SQL формы входа:
SELECT * FROM users WHERE username = '$username' AND password = bcrypt ('$password')
Если в динамическом операторе SQL существует уязвимость, злоумышленник может ввести сложный сценарий в форме, чтобы повредить существующие параметры и изменить смысл всего оператора.
Типы SQL-инъекций:
Внутриполосный SQLi: внутриполосная инъекция SQL — это тип внедрения SQL, при котором злоумышленник получает результат в виде прямого ответа по тому же каналу связи. Например, если злоумышленник вручную запускает атаку через свой веб-браузер, результаты атаки будут отображаться в том же ее веб-браузере. Внутриполосная инъекция SQL также известна как традиционная инъекция SQL.
SQL-инъекция на основе ошибок — здесь злоумышленник выполняет определенные действия, которые заставляют базу данных генерировать сообщение об ошибке. Вы можете использовать сообщение об ошибке, чтобы определить, какая база данных используется, какую версию сервера использует обработчик и т. д.
SQL-инъекция на основе объединения — оператор, созданный базой данных для получения одного HTTP-ответа. Вы можете создать запрос в URL-адресе или объединить несколько операторов в поле ввода, чтобы попытаться сгенерировать ответ.
Слепая SQLi: Слепая инъекция SQL — это тип инъекции SQL, при котором злоумышленник не получает явного ответа от атакуемой базы данных, а вместо этого наблюдает за поведением сервера базы данных и приложения для постепенного восстановления структуры базы данных. Слепая инъекция SQL также известна как инференциальная инъекция SQL.
На логической основе — здесь злоумышленник отправляет SQL-запрос в базу данных и просит приложение вернуть разные результаты в зависимости от того, возвращает ли запрос True или False.
Основанный на времени — в этой атаке злоумышленник отправляет SQL-запрос в базу данных и заставляет базу данных ждать указанное количество времени, прежде чем поделиться результатами. Время отклика помогает злоумышленнику определить, является ли запрос истинным или ложным.
Внеполосный SQLi: внедрение внеполосного SQL (OOB SQLi) — это тип внедрения SQL, при котором злоумышленник не получает ответ от атакуемого приложения по тому же каналу связи, но может быть обманом отправлен данные на удаленную конечную точку, контролируемую злоумышленником. Внеполосная инъекция SQL возможна только в том случае, если на используемом вами сервере есть команды, запускающие DNS- или HTTP-запросы. Впрочем, это касается всех популярных SQL-серверов.
Пример на SQLi
Первый пример очень простой. Он показывает, как злоумышленник может использовать уязвимость SQL Injection, чтобы обойти безопасность приложения и аутентифицироваться как администратор.
Следующий сценарий представляет собой псевдокод, выполняемый на веб-сервере. Это простой пример аутентификации с помощью имени пользователя и пароля. В примере базы данных есть таблица с именем usersсо следующими столбцами: usernameи password.
# Define POST variables
uname = request.POST['username']
passwd = request.POST['password']
# SQL query vulnerable to SQLi
sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’”
# Execute the SQL statement
database.execute(sql)
password' OR 1=1
SELECT id FROM users WHERE username='username' AND password='password' OR 1=1'
-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite
' OR '1'='1' --
' OR '1'='1' /*
-- MySQL
' OR '1'='1' #
-- Access (using null characters)
' OR '1'='1' %00
' OR '1'='1' %16
Организации могут применять следующие политики для защиты от атак путем внедрения кода SQL.
- Никогда не доверяйте пользовательскому вводу. Их всегда следует очищать перед использованием в динамических операторах SQL.
Хранимые процедуры — позволяют инкапсулировать операторы SQL и обрабатывать все входные данные как параметры. - Подготовленные операторы — подготовленные операторы, которые сначала создают оператор SQL, а затем обрабатывают отправленные пользовательские данные в качестве параметров. Это не влияет на синтаксис операторов SQL.
Регулярные выражения — могут использоваться для обнаружения потенциально вредоносного кода и его удаления перед выполнением инструкции SQL. - Разрешения пользователя для подключения к базе данных — учетной записи, используемой для подключения к базе данных, должны быть предоставлены только необходимые разрешения. Это помогает снизить производительность операторов SQL на сервере.
- Сообщения об ошибках . Они не раскрывают конфиденциальную информацию или точное местоположение ошибки. «Извините, произошла техническая ошибка. Я связался с технической командой. Повторите попытку позже» вместо отображения оператора SQL, вызвавшего ошибку.
Это именно то, что делает брандмауэр веб-приложений (WAF). Проанализируйте весь пользовательский ввод в ваше веб-приложение на наличие совпадений с подозрительным кодом.
Мы надеемся, что вы поняли сравнение и разобрались с понятиями.
Оставьте комментарий и поделитесь своими мыслями !!
Авторы:
Акаш Шехават, Мадхури Шелке, Четан Шинде, Сварали Соле
Использованная литература:
https://learn.microsoft.com/en-us/sql/relational-databases/security/sql-injection?view=sql-server-ver16
https://systemweakness.com/sql-injection-attacks-53e942aae1f8
https://qawerk.com/blog/what-is-sql-injection/
https://brightsec.com/blog/sql-injection-attack/

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































