суббота, 19 апреля 2008 г.

Нагибаем китайских барыг

Помню, что в детстве бабушка учила меня, что жадничать плохо. Я вырос, но бабушкины уроки нравственного воспитания не прошли для меня даром. Мой жизненный опыт показал, что бабушка была права – «скупой платит дважды».
Совсем недавно, в Рунете, с помпой прошла презентация нового школьного портала portal-school.ru. Жадные до откатов чиновники из Агентства образования вколотили в проект 15 лимонов деревянных и заказали его разработку девелоперам-гастрабайтерам. В итоге поисковая система образовательного портала выдавала исключительно порнуху на вполне невинные запросы типа «киски» и т.д. Случился большой скандал и теперь по идее, прокуратура и суд должны наказать виновных.
Но наша история будет про китайских барыг открывших сеть Интернет магазинов и торгующих мелкой электроникой от адаптеров и usb-приблуд до коммуникаторов. Так вот, эти барыги тоже решили сэкономить на торговой тележке и судя по всему обратились либо к местному китайскому php-кустарю, либо наняли девелоперов-гастрабайтеров, как и российские чиновники. В итоге жадность их и сгубила, с моей скромной помощью.
Все началось с банальной инъекции в параметре cat_id скрипта prod_list.php на одном из их сайтов: http://www.usbgeek.com/prod_list.php?cat_id=027
Долго промучившись с названием таблицы с реквизитами доступа к админке и так ее и не найдя, я решил заняться чтением файлов через функцию LOAD_FILE, благо такая возможность была. Но кроме /etc/passwd и /etc/host, ничего интересного выудить не удалось. Найдя /etc/httpd.conf, я выяснил, что вся нужная мне инфа лежит здесь /etc/httpd/conf/httpd.conf, но прав на чтение у меня не было. Та же проблема была и с .bash_history в юзерских директориях. Оставалось брутить хеши из mysql.user, что я и стал делать.
На следующий день хеши так и не были сбручены, поэтому я решил пробовать другие способы, пока идет подбор. Выполнив reverse IP, я получил список из нескольких сайтов, которые так же оказались Интернет магазинами с тем же инжектом в том же скрипте торговой тележки. Но здесь меня ждала маленькая удача, если на www.usbgeek.com мне так и не удалось найти админку, то на http://www.gizgeek.com/ она оказалась не запороленной. Админка, почему то, оказалось от Oscommerce, и это было уже что-то. Помня, что в админке Oscommerce есть замечательная вещь TOOLS_FILES, позволяющая не только читать файлы и перемещаться по каталогам, но и редактировать php-скрипты. К сожалению ни просматривать файлы и каталоги, ни редактировать скрипты я не мог, TOOLS_FILES не функционировал. Я смог увидеть только список файлов и каталогов корня сайта и еще путь до него: /var/www/html/GizGeek/. Но и этого мне было уже достаточно. С помощью функции LOAD_FILE мне удалось прочесть исходники php-скриптов торговой тележки и найти реквизиты доступа к базе:
$DB->dbhost = "localhost";
$DB->dbname = "gizgeek";// Database name
$DB->dbuser = "leslie";// Database User ID
$DB->dbpass = "leslie123";// Database Password.
, что делало ненужным подбор одного из двух хешей. Я надеялся, что имеющийся у меня пароль подойдет к фтп или SSH, но меня ждал облом. Файрвол жестко резал все удаленные подключения к портам за исключением 80.
Но это был еще не конец. В списке выданным мне TOOLS_FILES была папка /adm/, которая и оказалась настоящей админкой. Но имеющийся у меня пароль и логин к ней не подошли. Тогда с помощью все той же функции LOAD_FILE я стал просматривать исходники скриптов админки. Первое что мне бросилось в глаза, так это то, что реквизиты доступа к базе хранились в в файле /lib/db_conf.inc и соответсвенно были доступны удаленному пользователю: http://www.gizgeek.com/lib/db_conf.inc
Та же самая история была в админках остальных шопов китайских барыг, пароли лежали в открытом доступе. Но, к сожалению, к админкам они не подходили.
Внимательно просмотрев исходный код скриптов админки, я увидел, что отсутствует фильтрация кавычки. Зайдя на страницу авторизации админки и поставив в поле Username значение ' or 1=1/*, я стал полноправным админом шопа. Оставалось залить шелл, и можно было начинать процедуру по дальнейшему захвату сервера. Шелл был залит через upload картинок в описании товара, пустая превьюшка сообщила мне местонахождение некорректно залитой картинки http://www.gizgeek.com/prod_img/durito.php, и вот я уже внутри.
Вот так поплатились за свою жадность китайские барыги, ведь правильно говорила моя бабушка: «скупой платит дважды». А заплатили бы нормальным кодерам и не были бы их шопы похожи на дуршлаг. А то ведь похачить их мог человек и с менее благородными помыслами, и тогда накрылся бы бизнес барыг пластмассовым китайским тазиком.

Спасибо durito