Потребительская корзина хакеров

Xakep, номер #037, стр. 037-056-3


Частота использования:

Если ты найдешь такой, то тебе крупно повезло. (1)

[ CatalogMgr.pl ]

Полное название:

VirtualCart Shopping Cart

Диагноз:

Чтение любого файла на сервере.

Эксплоит:

www.niggers.org/cgi-bin/CatalogMgr.pl?cartID=www.niggers.org&template=CatalogMgr.pl

Описание:

Чтение любого файла с диска? Нет, не только. Если ты читал мой перевод статьи rfp про уязвимости CGI (www.megazine.ru/sec), то наверняка уже понял, о чем будет сейчас идти речь. Скрипт повсеместно и со всех аргументов отфильтровывает символы '|' и '/' (ну, насколько я понял из запутанного исходника, который стоит всего $199 долларов :), а изъял я его в одном онлайн-магазине абсолютно бесплатно), но не отфильтровывает обратный апостроф `, который, в свою очередь, тоже позволяет исполнять команды. Т.е. мы можем немного помучить такую вещь, как `perl -e 'print "\x(КОД ТРЕБУЕМОГО СИМВОЛА В ТАБЛИЦЕ ASCII)"x1'`, и получить как раз тот символ, который скрипт так старательно отфильтровывал. Хочу сказать, что если ты подставишь в уязвимый урл выражение `perl -e 'print "\x(КОД ТРЕБУЕМОГО СИМВОЛА В ТАБЛИЦЕ ASCII)"x1'`и больше ничего, то ничего работать не будет, так как команда, заключенная в обратные апострофы, исполняется, а ее вывод (то есть то, что появится после выполнения этой команды, например, на терминале) подставится в исходную команду. Например, `perl -e 'print "ls"x1'` покажет тебе листинг текущего каталога. Я думаю, для тебя будет не сложно соорудить выражение, которое будет открывать, например, файл "ls -l /etc|", а на самом деле делать листинг директории /etc.

Частота использования: Достаточно часто (3.5)

[ web_store.cgi ]

Полное название:

Extropia WebStore 2.0 и ниже

Диагноз:

Чтение любого файла с диска.

Эксплоит:

www.niggers.org/cgi-bin/Web_store/web_store.cgi?page=../../../../../../winnt/repair/sam%00.html

www.niggers.org/cgi-bin/Web_store/web_store_log_analysis.cgi (этот скрипт тебе на домашнее задание, ибо в нем глюки тоже есть, и что самое немаловажное, этот скрипт очень маленький и с комментариями)

Описание:

Посмотрим внимательно на этот кусок кода:

$page =~ /([\w\-\=\+\/]+)\.(\w+)/;

$page = "$1.$2"; # Лепим имя файла с расширением

$page = "" if ($page eq ".");

$page =~ s/^\/+//; # Выбиваем символы / в начале строки (на фиг?)

Особенно меня тут заинтересовала строка номер 4. Я долго думал, зачем она нужна, ведь путного она ничего не делает (зачем убивать все символы / В НАЧАЛЕ строки?). Дальше никаких проверок переменной $page я не обнаружил. Но чуть поодаль эта переменная запихивается в функцию &display_page:

open (PAGE, "<$page") ||

&file_open_error("$page", "$routine", $file, $line);

Видишь <$page ??? Всякие | ушли в отстой, так как работать в данном случае они не могут.

Частота использования: Достаточно таких (3)

Канэц

Я думаю, на первый раз тебе этих корзинок вполне хватит. Ничего тут сложного нету, нужно лишь уметь шевелить одинокой извилиной, и все получится. Надо лишь немного везения и смекалки, и горы свопов всякой полезной информации у тебя на ладони :), а точнее на винчестере. Потом не забудь проверить эту информацию на www.micked.com (когда зайдешь туда, то поймешь, какую информацию я имею ввиду), а главное - поделиться СО МНОЙ :).

Назад на стр. 037-056-2  Содержание  Вперед на стр. 037-056-4