SQL инъекции. Проверка, взлом, защита

M

MrFear41

Original poster
SQL Injection

Нам нужно разобраться, что есть сайт, как он работает в общих чертах. Сайт — программа, в 90% случаев написанная на языке программирования PHP.
Для того чтобы веб-мастерам было удобнее управлять сайтом, вначале двухтысячных начали использовать базы данных (далее БД), где хранится вся информация о зарегистрированных пользователя, об их паролях, естественно, не в открытом виде, но об этом ниже.

Что такое SQL инъекции?

Все очень просто. SQL — это язык общения с БД, а слово Injection переводится как “внедрение”. Иначе говоря, при помощи SQL Injection можно внедрить произвольный SQL-код, который сервер обработает и выдаст ответ.

Как все работает: примеры

БД состоит из таблиц, каждая таблица имеет строки и столбцы, все как в Еxel.
Для наглядности рассмотрим примерную структуру БД на всем знакомом сайте VK.com
Каждый пользователь “ВКонтакте”, естественно, имеет ряд персональных параметров: Имя, Фамилия, e-mail, дата регистрации и прочее. В итоге каждый столбец отвечает за свой параметр.
Пример:
ID | First_name| Last_name | password | email ....
1 | Pavel | Durov | 202cb962ac59075b964b07152d234b70 | ....
2 | Vova | Pupkin | 827ccb0eea8a706c4c34a16891f84e7b | ....


Скорее всего, вы решите, что у Паши Дурова и Вовы Пупкина очень сложный пароль (аж целых 32 символа!), но, на самом деле, вы ошибаетесь. Что же есть 202cb962ac59075b964b07152d234b70? Это так называемое хэш-значение, результат преобразования хэш-функции. Простым языком — зашифрованный пароль (хоть это не совсем так). Для чего это нужно? Для того чтобы хакер при взломе сайта не смог легко заполучить пароли пользователей. Но и на это есть свои методы. Если пароль зашифрован — это еще не гарантия безопасности.
Давайте представим, что вы (программа) вышли в магазин (БД) и просите продавца (SQL запрос): "Дайте, пожалуйста, одну пачку Мальборо за 100 рублей";
Вот так это будет выглядеть на языке SQL:
SELECT имя-товара FROM универсам WHERE (тип='мальборо' AND цена='100') LIMIT 1
SQL-сервер выдаст ответ на ваш вопрос, а делать вы с ним можете все что угодно. Можете как-то модифицировать эту информацию, посчитать или банально вывести на экран браузера.
Теперь вернемся к SQL Injection, как мы уже знаем, это внедрение произвольного кода в SQL-запрос. То есть уязвимость существует тогда, когда злоумышленник может внедрить свой выполняемый код.
Продолжим. Вот вы прочли Аллена Карра и бросили курить. Теперь вы ходите в магазин за исключительно полезными товарами:) В этот раз, вы пойдете... ну, допустим, за молоком.
Чтобы не забыть, вы записали на бумажке: "Один пакет молока за 50 рублей", но у вас есть друг (хакер), который курит. Он произвел SQL-атаку и теперь надпись гласит: "Один пакет молока за 50 рублей. $ИЛИ одну пачку Мальборо за 100 рублей$"
Вы приходите в магазин и читаете по бумажке: "Дайте, пожалуйста, один пакет молока за 50 рублей или пачку Мальборо за 100"
SELECT имя-товара FROM универсам WHERE (тип='молоко' AND цена='50') OR (тип='мальборо' AND цена='100') LIMIT 1
Продавец подумал, что ему незачем идти до холодильника с молоком, когда сигареты лежат рядом, и отдал их. Теперь вы идете с магазина, а ваш друг только этого и ждет, когда вы принесете ему сигареты.
Вот и пример SQL атак. На сайтах это выглядит иначе, конечно же. Сайт запрашивает с БД одну информацию, а с помощью SQL-инъекции можно получить, например, логины и пароли.

Как же происходит взлом?

Чтобы четко понимать, что именно нужно делать, программа берет SQL-запрос в кавычки. Приведу реальный пример. Допустим, мы хотим выяснить, сколько лет нашему другу, зная его имя и отправляя в переменную $_GET[‘name’]
Выполняем запрос:
$result = mysql_query("SELECT age FROM myfriends WHERE name=$_GET[‘name’]");

Например, мы хотим узнать сколько лет Насте хоть это и неприлично, но БД все нам расскажет :)
В программе окажется код:
mysql_query("SELECT age FROM myfriends WHERE name='Настя’");
Рассмотрим чуть детальнее вот этот кусочек. у нас есть 2 пары кавычек.
Первая пара обозначает сам запрос целиком.
"SELECT age FROM myfriends WHERE name='Настя’"
Вторая пара обозначает имя. Настя.

