Курс

Курс


OWASP TOP 10

1. Инъекции — Injections

Приложения используют SQL-запросы для того, чтобы получать, добавлять, изменять или удалять данные, например при редактировании пользователем своих личных данных или заполнении анкеты на сайте. При недостаточной проверке данных от пользователя, злоумышленник может внедрить в форму Web-интерфейса приложения специальный код, содержащий кусок SQL-запроса.Такой вид атаки называется инъекция, в данном случае самый распространённый — SQL-инъекция.


Web-приложения, как правило, строят SQL запросы, сочетающие код написанный разработчиком приложения, с параметрами переданными пользователем. Рассмотрим пример:


SELECT login FROM users WHERE id=$id


В нашем примере, $id – параметр передаваемый пользователем (переменная часть запроса), в то время как остальная часть запроса статическая и была заложена разработчиком приложения. Наличие переменных пользовательских данных в статическом SQL запросе, делает весь запрос динамическим. Это и является угрозой для веб приложения.

Есть принцип, согласно которому нельзя вообще доверять user's input и надо его тщательно проверять на каждом этапе работы приложения и минимизировать его появление на сайте.


Материалы:

Синтаксис https://proselyte.net/tutorials/sql/sql-basic-syntax/

SQL для начинающих https://www.youtube.com/playlist?list=PLY4rE9dstrJwFmPYd03vZU90-TvXEpVzD

SQLi Wiki https://sqlwiki.netspi.com

SQLi лекция https://www.youtube.com/watch?v=eE-W2_M_mMU

Injection Attacks https://www.youtube.com/watch?v=rWHvp7rUka8



Практическая часть

https://sql.training.hackerdom.ru

Задание 1:


Задание 2:


Мы привели запрос к такому виду:


SELECT * FROM users WHERE id=2 OR login='-1' OR id='9'


Мы пытаемся извлечь из таблицы users пользователя с id=2 или с login=1 или с id=9, которая взята кавычкой слева и будет закрыта кавычкой оригинального запроса.


Поскольку пользователя «1» не существует, мы из этого запроса ничего не получаем, зато id=9 существует. В результате получаем вывод из 2-х строк — пользователь с id=2 и с id=9.

Пример 3:

Опять виден запрос:

select * from users where id=2 or login='$text' limit 1


Различие с предыдущим примером — ограничение на вывод в 1 строку. Уходит приплясывая при постановке комментария, который «уберет» конец строки, т.е. Он не будет обработан.



Вид запроса:

SELECT * FROM users WHERE id=2 OR login='-1' or id='13' --' LIMIT 1

Таким образом мы выкидываем ограничение и извлекаем пользователя с id=13

Строка DarkHack может быть произвольной. Она нужна чтобы кавычка не вызвала ошибку.



Пример 4:

Запрос:

SELECT * FROM users WHERE id=2 OR login='$text' LIMIT 1

Чуток поинтересней. Теперь у нас 2 таблицы, и запрос выполняется не к той таблице, которая нам нужна. Воспользуемся классическим способом. В mysql существует оператор, который позволяет выполнять запрос к разным таблицам через 1 запрос. Для работы с объеденением запросов нам необходимо чтобы во всех объеденяемых запросах количество полей было одинаковым. Так как мы не можем повлиять на их количество в первом запросе, то нам нужно подобрать их количество во втором к первому. Сделать это можно несколькими способами, воспользуемся оператором union. Дело в том, что количество столбцов до UNION и после должны соответствовать, и, наверняка, вылезет ошибка.


Наша цель — другое, вывести информацию из другой таблицы. О ней мы знаем только то, что в ней 3 поля и ее название. Чтобы извлечь какие-то поля, мы должны их знать. Сделать это можно несколькими способами, например, если у нас есть доступ к служебной таблице information schema. Таблица information_schema.columns хранит информацию об именах колонок. Извлечем информацию о всех колонках всех таблиц и отфильтруем ее только теми, которые принадлежат таблице secret:


https://sql.training.hackerdom.ru/sql/ZZZZZZ4.php

?text=-1'+union+select+1,column_name,3+from+information_schema.columns where table_name='secret'--+123



2. Broken Authentication

Authentication Bypass (обход аутентификации) для сайтов и веб-приложений - это несанкционированный доступ к административному разделу или разделам сайта и скриптам обеспечивающим прямое взаимодействие с базой данных и файловой системой сервера.


Пример: SQL injection Authentication Bypass

username: Admin

password: ' OR 1=1 --


Или bruteforce.

Установка thc-hydra: https://blog.hook.sh/hack/hydra-bruteforce-passwd/

Подбор годных словарей для брутфорса: https://weakpass.com/




Report Page