Любопытство не порок, а второе счастье…
я

 

Никогда не мог совладать с возникающим чувством любопытства при виде чего-то нового, добавим к этому редко подводящую меня интуицию, и вот мы имеем полный рецепт нового взлома.

Так было и на этот раз. Ползая по отечественным и забугорным sex-shop’ам в поисках какого-нибудь подарка для своей подружки, приятного для нее и заводящего меня, я наткнулся на немецкий BDSM-shop, на котором продавались неимоверные игровые костюмы в стиле «Истории О». Кто не в курсе ху-из-ху, тот срочно
пусть перетряхивает дедушкины чердаки и бабушкины сундуки в поисках книжки или фильма, и отложив просмотр очередного шедевра кинематографии «Мега-порно-факинг-крейзи-хорн», погружается наивный и чистый мир садомазохизма времен молодости наших родителей.

Тележкой магазина была XT-Commerce от www.xt-commerce.com
и как я понял являющаяся инвариантом OS-Commerce. Версию торговой тележки определить не удалось, так как по запросу http://BDSM-shop.de/shop/admin/index.php я был послан на какую-то неведомую страницу авторизации, хотя обычно OS-Commerce выдает страницу авторизации админ-панели с указанием версии. Но сама тележка меня особо не интересовала, так как по собственному опыту я знал, что если в OS-Commerce и встречался картон, так либо он был без cvv2, либо если cvv2 все таки присутствовал, то тогда card number был неполный, в общем, не понос, так кровавый понос.

Честно говоря, меня больше заинтересовал фотоальбом, и даже не столько
сами фотографии девок в костюмах BDSM, хотя их я тоже посмотрел, сколько
параметры скрипта:

http://BDSM-shop.de/gallerie/index.php?action=displayAlbum&displayAlbumName=set16

Что-то на уровне интуиции подсказывало мне, что с этой фотоальбомом не все в порядке. Как потом выяснилось, интуиция меня не подвела.

Повставляв в параметры скрипта index.php левые запросы и кавычки и ничего толкового не получив, я решил найти исходники данного альбома для подробного анализа и гугл мне в этом помог быстро. Это оказался Simple Photo Album от
www.gieson.com. Скачав обе версии и установив у себя на сервере, я стал изучать исходный код версии 2.5, решив что, скорее всего, используется именно она. Но оказалось, что я был не прав, версия 1.2 была более популярной, о чем мне опять же поведал гугл. Во 2.5 версии запросы выполняются иначе:

http://www.gieson.com/photos/best%20of/index.php?ss= off&action=displayBig&iteminfo=solo|10764_7554.jpg

Выяснив, что используется Simple Photo Album версии 1.2 я стал ковырять ее исходники.
Первое, что меня удивило, была возможность удаленного пользователя создавать директории фото альбома с произвольными именами по запросу:

http://localhost/spa/index.php?action=displayAlbum&displayAlbumName=111

в директории /home/durito/htdocs/spa/albums/ создавался альбом с именем 111.

Дальше было интересней. Файл с хешем пароля администратора при установке фото альбома создавался в директории /albums/ под именем pwd.txt и был доступен для чтения удаленному пользователю. Я тут же проверил это на фото альбоме шопа и получил хеш:

http://BDSM-shop.de/gallerie/albums/pwd.txt
o$PrK.TrRGCqg

Оставалось разобраться, как именно формируется хеш. Глянув в исходники и дополнительно проконсультировавшись со знакомым, я выяснил, что процесс формирования хеша несложен.

Сначала создается соль $salt = substr($pwdtry, 0, 1), т.е. просто берется первый символ пароля и уже потом, используя встроенную в php функцию crypt происходит формирование хеша $incomingpwd = crypt ($pwdtry, $salt). Понятно, что John in Ripper пролетает мимо, необходим другой софт для брута хеша.

Поручив знакомому php-кодеру написать бруталку хешей, я стал разбираться с Simple Photo Album дальше, ведь надежда на то, что админ ставит на все один и тот же пароль, была не большая.

Изучая далее фото альбом я выяснил, что админка Simple Photo Album позволяет загружать файлы, причем расширение загружаемых файлов не проверялось! К этому времени знакомый php-кодер уже написал простенький скрипт для подбора пароля по словарю:

<?php

# hash :
$h = ' o$PrK.TrRGCqg '; //
вставляем хеш

$fs = @fopen("world.txt", "r") or die ('Can\'t open file!'); //
указываем имя словаря

while (!feof($fs)) {
$s = fgets($fs, 255);

if (crypt($s, substr($s,0,1)) == $h) {
die ('Your pass is '.$s);
}

}

fclose($fs);

?>

Для работы скрипта требуется внести несколько изменений в httpd.conf (увеличиваем Timeout до 180000) и
php.ini - ищем и меняем значения по умолчанию на наши

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 180000 ; Maximum execution time of each script, in seconds
max_input_time = 180000 ; Maximum amount of time each script may spend parsing request data
memory_limit = 200M ; Maximum amount of memory a script may consume (8MB)

Конечно, можно было написать более серьезный скрипт с возможностью посимвольного перебора, который бы подгружал файл с хешами и сохранял результаты в другой файл, добавить в него set_time_limit(0);, чтобы не возиться с httpd.conf и php.ini (все это было реализовано в следующей версии), но было дорого время, поэтому для начала я ограничился этим нехитрым php-скриптом для подбора хеша.

Достав свой 80 mb словарь я запустил php-скрипт для подбора хеша и продолжил изучение фотоальбома, потому как внутренний голос шептал мне, что приятные сюрпризы еще впереди.

Просматривая далее исходники Simple Photo Album v.1.2 я встретил интересный параметр: action=editAlbum&displayAlbumName=111.
Выполнив его у себя я получил окошко upload’a файлов в обход авторизации админ-панели. Повторив запрос в фотоальбоме магазина, я получил тот же результат, и не долго думая, залил свой веб-шелл.
Но по запросу http://BDSM-shop.de/gallerie/albums/images/durito.php я получил полный облом. Simple Photo Album выдавал сообщение, что файл успешно загружен, но найти его я не мог. Пришлось снова разбираться с фотоальбомом на своем сервере. И тогда я понял, в чем проблема. При закачке файлов в Simple Photo Album v.1.2 к имени закачиваемого файла добавляются цифры, то есть если я закачиваю в новый фотоальбом файл durito.php то он сохраняется в папке images под именем 000durito.php, если же в фотоальбоме уже есть фотографии, то файлу присваивается следующий номер, после номера предыдущего закачанного файла. Поэтому, я посмотрел на имя последней фотографии в фотоальбоме, оно носило имя 04040.jpg, и запрос http://BDSM-shop.de/gallerie/albums/images/041durito.php вернул мне окно авторизации моего веб-шелла. Уже через минуту я просматривал содержимое базы магазина, конечно кредиток там не оказалось, но зато мне в руки попали данные о более чем 2000 немецких поклонников BDSM и самое главное, у меня была лазейка для дальнейшего проникновения и расширения своих полномочий на этом сервере и еще двух-трех десятков других.

Оставить мнение