Так вот, а что если злоумышленник напишет не Настя, а Настя’, с кавычкой в конце? Он нарушит синтаксис функции mysql_quevery. И SQL-сервер выдаст закономерный ответ — ошибку (потому как не сможет обработать ‘ , которая не является функцией).

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near Настя'

Кстати, совсем забыл вам рассказать про оператора для комментирования. Один из них — это два тире, которые выглядят вот так: “--”. Что же случится, если мы передадим Настя’ -- ?
Правильно. Все последующие записи закомментируются, т.е. закомментируется кавычка для закрытия функции mysql_query(). Теперь ее роль будет выполнять та кавычка, которую мы сами и написали. Верно, сейчас мы подходим к самому интересному. Таким способом мы получили доступ для свободного обращения к базе данных. Я привел в пример самую простую ошибку программиста.
В языках программирования есть разные типы данных, есть строки (String), есть числа (Integer), в зависимости от этого нужно правильно строить SQL-инъекцию. Кстати, “1” может быть как строкой, так и целым числом.
Это лишь край вершины айсберга, есть десятки способов реализации угроз типа SQL-инъекции.

Пример взлома сайта

Действительно ли все так страшно, как вам рассказывают? Не могу не приложить пример. Здесь мы наблюдаем интернет-магазин, который с помощью SQL уязвимости вывел нам информацию о версии SQL-сервера. Можно с легкостью вывести информацию и о логинах/паролях, но мы рассматриваем не методы взлома и деструктивного воздействия, а напротив, средства защиты (кстати говоря, администрация сайта уведомлена о найденной уязвимости). Иметь уязвимость в интернет-магазине — недопустимо, а если он еще и карты принимает — неприемлемо. Злые хакеры (не мы) могут получить доступ к сайту и записывать данные о дебетовых/кредитных картах покупателей, а затем использовать информацию в своих целях. Поэтому стоит очень внимательно относиться к безопасности как при создании веб-сайта, так и при покупках в сети.
Это лишь один из путей хакеров при монетизации сайтов. Их десятки: вирусы, дорвеи, редиректы, дополнительная реклама, невидимая sape на вашем сайте… и многое другое…
site1-1024x533.png

Мы с вами пришли к выводу, что имея более-менее значимый проект, нельзя допускать уязвимость. Иначе в самый неподходящий момент это может привести к тяжелым последствиям. Хорошо, с этим разобрались, а что же делать? Для профессионального аудита стоит обратиться к профильным компаниям, но проверить элементарные SQL-уязвимости теперь вы можете и самостоятельно. Зачастую хакеры проверяют уязвимости автоматически, и, закрыв базовые уязвимости, вы сможете спасти свой сайт от взора хакера.

Что делать если мой сайт взломали?

Взломав сайт и используя информацию в своих целях, хакеры оставляют backdoors (скрытые точки входа хакера). Это могут быть файлы с любым расширением, даже jpg, но в них будет закодирован php-код для проникновения в систему. В наше время существует множество php-антивирусов, программ, которые сканируют вашу файловую систему сайта на предмет подозрительных файлов. Могу посоветовать бесплатное ПО AI-Bolit.

Для проверки сайта на наличие вредоносного ПО нужно загрузить скрипт-антивирус на ваш хостинг и запустить его, остальное он сделает за вас. После чистки бэкдоров необходимо закрыть брешь, через которую хакер к вам попал. Обновите движок, плагины, смените пароли, можете обратиться к хостеру, чтобы он выдал лог-файл, по которому можно понять через что именно был получен доступ. После закрытия канала проникновения и удаления бэкдоров, все должно быть хорошо, но каждый случай индивидуален и требует персонального подхода.

Как защитить свой сайт от взлома: базовая проверка на уязвимости SQL типа

Для начала, нам нужно найти ссылки такого типа…..
/index.php?id=410
Т.е. любой URL, который содержит входные параметры. Здесь переменная $_GET[‘ID’] содержит значение 140, которое, возможно, передается серверу БД. Т.е. для базовой проверки вам нужно будет попробовать вставить кавычку и посмотреть, что выдаст в ответ ваш сайт.

Защита от SQL инъекций

Самое главное — фильтрация входящих данных, например, в параметрах поиска, при выборе номера страницы и прочее.
Выделим основные пункты для защиты вашего веб-сайта.
  • Максимально возможная фильтрация данных: злоумышленник не должен иметь прав вставить свою кавычку, затереть вашу.
  • Использовать при сравнении кавычки SELECT ...WHERE name='$name'.
  • Если вы пользуетесь SQL-функцией LIKE, обязательно фильтруйте символы “%” и “_”.
  • Если же вам требуется очень серьезная защита, можете создать белый список* вызова запросов, и сайт будет отвечать только на них.
