Сегодня Кирилл вернулся из «Синего экрана», когда за окном уже сгущалась вечерняя тьма. В квартире пахло пылью и вчерашним ужином — запахи, которые ты перестаешь замечать, если живешь с ними слишком долго. Он поставил турку на плиту, машинально засыпал ложку дешевого «Жокея» — и через минуту едва не пропустил момент, когда кофе решил устроить побег. Спасая алюминиевую посудину от черной пены, Кирилл подумал, что все это очень символично: даже кофе стремится к свободе.

Он перелил кофе в кружку, опустился в любимое продавленное кресло, которое именно поэтому стало таким удобным, и включил ноутбук. Сначала — разведка. Всегда так: прежде чем лезть в чужой дом, лучше заранее посмотреть, сколько у него дверей, окон и насколько зубастая собака бегает во дворе. Кирилл открыл браузер, привычно вбил адрес domainsdb., сделал глоток кофе и поморщился — слишком горький, но именно такой ему и нравился больше всего.
На хосте жило целых три домена, но два из них не резолвилось, а третий, как раз и принадлежавший форуму, имел поддомен с говорящим именем admin. Кирилл заглянул по этому адресу — стандартная форма авторизации, скучная до зубовного скрежета. Белая страница, поля для ввода логина и пароля, кнопка Submit. На всякий случай он вдумчиво просмотрел HTML-код: тоже ничего интересного, никаких скрытых параметров форма на сервер не передавала, а вводимые в нее значения аккуратно фильтровались. Шутки ради Кирилл набрал на клавиатуре «admin/admin», полюбовался на ожидаемое «Invalid Username or Password» и закрыл окошко. Здесь определенно тупик.
Если ты знаешь, на чем стоит здание, всегда легче найти, как его обрушить: то ли кирпичи расшатать, то ли осторожно разобрать фундамент. Только вот форум оказался выстроен на самописном движке — а значит, ждать подарков в виде готовых уязвимостей было бессмысленно. Сделав еще один глоток остывающего кофе, Кирилл привычно нырнул в сеть сквозь цепочку прокси. Несколько минут — и у него появилась свежесозданная учетка. Под ником без биографии и истории он принялся неторопливо бродить по форумным закоулкам, читая чужие перепалки и ленивые размышления о жизни.
Наткнувшись на один из постов WWWедьмы с аватаркой в виде высунувшего язык озорного котенка, Кирилл щелкнул мышью на картинке. Котенок показал язык уже во весь экран, в отдельном окошке без каких‑либо элементов навигации, кроме стандартных кнопок «закрыть‑свернуть», и он невольно усмехнулся. Правой кнопкой мыши Киря открыл картинку в новом окне и взглянул на адрес. После домена значился скрипт, которому в параметре передавался внутренний номер пользователя: showpic.. Он машинально приписал к адресу одинокую кавычку, будто кинул камешек в колодец — и теперь ждал, донесется ли в ответ эхо.
По экрану промелькнули строчки:
Warning: mysql_fetch_array(): supplied
argument is not a valid MySQL
result resource
in /home/www/mboard/public_html/showpic.php on line 72
После этого его перебросило обратно на главную страницу форума, как ни в чем не бывало. В комнате стало тихо, слышалось лишь приглушенное бормотание телевизора где‑то за стеной. Кирилл откинулся на спинку кресла, отпил еще один глоток и почувствовал легкое возбуждение — то самое, которое возникает, когда находишь первую трещину в монолитной стене. Код пишут люди, а людям свойственно ошибаться — самописные движки тем и хороши, что программисты редко думают, будто кто‑то станет копать чуть глубже, чем надо. Он на секунду закрыл глаза, прислушался к себе. В такие моменты все вокруг будто растворяется — остается только тускло светящийся монитор, курсор и ты. Реальность сужается до мигающих пикселей и байтов данных, бегущих по проводам.
Кирилл снова сосредоточился на экране. На этот раз цель была ясна: выяснить, сколько полей в таблице, и понять, какие из них можно использовать, чтобы вытащить информацию наружу. Он строил свои запросы к базе, как шахматист изучает ходы противника. Конструкция ORDER не работала, поэтому пришлось действовать вручную, методично подбирая поля одно за другим. Всего их оказалось двенадцать, а таблица, в которой хранились данные юзеров, носила незамысловатое имя — members. Вот и еще одна маленькая трещина в бетонной стене. Именно такие трещины делают жизнь интересной для тех, кто умеет их видеть сквозь толщу серой штукатурки.
Теперь предстояло подобрать имена полей. Стандартные user, password и email не подошли, и Кирилл начал перебирать варианты с различными префиксами и окончаниями. Наконец удача улыбнулась ему. Поля, отвечающие за пароли и почту, носили имена member_mail и member_password, только для имени учетной записи использовалось совсем непохожее на них username. Этих сведений уже оказалось достаточно, чтобы извлечь из базы самое ценное.
Он аккуратно составил SQL-запрос, объединяя нужные поля в одну строку, чтобы не пришлось прыгать по таблице, как тому котенку по крыше, а все важные сведения выплыли вместе и не потерялись в хаосе. Enter. Экран ожил и выплюнул адрес электронной почты админа, сопровождающийся длинной последовательностью латинских символов и цифр. Кирилл вполголоса выругался: пароль оказался зашифрован с помощью MD5. Не смертельно, конечно, но радость от первого успеха куда‑то испарилась. Дверь в чужой дом чуть приоткрылась, однако само здание все еще оставалось неприступным.
Первое, что пришло на ум, — тот самый канадский дедик, который он уже использовал для взлома пароля от икс‑байтовского вайфая. Кирилл быстро подключился к серверу, привычно проверил скорость отклика и с облегчением выдохнул: все работало. Инструмент был надежным, как автомат Калашникова, разве что подбор пароля по хешу может занять немалое время. Что ж, пускай заокеанская машина трудится, а он тем временем может заняться чем‑нибудь другим.
Ноутбук тихо зашуршал, и вентилятор на секунду раскрутился сильнее. Чтобы успокоить его, Кирилл закрыл лишнюю вкладку браузера, и в этот самый момент наступившую тишину нарушил тревожный треск дверного звонка. Кирилл непроизвольно вздрогнул: он не ждал гостей. Интересно, кого это принесло на ночь глядя? Соседа, решившего исполнить свое давнее обещание и обучить его шахматным премудростям?
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»

