Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #77, МАЙ 2005 г.

Массовое заражение

Master-lame-master

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


Собственно, ошибка выглядела следующим образом: «1064 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 '''' and password=PASSWORD('')' at line 1». Все понятно, скрипт не проверял переменные login и password на специальные символы, поэтому сценарий завершился аварийно. Более того, легко заметить, что на сервере отключена директива magic_quotes, что чрезвычайно меня радовало. Немного поразмыслив, я представил, как выглядит запрос в действительности. Скорее всего, СУБД передавалась следующая строка: «SELECT blabla WHERE login=’login’ and password=PASSWORD(‘password’)». После этого мне ничего не оставалось, как логически закончить запрос, модифицировав его так:

SELECT blabla WHERE login=’admin’ and password=PASSWORD(‘no’) or 1/*

В данной ситуации скрипт должен авторизовать меня как админа, так как единичка является всегда правдой, независимо от второго условия. Чтобы проверить мою гипотезу, нужно было залогиниться под именем admin и паролем «no’ or 1/*». Вбив эти данные, сценарий подчинился и открыл страницу администрации! Первая проблема была решена.

[админка – тоже скрипт]

Однако ликовать было еще рано. Ну, пробил я стенку головой, но что я буду делать в соседней камере? :). Правильно! Искать уязвимости. Как известно, админки славятся своими багами. Это объяснимо: зона администрирования изначально предназначается для грамотных людей, где реализовывать защиту от дурака вроде бы и не надо. Такими мыслями руководствуются многие программисты, допуская массу ошибок в своих скриптах.

Я решил проверить этот факт и стал переходить по различным ссылкам. Мое внимание привлек раздел templates, в котором производился просмотр и редактирование PHP-шаблонов. Эти темплейты вполне могли запрашиваться по прямой ссылке http://britnie.com/guestbook/templates/template.php, поэтому мне захотелось вписать в код такого шаблона строчку «<?php system($_GET[‘cmd’]); ?>». Что она делает, думаю, объяснять не надо :). Но не тут то было, господа! Скрипт админки выругался, что ему не хватает прав на запись в шаблон. «Вот ведь юзеры неграмотные, наставят гостевых, а про права забывают», выругался я и стал искать другое решение. Вторая догадка пришла сразу – скрипту передавался параметр с именем tpl_name, который имел значение, скажем error.php. Я попробовал модернизировать эту опцию, заменив ее на «../../../../../../../../../../etc/passwd» и мои размышления насчет программистов, пишущих админки, подтвердились. В поле для редактирования действительно появилось содержимое passwd. У меня появилась еще одна черная мысль – попробовать перезаписать PHP-файл. Только уже не шаблон гостевухи, а любой PHP-скрипт, на котором установлены соответствующие права. Для решения этой задачи мне было необходимо знать две переменных: первая из них – путь к домашнему каталогу пользователя (почему-то, относительные ссылки на файлы скриптом не принимались); вторая – собственно, сценарий, в который можно было бы записать какие-либо данные. У меня уже был путь к такому сценарию, он назывался config.php и находился в корне WWW-каталога, правда, я не знал какие права на нем установлены. Его я обнаружил простым сканированием на CGI-баги, которое проводил ранее. Путь к WWW-каталогу решено было найти обычным перебором.

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