*White list — лучший метод защиты от SQL-инъекций. Суть заключается в том, что в коде программы прописываются разрешенные для передачи SQL-серверу значения параметров, что практически полностью исключает возможность взлома веб-сайта с помощью SQL-инъекций.

Поздравляю! Вы дочитали статью до конца! Думаю, начинающим программистам эта статья окажется хоть капельку полезной.
Владельцы сайтов, надеюсь, не сильно испугались. Знайте, что главное — сотрудничать с хорошими компаниями, а не обращаться к неизвестным личностям.
 
Название темы
Автор Заголовок Раздел Ответы Дата
Emilio_Gaviriya Статья Что такое SQL-инъекции (ч.1). Уязвимости и взлом 0
G SQLMAP-обнаружение и эксплуатация SQL инъекции: детальное разъяснение (часть 1) Полезные статьи 0
G Skipfish - Сканер безопасности веб-приложений для определения XSS, SQL инъекции, а также Shell инъекции Kali Linux 0
vulcanixx XDumpGO v1.5 - Fastest SQL injection based dumper Бруты/Парсеры/Чекеры 0
Emilio_Gaviriya Статья Гайд по SQL-инъекциям. Уязвимости и взлом 0
F как искать sql уязвимые сайты Вопросы и интересы 4
U [sib-panel/sql dumper][Url parser 500k - 1000 руб Доступы - FTP, shell'ы, руты, sql-inj, БД 2
S SQLi-DB-SQL Injection Dork Scanner v1.0 Уязвимости и взлом 2
N SQLi-DB-SQL Injection Dork Scanner v1.0 Корзина 0
N SQLi-DB-SQL Injection Dork Scanner v1.0 Способы заработка 0
B [Udemy, Максим Гузив] SQL от Михаила. Лучший курс по SQL (2019) Полезные статьи 0
B [Специалист] Анализ данных на языке SQL (2019) Полезные статьи 0
U Проверено SQL-inj MultiTool Доступы - FTP, shell'ы, руты, sql-inj, БД 1
T Обучение SQL-инъекциям в видеоуроках Софт для работы с текстом/Другой софт 1
F sql Другое 0
K [Специалист] Практикум (МАСТЕР): Полнотекстовый поиск в SQL Server (2018) Другое 1
S Обучение SQL-инъекциям Уязвимости и взлом 0
1 Курс по SQL injection Полезные статьи 0
K [geekbrains] Базы Данных Для Профессионалов И Язык Sql Другое 0
K PHP/SQL: back-end разработка и базы данных Другое 0
K Инструкция по использованию jSQL Injection — многофункционального инструмента поиска и эксплуатации SQL-инъекций в Kali Linux Уязвимости и взлом 0
G JSQL - Java инструмент для автоматизации SQL инъекций Kali Linux 0
D phyton sql Вопросы и интересы 0
Y SQL атака с помощью кали линукс Уязвимости и взлом 5
Little_Prince Чем импортировать в sql ? Другие ЯП 0
J SQL injection Spam/DDOS/Malware 0
W SQL Hunter1.2 (парсер для Google и поиск уязвимостей sql) Spam/DDOS/Malware 12
L 5 сайтов для оттачивания навыков написания SQL запросов Другие ЯП 0
R SQL за 20 минут Другие ЯП 10
I W3af Web Security Scanner - Программа для поиска и эксплуатации уязвимостей sql-injection Софт для работы с текстом/Другой софт 17
Danzila Мануал SQL. Полезные статьи 0
N Лёгкий метод SQL - Injektion Spam/DDOS/Malware 14
J Вопрос по sql injection на время 2016 года Вопросы и интересы 11
Admin Курс по sql инъекциям Полезные статьи 0
El_IRBIS Интересно Проверка маршрутизатора на наличие вредоносных программ: полное руководство Вирусология 0
Т Закрыто Проверка на запреты пересечения границы, флажки, сторожки и маячки. Корзина 2
A Проверка файлов на вирусы Продажа софта 11
S Проверка сайтов на безопасность Свободное общение и флейм 9
M Проверка dark.fail Полезные статьи 0
АнАлЬнАя ЧуПаКаБрА INLINE pr-cy [rank checker] [Проверка Статистики Посещений Сайта] Проекты Private Keeper 0
R Private Keeper Проверка почты на существование Проекты Private Keeper 0
S Предоставим информацию из : ФНС, РОСРЕЕСТРА, МВД,Проверка Кредитной истории по базам и т.д. Ищу работу. Предлагаю свои услуги. 32
B Проверка банковского перевода Корзина 1
Little_Prince Проверка ваших баз. Ищу работу. Предлагаю свои услуги. 1
K Проверка валидности ключей steam без их активации Полезные статьи 0

Название темы