Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиХакингSQL-injection
© Cobalt 06.01.2006 статья не оптимизирована


 Давай с тобой разберемся что это за тип атаки - SQL-injection. Этот тип атак
применяется хакерами всего мира для несанкционированного доступа (читай -
удаления, модификации и т.п.) к информации находящейся в базе данных бажного
сайта. В этой статье я постараюсь кратко тебе объяснить что собой представляет
SQL-ная база данных, как можно получить доступ к данным хранящимся в ней и как
можно защетить свое приложение от атак подобного рода.

 SQL (Structured Query Language) - Структурируемый Язык Запросов. Применяется
для управления информацией хранящейся в базах данных. Существует несколько
стандартов этого языка, но в настоящий момент используются различные реализации
стандарта SQL-99. Я не буду тебе полностью описывать весь стандарт, лишь упомяну
основные функции которые есть во всех без исключения СУБД построеных на этом
стандарте (MySQL, MSSQL и т.п.).

SHOW BASES                        - показывает имеющиеся БД.

SHOW TABLES                       - показывает таблицы содержащиеся в БД.

SELECT х FROM y [WHERE z=n]       - Производит выборку элементов х (если указать
                                    "*" - то всех) из таблицы y где z=n.

UNION                             - объединение двух запросов

INSERT INTO x (a..n) VALUE (b..n) - Вставить в таблицу х в столбцы a..n значения
                                    b..n

DROP TABLES x                     - Удаляет таблицу х.

DELETE FROM х [WHERE z=n]         - Удалить из таблицы х все (где z=n).

UPDATE х SET u=y [WHERE u=z]      - Установить в таблице х u=y (Если u=z).

 Это лишь основные команды, на самом деле их занчительно больше, и применяться
они могут с различными параметрами и в различных вариаций. После каждой команды
на языке SQL ставится символ ";". благодоря этому символу, в одной строке можно
задать сразу несколько команд.
 Наибольший интерес для нас представляют две функции: SELECT и UNION. Первая,
кроме всего прочего является "универсальным оператором вывода". Нарпимер если
задать запрос как SELECT 1+1 то в результате мы получим 2. Функция UNION
позволяет объеденить вывод двух и более результатов. например SELECT 1+1 UNION
SELECT 1+1, в ответе мы получим соответственно 2 и 2. У функции UNION есть пара
ограничений. Во-первых: она была внедрена далеко не во все версии СУБД, например
для MySQL она работает только начиная с 4-й версии. Во-вторых: у объединяемых
результатов, в запросах должно стоять одинаковое количество (и типы) данных.
Т.е. мы не сможем с ее помощью объединить как вывод в одном запросе текстовых,
а в другом численных данных, так и вывод в одном запросе двух данных, а в другом
одного.

 Теперь давай рассмотрим в чем же состоит судь багов типа SQL-injection.
Давай представим себе таблицу users, в которой содержаться идентификационный
номер пользователя, его логин и мыло и пароль.Например таблица выглядит
так:
_________________________________________________
|__________users_________________________________|
| id | name | mail              | pass           |
+-------------------------------+----------------+
| 1  |vasya | vasja@mail.ru     | *******        |
| 2  |sveta | svt@yandex.ru     | ********       |
| 3  |petr  | petr@nm.ru        | ******         |
+-----------+-------------------+----------------+

Чтобы посмотреть информацию о пользователе с id=1 нам достаточно сконструировать
следущий запрос: SELECT name, mail FROM users;

 Теперь посмотрим как этот запрос реализуется в таком скриптовом языке как PHP.
Допутсим, на каком-либо сайте есть бажный скрипт mail.php принимающий в качестве
параметра id пользователа, и возвращающий его имя и адрес.Скрипт могбы выглядеть
например так:

";
  //выводим имя и адрес пользователя.
 }
?>

Соответственно строка броузера для того чтобы посмотреть мыло Васи будет
выглядеть так:

http://site.ru/mail.php?user=1

 Человек обладающий логическим складом ума обязательно предположит что данные
