Прош­лые отно­шения чем‑то похожи на ста­рый рек­ламный бан­нер в интерне­те. Ты уже дав­но его не замеча­ешь, про­лис­тыва­ешь стра­ницу не гля­дя, но где‑то в глу­бинах сай­та он про­дол­жает мигать тус­клой над­писью «Купи счастье», пока не при­ходит момент и ты вдруг не наводишь на него кур­сор мыши, что­бы звон­ко щел­кнуть ее левой кла­вишей. Кирилл щел­кнул. Толь­ко на этот раз «ссыл­ка» вела в глу­бины форума, где сре­ди ава­тарок и ник­ней­мов пря­тались чужие жиз­ни, а заод­но — нуж­ные ему кон­такты для свя­зи с той, что называ­ла себя WWWедь­мой.

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

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

На хос­те жило целых три домена, но два из них не резол­вилось, а тре­тий, как раз и при­над­лежав­ший форуму, имел под­домен с говоря­щим име­нем admin. Кирилл заг­лянул по это­му адре­су — стан­дар­тная фор­ма авто­риза­ции, скуч­ная до зубов­ного скре­жета. Белая стра­ница, поля для вво­да логина и пароля, кноп­ка Submit. На вся­кий слу­чай он вдум­чиво прос­мотрел HTML-код: тоже ничего инте­рес­ного, никаких скры­тых парамет­ров фор­ма на сер­вер не переда­вала, а вво­димые в нее зна­чения акку­рат­но филь­тро­вались. Шут­ки ради Кирилл наб­рал на кла­виату­ре «admin/admin», полюбо­вал­ся на ожи­даемое «Invalid Username or Password» и зак­рыл окош­ко. Здесь опре­делен­но тупик.

Ес­ли ты зна­ешь, на чем сто­ит зда­ние, всег­да лег­че най­ти, как его обру­шить: то ли кир­пичи рас­шатать, то ли осто­рож­но разоб­рать фун­дамент. Толь­ко вот форум ока­зал­ся выс­тро­ен на самопис­ном движ­ке — а зна­чит, ждать подар­ков в виде готовых уяз­вимос­тей было бес­смыс­ленно. Сде­лав еще один гло­ток осты­вающе­го кофе, Кирилл при­выч­но ныр­нул в сеть сквозь цепоч­ку прок­си. Нес­коль­ко минут — и у него появи­лась све­жесоз­данная учет­ка. Под ником без биог­рафии и исто­рии он при­нял­ся нетороп­ливо бро­дить по форум­ным зако­улкам, читая чужие перепал­ки и ленивые раз­мышле­ния о жиз­ни.

Нат­кнув­шись на один из пос­тов WWWедь­мы с ава­тар­кой в виде высунув­шего язык озор­ного котен­ка, Кирилл щел­кнул мышью на кар­тинке. Котенок показал язык уже во весь экран, в отдель­ном окош­ке без каких‑либо эле­мен­тов навига­ции, кро­ме стан­дар­тных кно­пок «зак­рыть‑свер­нуть», и он неволь­но усмехнул­ся. Пра­вой кноп­кой мыши Киря открыл кар­тинку в новом окне и взгля­нул на адрес. Пос­ле домена зна­чил­ся скрипт, которо­му в парамет­ре переда­вал­ся внут­ренний номер поль­зовате­ля: showpic.php?id=2082. Он машиналь­но при­писал к адре­су оди­нокую кавыч­ку, буд­то кинул камешек в колодец — и теперь ждал, донесет­ся ли в ответ эхо.

По экра­ну про­мель­кну­ли строч­ки:

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 BY не работа­ла, поэто­му приш­лось дей­ство­вать вруч­ную, методич­но под­бирая поля одно за дру­гим. Все­го их ока­залось две­над­цать, а таб­лица, в которой хра­нились дан­ные юзе­ров, носила незамыс­ловатое имя — members. Вот и еще одна малень­кая тре­щина в бетон­ной сте­не. Имен­но такие тре­щины дела­ют жизнь инте­рес­ной для тех, кто уме­ет их видеть сквозь тол­щу серой шту­катур­ки.

Те­перь пред­сто­яло подоб­рать име­на полей. Стан­дар­тные user, password и email не подош­ли, и Кирилл начал переби­рать вари­анты с раз­личны­ми пре­фик­сами и окон­чани­ями. Наконец уда­ча улыб­нулась ему. Поля, отве­чающие за пароли и поч­ту, носили име­на member_mail и member_password, толь­ко для име­ни учет­ной записи исполь­зовалось сов­сем непохо­жее на них username. Этих све­дений уже ока­залось дос­таточ­но, что­бы извлечь из базы самое цен­ное.

Он акку­рат­но сос­тавил SQL-зап­рос, объ­еди­няя нуж­ные поля в одну стро­ку, что­бы не приш­лось пры­гать по таб­лице, как тому котен­ку по кры­ше, а все важ­ные све­дения вып­лыли вмес­те и не потеря­лись в хаосе. Enter. Экран ожил и вып­люнул адрес элек­трон­ной поч­ты адми­на, соп­ровож­дающий­ся длин­ной пос­ледова­тель­ностью латин­ских сим­волов и цифр. Кирилл впол­голоса выругал­ся: пароль ока­зал­ся зашиф­рован с помощью MD5. Не смер­тель­но, конеч­но, но радость от пер­вого успе­ха куда‑то испа­рилась. Дверь в чужой дом чуть при­откры­лась, одна­ко само зда­ние все еще оста­валось неп­риступ­ным.

Пер­вое, что приш­ло на ум, — тот самый канад­ский дедик, который он уже исполь­зовал для взло­ма пароля от икс‑бай­тов­ско­го вай­фая. Кирилл быс­тро под­клю­чил­ся к сер­веру, при­выч­но про­верил ско­рость откли­ка и с облегче­нием выдох­нул: все работа­ло. Инс­тру­мент был надеж­ным, как авто­мат Калаш­никова, раз­ве что под­бор пароля по хешу может занять немалое вре­мя. Что ж, пус­кай заокеан­ская машина тру­дит­ся, а он тем вре­менем может занять­ся чем‑нибудь дру­гим.

Но­утбук тихо зашур­шал, и вен­тилятор на секун­ду рас­кру­тил­ся силь­нее. Что­бы успо­коить его, Кирилл зак­рыл лиш­нюю вклад­ку бра­узе­ра, и в этот самый момент нас­тупив­шую тишину нарушил тре­вож­ный треск двер­ного звон­ка. Кирилл неп­роиз­воль­но вздрог­нул: он не ждал гос­тей. Инте­рес­но, кого это при­нес­ло на ночь гля­дя? Соседа, решив­шего исполнить свое дав­нее обе­щание и обу­чить его шах­матным пре­муд­ростям?

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии