Красиво жить не запретишь Стройков Леонид aka Roid Хакер, номер #093, стр. 093-086-1 (r0id@mail.ru) Атака на онлайн-обменник Intro Когда бродишь по раскрученным хак-форумам, то и дело натыкаешься на объявления типа: «Продам базу обменника за 10k». Возникает вопрос: откуда берутся такие базы? Очевидно, что добро было выведено после громкого взлома. И не факт, что админы закрыли баг, через который поимели буржуйскую систему. Подобный топик я узрел на одной, известной узкому кругу, борде. Какие-то чуваки продавали базу с онлайн-обменника eForexGold (www.e-forexgold.com). Просмотрев по диагонали пост, я решил самостоятельно взглянуть на данный ресурс. У меня была надежда, что уязвимость все еще присутствует, а следовательно, появлялась возможность заполучить базу на халяву. Первый осмотр Вбив в адресной строке браузера www.e-forexgold.com, я оказался на сайте обменника. В верхней части страницы находилось меню. Мое внимание сразу привлекли такие разделы, как buy, sell, exchange rate, debit cards, gold merchant. Просмотрев информацию, предоставленную на сайте, я обнаружил, что, кроме различных платежных систем, включая e-gold, обменник работает и с WebMoney. Сей факт почему-то вызвал улыбку на моем лице. Ну что же, настало время «протестировать» пациента ;). Изучив движок сайта, я понял, что расчитывать на инклуд или прочий режущий глаза баг - бесполезно. На ресурсах подобного уровня админы, как правило, заслуженно получают свою зарплату. Ради интереса я решил проверить наличие веб-директории /admin. Оказалось, что она действительно существовала по адресу: https://www.e-forexgold.com/admin/, но для входа требовался логин и пароль, которых у меня, естественно, не было. Тогда я начал осматривать разделы меню. Наиболее значимым мне показался пунктик xtransxpress. Я нажал на ссылку, и передо мной предстала форма входа в личный кабинет аккаунта. Тестирование скрипта авторизации показало, что он был написан достаточно грамотно: входящие данные фильтровались и не отображались в браузере. Аналогично дело обстояло еще с несколькими разделами. Я уже стал подумывать о том, что админ самостоятельно пропатчил движок, либо я работаю в неправильном направлении, но вдруг мне на глаза попался ничем не приметный раздел gold merchant. В нем присутствовал скрипт default.php, который использовал значение параметра categoryid. В общем виде линк выглядел так: https://www.e-forexgold.com/member_directory/default.php?categoryid=1 Я предположил, что происходит выборка данных из БД, и оказался прав. Подставив символ кавычки ' в значение параметра categoryid, я передал следующий запрос: https://www.e-forexgold.com/member_directory/default.php?categoryid=1' И сразу же получил в ответ сообщение об ошибке: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\' ORDER BY name' at line 1 Вот оно! Тривиальная SQL-injection все-таки присутствовала, и это не могло не радовать. Оставалось лишь грамотно раскрутить найденный баг, что я и сделал. В недрах БД В сети можно найти огромное количество материала по sql-injection (да и мы не раз писали об этом), поэтому я не стану объяснять основы данного ремесла, а перейду сразу к эксплуатации обнаруженной уязвимости. Первое, что меня интересовало, - мои права, а точнее права моего юзера в базе. Как известно, доступ к mysql.user имеет только определенный круг пользователей, указанный рутом. Для того чтобы проверить привилегии своего юзера, я сформировал запрос вида: |