выбераются из таблицы на основе функции SELECT. Соответственно тут в полне
вероятно может сработать функция UNION, и ему достаточно сконструировать вторую
часть запроса чтобы получить доступ к данным хранящимся в бд.
Пытливый читатель может меня спросить:"Но как он узнает что содержиться в первой
части запроса? Он же скорее всего не видел код скрипта, не знает ни названия
таблиц, ни названия столбцов в них!". Тут нам на выручку приходит старый добрый
брут. Для начала необходимо узнать из скольки столбцов таблицы выбирается
результат. Сделать это просто, достаточно добавить к url +UNION+SELECT+1. Если
в первой части запроса выдаются данные более чем одного столбца, то скрипт выдаст
ошибку. Тогда увеличим количество значений во второй части еще на еденицу:

http://site.ru/mail.php?user=1+UNION+SELECT+1,1

Теперь скрипт вернет нам информацию о пользователе с id=1 и 1 1. Т.е. данные из
первой и второй части запросов. Далее нам нужно узнать название таблицы из
которой мы читаем данные. Делается это тоже обычным подбором. Логически можно
предположить что таблица содержащая данные такого рода будет называться либо
users либо mail_adres либо еще что-то в этом роде. Осталось всего ничего,
перепробовать все варианты =) После упорных трудов мы наконец находим нужное
сочетание и можем теперь посмотреь что содержиться в поле пароль:

http://site.ru/mail.php?user=1+UNION+SELECT+name,pass+FROM+users

А теперь немного деструктива:

http://site.ru/mail.php?user=1;+DROP+TABLES+user  =)

 Так что же привело к тому что мы смогли провести такую атаку? Програмер просто
поленился встроить проверку на вводимые данные. Достаточно было отсеить пробелы
и ; и у нас ни чего бы не вышло.

P.S:
 Автор этой статьи не ставил себе целю сделать специалиста по SQL-injection из
читателя,  по этому тут приведена далеко не вся информация, но основы будем
надеяться я тебе дал =). А если читатель все-таки решить "углубить" свои знания
в этом вопросе - google вам в помощь!



© Cobalt 06.01.2006 статья не оптимизирована

e-Commerce Partners Network
Никон написал:

Ни хуя не всосал..........КАК СОВЕРШАТЬ АТАКУ!?Поконкретней пожалуйста.

Zixter написал:

Атака совершается путем отсылки левых SQL запросов на сервер и анализа результата.

k1b3r_punk написал:

не я конечно понимаю что киберы настолько жеские что с рождения знают скуль язык но нехрена не подробно

Cobalt написал:

Ну учебник по скулю например который изучал я был объемом в 2000 страниц. k1b3r_punk ты хочешь получить эти знания из одной статьи?

покемон написал:

Хех, эта статья повсюду))
т лучше почитать учебник где-нибудь на эту тему)

VAWX2 написал:

По идее лучше читать учебник но:
нефакт что там будет написано об этом, также я несчитаю руководством эту статью ибо она описывают только ошибку ошибку при "дефолтовых" условиях (а таких ситуации неочень много),и вообще статья написана для тех кто хоть маломальскии sql или просто является толчком к изучению sql'a

MirA написал:

"Так что же привело к тому что мы смогли провести такую атаку? Програмер просто
поленился встроить проверку на вводимые данные. Достаточно было отсеить пробелы
и ; и у нас ни чего бы не вышло."

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

DLLERK написал:

Мне кажется тут очень хорошо всё описано! Тут написано не про проведение sql атаки, а какие запросы можно задавать при атаках .

fraIzer написал:

хмм статья разочаровала, условия дефолтовые, данные некоторые ложные и многое взято тупо со спецификации, имхо статья нуждается в доработке...
Особенно убило вот это: "Програмер просто
поленился встроить проверку на вводимые данные. Достаточно было отсеить пробелы
и ; и у нас ни чего бы не вышло." //мда дизъинформируешь =/

Ti^ написал:

нормально...
от души...

Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
20.09.2017 08:47:03 Avito777jeax написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Здравствуйте,...
Предупреждение
20.09.2017 08:20:25 Avito777jeax написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Мое...
Новая статья
20.09.2017 08:15:19 Avito777jeax написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Приветствую...
Новый релиз
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100