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

Он перелил кофе в кружку, опустился в любимое продавленное кресло, которое именно поэтому стало таким удобным, и включил ноутбук. Сначала — разведка. Всегда так: прежде чем лезть в чужой дом, лучше заранее посмотреть, сколько у него дверей, окон и насколько зубастая собака бегает во дворе. Кирилл открыл браузер, привычно вбил адрес 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. Не смертельно, конечно, но радость от первого успеха куда‑то испарилась. Дверь в чужой дом чуть приоткрылась, однако само здание все еще оставалось неприступным.
Первое, что пришло на ум, — тот самый канадский дедик, который он уже использовал для взлома пароля от икс‑байтовского вайфая. Кирилл быстро подключился к серверу, привычно проверил скорость отклика и с облегчением выдохнул: все работало. Инструмент был надежным, как автомат Калашникова, разве что подбор пароля по хешу может занять немалое время. Что ж, пускай заокеанская машина трудится, а он тем временем может заняться чем‑нибудь другим.
Ноутбук тихо зашуршал, и вентилятор на секунду раскрутился сильнее. Чтобы успокоить его, Кирилл закрыл лишнюю вкладку браузера, и в этот самый момент наступившую тишину нарушил тревожный треск дверного звонка. Кирилл непроизвольно вздрогнул: он не ждал гостей. Интересно, кого это принесло на ночь глядя? Соседа, решившего исполнить свое давнее обещание и обучить его шахматным премудростям?
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
