Ежедневно серфя инет я часто бессознательно проверяю некоторые из просматриваемых сайтов на ошибки. Если сервер выдает ошибку или начинает странно себя вести, то обычно я записываю урл в текстовый файл, чтобы потом, когда появиться время и желание, разобраться с этим поподробнее.
Иногда это приводит ко взлому сайта, иногда к обнаружению новой уязвимости, а часто – не приводит ни к чему, потому как ссылок иногда накапливается за день с десяток и более, и до многих просто не доходят руки. А бывает, что обнаружишь урл полугодовой давности о котором совсем позабыл. Так случилось и в этот раз. Просматривая свой трехмегабайтный текстовичек и пытаясь найти в нем ссылку на скуль-инъекцию в PostgreSQL на одном из сайтов, которую если мне не изменяет память туда заносил, я обнаружил урл одного Интернет-шопа с тележкой OsCommerce, которая была подвержена инъекции.
Проверив урл и выяснив, что бага еще жива, я решил разобраться с ней позже, так как моя память подсказывала, что в скрипте index.php тележки OsCommerce sql-инъекции вроде не находили. На всякий случай стал искать в гугле упоминания об уязвимости и понял, что не ошибся. Действительно, о наличии инъекции никаких упоминаний не было. Это и стало решающим фактором, ведь обнаружение неизвестной уязвимости в известном продукте сулило не только греющие душу упоминания о тебе в зарубежных и отечественных багтрагах, но и возможность нагнуть некоторое количество буржуинских шопов, тем более, что данная тележка позволяла хранить у себя картон с cvv, хотя и встречался он в ней не часто.
Быстро подобрав количество полей я столкнулся с проблемой вывода информации:
http://www.xackme.co.uk/catalog/index.php?cPath=122+union+select+1/*
Конечно, остановить это меня не могло, инъекция вслепую хоть и более трудоемкий процесс, но при наличии упорства и терпения она позволяет творить чудеса. Оставалось выяснить есть ли в шопе админка и соответственно админский аккаунт, потому как мой опыт общения с OsCommerce показывал, что не на всех шопах была админка. И как назло этот оказался из них. Необходимость в инъекции вслепую в данном случае отпадала.
Но меня в этот момент интересовала уже не столько сама скуль-инъекция, сколько версия тележки, подверженная ей. Мне хотелось заполучить исходники скриптов тележки! Найдя несколько версий в инете и изучив их, искомой инъекции я не обнаружил. Оставалось одно - взломать сервер и забрать исходники тележки.
Проведя reverse IP я выяснил, что там хостится еще десяток сайтов, все они оказались шопами с тележкой OsCommerce, все были подвержены инъекции, на всех отсутствовал вывод информации и админка. Но самое главное - все они, похоже, обращались к одной базе, так как оплата товара шла через http://www.xackme.co.uk.
И вот, просматривая инъекцию в одном из шопов, я обнаружил наконец-то вывод информации:
http://www.purrxakeptoys.com/buy/sexy-catalogue.php?Adult=189_228&erotic=7180+union+select+1,user()/*
В сообщении об ошибке, после параметра Id=. Это было уже кое-что. Я стразу бросился проверять возможность чтения информации из таблицы mysql.user, и на этот раз мне повезло:
http://www.purrxakepsextoys.com/buy/sexy-catalogue.php? Adult=189_228&erotic=7180+union+select+1,user+from+mysql.user/*
Выудив логин и хеш пароля я решил проверить возможность чтения файлов. Но если /etc/passwd я прочел без проблем, то найти httpd.conf мне так и не удалось, хотя я попробовал все мыслимые и немыслимые пути. Ну что же, придется искать веб-каталог со скриптами вслепую.
Зачарив путь к каталогу пользователя xackme взятый из /etc/passwd: xackme:x:1005:100::/home/xackme/auto_orders/:/bin/bash и добавив в конце /catalog/index.php я получил отворот поворот.
Попробовав поискать файл index.php по таким путям как:
/home/xackme/index.php
/home/xackme/www/index.php
/home/xackme/public_html/index.php
/home/xackme/html/index.php
но и это не принесло результата.
Тогда я вернулся к изучению /etc/passwd и при более подробном его анализе увидел строку:
wwwupdate:x:1006:100::/home/www-sites/:/bin/bash
Зачарив путь к файлу /home/www-sites/xackme/index.php и вставив в браузер запрос:
http://www.purrxakepsextoys.com/buy/sexy-catalogue.php?Adult=189_228& erotic=7180+union+select+1, LOAD_FILE(CHAR(47,104,111,109, 101,47,119,119,119,45,115,105,116,101,115,47,104,111, 110,111,117,114,47,105,110,100,101,120,46, 112,104,112,32)) /*
я получил в ответ пустую белую страницу в исходном коде которой я обнаружил исходный код скрипта index.php. Добавив к пути еще /catalog/ я получил исходники бажного скрипта, в котором, кстати, были прописаны и реквизиты доступа к базе данных:
$temp_link = mysql_connect('localhost', 'xackme', 'тут и них был пароль');
if ($temp_link) {
mysql_select_db("xackme_cat");
что делало не нужным брутфорс хеша.
К сожалению, бажная версия OsCommerce оказалась релизом семилетней давности:
/*
$Id: application_top.php,v 1.115 2001/05/12 19:53:50 dwatkins Exp $
The Exchange Project - Community Made Shopping!
http://www.theexchangeproject.org
Copyright (c) 2000,2001 The Exchange Project
Released under the GNU General Public License
*/
но тогда скуль-инъекцию почему-то никто не обнаружил. Но в качестве утешения у меня были реквизиты доступа к базе, которые дали мне доступ к шеллу. Залив в веб-каталог mysql-скрипт от Rst, я сдампил базу себе на винт, удалил скрипт и отправился спать.
Через пару дней я зашел на сайт и обнаружил, что админы отключили вывод сообщений об ошибках, хотя сама инъекция осталась и может эксплуатироваться в слепую. Зато пароль поменять они так и не догадались, так что в ближайшее время я загляну к ним еще раз для расширения своих неконституционных прав на их сервере…