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

Капнуть глубже про sql?

  • Да

    Голосов: 87 90.6%
  • Не

    Голосов: 2 2.1%
  • Нейтрально...

    Голосов: 7 7.3%

  • Всего проголосовало
    96

Fantazion

Новичок
Статус
offline
Регистрация
13.08.2016
Сообщения
47
Репутация
8
Сразу говорю, статья взята, найти легко, но тут вроде бы нету подобному(искал).Если есть, удаляйте. Если захотите могу более глубже накопать, помню получалось взламывать школосайты с помощью программ и тп...
P.s. Первая тема, обосрите пополной.

P.s.s.Сорьки если оформление дерьмо... старался...

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-инъекций.

Поздравляю! Вы дочитали статью до конца! Думаю, начинающим программистам эта статья окажется хоть капельку полезной.
Владельцы сайтов, надеюсь, не сильно испугались. Знайте, что главное — сотрудничать с хорошими компаниями, а не обращаться к неизвестным личностям.
 

onehbillos

Эксперт
Статус
offline
Регистрация
10.08.2016
Сообщения
642
Репутация
380
sqlmap - kalilinux
 

Fantazion

Новичок
Статус
offline
Регистрация
13.08.2016
Сообщения
47
Репутация
8
нашел хорошею статеичку и тд, но не могу найти софт который сам бы сканировал сайты и проверял уязвимы ли или нет, не сильно вижу смысла кидать инфу если она пока что бесполезна...я поищу еще конечно, но если честно немног зае*ался...
 

Fantazion

Новичок
Статус
offline
Регистрация
13.08.2016
Сообщения
47
Репутация
8
Все вроде нашел, следующую статью напишу сам с примером на след неделе.
P.s.Охх как же я зае*ался, не представляете...
 

plixard

Участник
Статус
offline
Регистрация
06.06.2016
Сообщения
79
Репутация
33
Все вроде нашел, следующую статью напишу сам с примером на след неделе.
P.s.Охх как же я зае*ался, не представляете...
Можешь не писать. Достаточно погуглить по тематике и найдется более лаконичная статейка с реальными профитными примерами и об'ьяснениями для новичков.
 

Skarp

Новичок
Статус
offline
Регистрация
24.11.2015
Сообщения
13
Репутация
0
Можешь не писать. Достаточно погуглить по тематике и найдется более лаконичная статейка с реальными профитными примерами и об'ьяснениями для новичков.
К примеру ?
 

conguerorKK

Заблокированные
Статус
offline
Регистрация
29.06.2016
Сообщения
171
Репутация
95
Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.
Сразу говорю, статья взята, найти легко, но тут вроде бы нету подобному(искал).Если есть, удаляйте. Если захотите могу более глубже накопать, помню получалось взламывать школосайты с помощью программ и тп...
P.s. Первая тема, обосрите пополной.

P.s.s.Сорьки если оформление дерьмо... старался...

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-инъекций.

Поздравляю! Вы дочитали статью до конца! Думаю, начинающим программистам эта статья окажется хоть капельку полезной.
Владельцы сайтов, надеюсь, не сильно испугались. Знайте, что главное — сотрудничать с хорошими компаниями, а не обращаться к неизвестным личностям.
Новичкам в этом деле (по типу меня) подойдёт. + заслужил.
 

Fantazion

Новичок
Статус
offline
Регистрация
13.08.2016
Сообщения
47
Репутация
8
Можешь не писать. Достаточно погуглить по тематике и найдется более лаконичная статейка с реальными профитными примерами и об'ьяснениями для новичков.
так я и искал даже такие, то где то чего то не додают то еще чего то не хватает, крч на след неделе я всю инфу собираю и объединю, эта инфа было для ознакомления, следующая реальный взлом и тд и тп, все что нужно будет, и все по полочками.
p.s.Хотя бы постараюсь...
p.s.s.Весь день угробил на поиски, ток ща заметил что я с утра ничего не ел...
 

Fantazion

Новичок
Статус
offline
Регистрация
13.08.2016
Сообщения
47
Репутация
8
Извините ребят, я уже не могу, у меня вроде почти все готово но мне не хватает проги которая будет проверять кучу сайтов на возможность иньекции, а не по 1 сайту, да и даже когда я находил все пароли были зашифрованы... расшифровать не получалось, я конечно могу поделиться тем что нашел, но толку... вообщем если найду такую прогу то все будет, а пока я лучше займусь крэкерством(поучусь).
P.s.Всем добра и удачи и простите...я пытался...
 

onehbillos

Эксперт
Статус
offline
Регистрация
10.08.2016
Сообщения
642
Репутация
380
ребята качайте OC kali linux.)
 

cyber

Новичок
Статус
offline
Регистрация
14.12.2016
Сообщения
1
Репутация
1
нашел хорошею статеичку и тд, но не могу найти софт который сам бы сканировал сайты и проверял уязвимы ли или нет, не сильно вижу смысла кидать инфу если она пока что бесполезна...я поищу еще конечно, но если честно немног зае*ался...
блеа короче изъяны сайтов по скуле ищет inurlbr даёшь ему определённый дорк sql inj и вауля он те сайтов кучу нароет со скулей
 

kuzmin1337

Участник
Статус
offline
Регистрация
04.12.2016
Сообщения
29
Репутация
23
блеа короче изъяны сайтов по скуле ищет inurlbr даёшь ему определённый дорк sql inj и вауля он те сайтов кучу нароет со скулей
долго долго будет сканить. И все сайты перебручены по паблик доркам.
 

FreeDoom

Новичок
Статус
offline
Регистрация
16.01.2017
Сообщения
11
Репутация
0
Выложи другие части статьи, пускай и сырые.
 

CypressHillx

Новичок
Статус
offline
Регистрация
10.02.2021
Сообщения
5
Репутация
1
Очень полезная инфа ???
Изучил бд SQL по YouTube за час. Спасибо