Хакер - Like a pro. Используем OSINT и цепочки атак в OWASP Juice Shop

Хакер - Like a pro. Используем OSINT и цепочки атак в OWASP Juice Shop

hacker_frei

https://t.me/hacker_frei

Евгений Грязнов 

Содержание статьи

  • Увлекательный OSINT
  • Visual Geo Stalking
  • Meta Geo Stalking
  • Login MC SafeSearch
  • Цепочки атак
  • Скачиваем недоступные файлы
  • Пасхалка от разработчиков
  • Скачиваем всю базу данных
  • Подделываем токены JWT
  • Погружаемся в дебри кода
  • Подделка кода купона
  • Выводы

Се­год­ня мы будем искать ключ к паролям на фото, вытас­кивать скры­тые метадан­ные, внед­рять SQL-инъ­екции и изу­чать мно­гохо­довые ата­ки. Про­дол­жим раз­бирать­ся с задач­ками OWASP и пол­ностью взло­маем интернет‑магазин Juice Shop, спе­циаль­но соз­данный для тес­тирова­ния уяз­вимос­тей и отта­чива­ния хакер­ско­го мас­терс­тва.

В моей прош­лой статье на ту же тему я поз­накомил тебя с очень уяз­вимым интернет‑магази­ном Juice Shop. Мы получи­ли в нем пра­ва адми­на раз­ными спо­соба­ми и добыли себе бес­плат­ный Deluxe. Приш­ло вре­мя как сле­дует пог­рузить­ся внутрь это­го дыряво­го при­ложе­ния и показать, кто здесь на самом деле эксперт! В этой статье я исполь­зую вер­сию Juice Shop 12.8.1. Если твоя вер­сия отли­чает­ся, самое вре­мя пой­ти и об­новить ее.

УВЛЕКАТЕЛЬНЫЙ OSINT

Не­боль­шая раз­минка перед серь­езны­ми задача­ми, которая поможет про­качать англий­ский и получить при этом удо­воль­ствие. Наде­юсь, ты уже зна­ешь, что такое OSINT.

INFO

Под­робнее об OSINT ты можешь про­честь в стать­ях «Бо­евой OSINT. Раз­бира­ем сов­ремен­ные методы сетевой раз­ведки» и «OSINT по‑рус­ски. Выбира­ем мощ­ные и бес­плат­ные сер­висы для про­бива и кон­курен­тной раз­ведки». Отдель­но очень рекомен­дую тебе док­лад с пос­ледне­го PHDays 2021 «Ду­мать — это при­коль­но. 20 прак­тичес­ких при­емов OSINT в циф­ровом мире».

На дос­ке с тво­ими успе­хами в Juice Shop есть спе­циаль­ный тег OSINT. Задачи с этим тегом и будут нас инте­ресо­вать в этом раз­деле.

  1. Visual Geo Stalking.
  2. Meta Geo Stalking.
  3. Login MC SafeSearch.

За­дачек на OSINT там гораз­до боль­ше, но эти поз­волят тебе отто­чить базовые навыки и с их исполь­зовани­ем уже решить оставши­еся!

Visual Geo Stalking

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

Company you first work for as an adult

Как видишь, для решения этой задачи нам нуж­но най­ти наз­вание ком­пании, где рань­ше работа­ла Эмма. Задача кажет­ся слиш­ком слож­ной, но вспом­ни: на сай­те же есть раз­дел Photo Wall c фотог­рафи­ями сот­рудни­ков! На пос­ледней фотог­рафии ты най­дешь белый дом и уди­витель­но похожий на имя Эмма ник­нейм. Самое вре­мя ска­чать эту фотог­рафию и при­менить к ней свои ана­лити­чес­кие навыки.

Что мож­но поп­робовать сде­лать с этой фотог­рафи­ей:

  1. По­искать ее в сер­висах вро­де Google Images. Может ока­зать­ся, что это извес­тное зда­ние и есть спи­сок рас­положен­ных в нем ком­паний.
  2. Про­верить метадан­ные изоб­ражения. Час­то внут­ри фотог­рафии мож­но обна­ружить GPS-коор­динаты мес­та и най­ти спи­сок ком­паний, которые арен­дуют в нем офи­сы.
  3. Вни­матель­но рас­смот­реть фотог­рафию и поис­кать на ней под­сказ­ки вро­де таб­лички с номером дома.

В слу­чае Эммы пер­вые два вари­анта не дадут никако­го резуль­тата, но я очень рекомен­дую про­верить это самос­тоятель­но! Раз­работ­чики иног­да меня­ют задания и добав­ляют новые пас­халки.

Я же пред­лагаю открыть изоб­ражение в хорошем редак­торе с воз­можностью боль­шого уве­личе­ния и вни­матель­но изу­чить его. На одном из окон ты най­дешь пла­кат.

Пла­кат ком­пании

Как видишь, ком­пания явно свя­зана с безопас­ностью в IT, но ее точ­ного наз­вания мы не зна­ем, поэто­му при­дет­ся переб­рать раз­ные вари­анты. Пред­лагаю взять скрипт под­бора отве­та из пре­дыду­щей статьи, тем более что он нам еще при­годит­ся.

import requests

answers = ['IT Security','IT Sec','ITsec','ITSEC', 'itsec']

for answer in answers:

data = {'email':'emma@juice-sh.op','answer':answer,'new':'111111','repeat':'111111'}

r = requests.post('http://localhost:3000/rest/user/reset-password',json=data)

if r.status_code == 200:

print("Password changed! Answer: ", answer)

break

print("That's all... ")

За­пус­каем и узна­ем решение задачи с Эммой!

Meta Geo Stalking

На­деюсь, тебе пон­равилось искать скры­тую информа­цию. Эта задача будет нес­коль­ко слож­нее пре­дыду­щей. Тебе нуж­но уга­дать ответ на сек­ретный воп­рос Джо­на:

What’s your favorite place to go hiking?

То есть «Назови твое любимое мес­то для пеших походов». В раз­деле Photo Wall тебя ждет очень информа­тив­ное фото с осве­жающим ста­каном сока. Ска­чай его и поп­робуй прой­тись по спис­ку из задачи с Эммой.

Су­щес­тву­ет нес­коль­ко вари­антов пос­мотреть метадан­ные изоб­ражения, я рекомен­дую Jeffrey’s Image Metadata Viewer. Заг­рузи туда изоб­ражение и вни­матель­но изу­чи его дан­ные.

Ме­тадан­ные

Как видишь, тут есть коор­динаты мес­та! Открой их в любимом сер­висе, я обыч­но исполь­зую для это­го Google Maps.

Кар­та реги­она

Те­перь нуж­но поп­робовать подоб­рать пра­виль­ное наз­вание мес­та. Вни­матель­но изу­чи кар­ту, и можешь исполь­зовать скрипт для сбро­са пароля из пре­дыду­щей задачи.

import requests

answers = ['Scuttlehole Trailhead','Rockcastle Campground','Dutch Branch','Laurel County']

for answer in answers:

data = {'email':'john@juice-sh.op','answer':answer,'new':'111111','repeat':'111111'}

r = requests.post('http://localhost:3000/rest/user/reset-password',json=data)

if r.status_code == 200:

print("Password changed! Answer: ", answer)

break

print("That's all... ")

К сожале­нию, все эти вари­анты не дали резуль­тата. We need to go deeper! Поп­робу­ем поис­кать более под­робную информа­цию о Scuttlehole Trailhead.

Сайт наци­ональ­ного пар­ка

На этой стра­нице уже дос­таточ­но геог­рафичес­ких наз­ваний, которые Джон мог исполь­зовать в качес­тве фра­зы для сбро­са пароля. Я оставлю это решение тебе в качес­тве домаш­него задания. Если зас­тря­нешь, спра­шивай в ком­мента­риях, и я дам под­сказ­ку!

Login MC SafeSearch

Я наде­юсь, ты уже дос­таточ­но раз­мялся для это­го задания. Здесь у тебя уже нет никаких под­ска­зок. Навер­няка ты задал­ся воп­росом, а кто вооб­ще такой этот MC SafeSearch? Приш­ло вре­мя про­бить его в интерне­те!

К сожале­нию, боль­шая часть ссы­лок будет решени­ем этой задачи, но это же не наш метод! Поэто­му я дам тебе пря­мую ссыл­ку на вот такое отличное видео: Protect Ya Passwordz. Тут при­годит­ся зна­ние англий­ско­го. В этом задании не нуж­но исполь­зовать механизм вос­ста­нов­ления пароля, пос­коль­ку MC сам рас­ска­зал тебе свой пароль в пес­не, нуж­но прос­то вни­матель­но прос­лушать ее нес­коль­ко раз и обра­тить вни­мание на его логин и — вне­зап­но — клич­ку любимой собаки. Что­бы тебе было про­ще, есть пол­ный текст пес­ни.

Я дам тебе пару под­ска­зок: логин будет mc.safesearch@juice-sh.op, а собаку зовут Mr. Noodles. Одна­ко он опыт­ный поль­зователь, поэто­му сде­лал некото­рую замену в име­ни собаки, о чем тоже радос­тно про­пел в пес­не. Тут под­сказ­ки закан­чива­ются, даль­ше сам! 

ЦЕПОЧКИ АТАК

В Juice Shop мно­гие задания тре­буют решения некото­рых пре­дыду­щих. Поэто­му сей­час мы с тобой поп­робу­ем решить задач­ку с пас­халкой, а заод­но научим­ся обхо­дить защиту фай­лов от ска­чива­ния и под­берем себе мно­го инте­рес­ной информа­ции для даль­нейших атак и заданий.

WARNING

Да­же не думай исполь­зовать подоб­ные тех­ники в реаль­ных интернет‑магази­нах! Это уго­лов­но наказу­емо, если, конеч­но, у тебя нет под­писан­ного догово­ра на про­веде­ние пен­теста. Если очень хочет­ся поп­ракти­ковать­ся и поис­кать реаль­ные ошиб­ки в при­ложе­ниях, регис­три­руй­ся на спе­циаль­ных плат­формах — нап­ример, на HackerOne или BugCrowd.

Скачиваем недоступные файлы

Я всег­да рекомен­дую не забывать поис­кать скры­тые дирек­тории на сай­тах. Сде­лать это мож­но при помощи ути­литы dirb.

dirb http://localhost:3000

Най­ден­ные дирек­тории

За­метил очень инте­рес­ную дирек­торию ftp? Если ты вни­матель­но пос­мотришь внутрь robots.txt, то убе­дишь­ся, что мы прос­то обя­заны ее посетить.

Ин­терес­ные фай­лы на FTP

Как видишь, тут очень мно­го инте­рес­ного! Одна­ко сто­ит начать ска­чивать фай­лы, как ты узна­ешь, что раз­решено это делать, толь­ко если они име­ют рас­ширение .md или .pdf. Тем не менее эти фай­лы очень нуж­ны нам для выпол­нения сле­дующих заданий. Поэто­му при­дет­ся пой­ти в Google и най­ти там мно­жес­тво ста­тей о тех­никах обхо­да филь­тров по рас­ширению фай­ла. Мне, нап­ример, приг­лянул­ся спи­сок на сай­те HackTricks.

Од­на из тех­ник называ­ется null byte и зак­люча­ется в добав­лении к име­ни ска­чива­емо­го фай­ла спе­циаль­ного «нулево­го бай­та» — %00. Нап­ример, мож­но зап­росить файл вот так:

http://localhost:3000/ftp/eastere.gg%00.md

Не забывай толь­ко, что такой URL содер­жит зап­рещен­ные сим­волы и дол­жен быть спе­циаль­ным спо­собом закоди­рован перед исполь­зовани­ем. Для это­го сущес­тву­ет огромное количес­тво сер­висов, можешь исполь­зовать, нап­ример, CyberChef (мы о нем как‑то писали).

Ска­чай теперь все фай­лы в пап­ке FTP, и давай отпра­вим­ся искать пас­халку!

Пасхалка от разработчиков

Од­но из заданий на четыре звез­дочки называ­ется Find the hidden easter egg. Для его решения нам понадо­бит­ся содер­жимое фай­ла eastere.gg.

Внут­ри фай­ла ты най­дешь шут­ливое поз­драв­ление от раз­работ­чиков и инте­рес­ную строч­ку:

ci9xcmlmL25lci9mYi9zaGFhbC9ndXJsL3V2cS9uYS9ybmZncmUvcnR0L2p2Z3V2YS9ndXIvcm5mZ3JlL3J0dA==

В ней лег­ко уга­дыва­ется кодиров­ка Base64, поэто­му вос­поль­зуйся любым под­ходящим инс­тру­мен­том (нап­ример, тем же CyberChef) и прев­рати это в осмыслен­ный текст.

Вот как выг­лядит резуль­тат:

/gur/qrif/ner/fb/shaal/gurl/uvq/na/rnfgre/rtt/jvguva/gur/rnfgre/rtt

Как видишь, он не отли­чает­ся осмыслен­ностью. Мож­но поп­робовать добавить его к http://localhost:3000, но в ответ нас ждет пус­тота. Эта строч­ка явно тре­бует даль­нейше­го декоди­рова­ния.

Для работы с неиз­вес­тны­ми шиф­рами я обыч­но исполь­зую Cipher Identifier на dcode.fr. Передай в него нашу стро­ку и най­ди шифр.

Это ока­зал­ся очень извес­тный ROT 13! Можешь декоди­ровать его на том же сай­те и нас­ладить­ся пас­халкой. Кста­ти, решая это задание, мы заод­но прош­ли два дру­гих!

Скачиваем всю базу данных

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

Нап­ример, решить задание Exfiltrate the entire DB schema definition via SQL Injection. Для это­го нам нуж­но перей­ти в любой раз­дел, где воз­можна инъ­екция. В Juice Shop это раз­дел поис­ка товаров. Здесь я для удобс­тва вос­поль­зуюсь sqlmap, но ты можешь поп­робовать най­ти и исполь­зовать инъ­екцию вруч­ную, пос­коль­ку на дос­ке с задани­ями есть при­мер уяз­вимого кода.

Од­нако нап­рямую задача не реша­ется. Если ты поп­робу­ешь выпол­нить вот такую коман­ду, то успе­ха не добь­ешься:

sqlmap -url="http://localhost:3000/search?q=1

Де­ло в том, что все опас­ные сим­волы филь­тру­ются на уров­не фрон­тенда, что час­то быва­ет в подоб­ных при­ложе­ниях. Зна­чит, нуж­но запус­тить Burp и най­ти, какой адрес в дей­стви­тель­нос­ти вызыва­ется для поис­ка товаров. Если ты вни­матель­но пос­мотришь на зап­росы, то обна­ружишь инте­рес­ный зап­рос к REST API:

/rest/products/search?q=apple

Да­вай вос­поль­зуем­ся эти­ми новыми дан­ными и поп­робу­ем еще раз.

sqlmap -url="http://localhost:3000/rest/products/search?q=apple

Этот вари­ант работа­ет! Теперь добавь нуж­ные парамет­ры, и вся база дан­ных в тво­их руках.

sqlmap -url="http://localhost:3000/rest/products/search?q=apple" -T Users --dump --threads=10

Вот эта коман­да поз­волит получить тебе всю базу дан­ных поль­зовате­лей и хеши их паролей.

Дамп таб­лицы Users

Подделываем токены JWT

В пре­дыду­щей статье мы уже стал­кивались с JWT — смот­ри раз­дел «Откры­ваем админку»).

На дос­ке задач есть два задания, свя­зан­ных с под­делкой JWT:

  • Forge an essentially unsigned JWT token that impersonates the (non-existing) user jwtn3d@juice-sh.op
  • Forge an almost properly RSA-signed JWT token that impersonates the (non-existing) user rsa_lord@juice-sh.op

Пос­коль­ку у нас нет нуж­ных клю­чей для пра­виль­ной под­писи токена, поп­робу­ем под­делать непод­писан­ный токен.

Для начала нам нуж­но получить любой дей­ству­ющий токен поль­зовате­ля. Вой­ди в магазин от име­ни любого поль­зовате­ля, перех­вати пакеты обме­на и дос­тань отту­да заголо­вок авто­риза­ции Bearer.

То­кен в заголов­ке

Для прос­мотра и кодиро­вания JWT я исполь­зую сайт jwt.io, одна­ко он не поз­волит сде­лать нам токен без под­писи. Для начала ско­пируй весь код токена в файл. Токен, как ты уже про­читал, сос­тоит из трех час­тей Base64, которые нуж­но декоди­ровать, изме­нить и закоди­ровать обратно. Про­дела­ем это с пер­вой и вто­рой частью, пос­коль­ку третья часть — это ненуж­ная нам под­пись.

Де­коди­рован­ный токен

Те­перь изме­ним в заголов­ке алго­ритм на none и в теле токена поч­ту на jwtn3d@juice-sh.op. Про­делай это и закоди­руй все обратно в Base64, соеди­ни их точ­кой и обя­затель­но добавь еще одну точ­ку в самом кон­це! При кодиро­вании не забудь вклю­чить опцию URL-safe, пос­коль­ку JWT исполь­зует имен­но этот стан­дарт кодиро­вания. В ито­ге у меня получил­ся вот такой токен.

Из­менен­ный токен

Те­перь под­делай в Burp любой зап­рос с этим токеном, и можешь радовать­ся решен­ной задаче. Пом­ни, токен име­ет огра­ничен­ный срок жиз­ни, так что не затяги­вай!

Погружаемся в дебри кода

Сре­ди ска­чан­ных тобой фай­лов есть край­не инте­рес­ный файл package.json.bak. Если ты не зна­ешь, что это такое и зачем нуж­но, то са­мое вре­мя узнать. Если вкрат­це, этот файл показы­вает, какие пакеты и ком­понен­ты исполь­зовались для соз­дания Juice Shop. Очень час­то сре­ди этих ком­понен­тов мож­но най­ти уяз­вимые и про­экс­плу­ати­ровать это. Давай под­робно изу­чим содер­жимое это­го фай­ла.

На дос­ке заданий есть еще одно инте­рес­ное задание в раз­деле крип­тогра­фии: Inform the shop about an algorithm or library it should definitely not use the way it does. А в фай­ле package.json есть три биб­лиоте­ки, под­ходящие под нуж­ное опи­сание: hashidsjsonwebtoken и z85.

Ин­терес­ные пакеты

Ес­ли пос­мотреть вни­матель­но опи­сание этих пакетов в интерне­те, то мож­но опре­делить, что пакет Z85 отве­чает за кодиро­вание, а не шиф­рование. Поэто­му мож­но поп­робовать сдать его в качес­тве решения задачи. Кста­ти, если ты вни­матель­но смот­рел на хеши поль­зовате­лей из пре­дыду­щего задания, то они очень похожи на MD5, а этот алго­ритм тоже дав­но небезо­пасен. Можешь поп­робовать информи­ровать магазин и об этой уяз­вимос­ти.

Зна­ние о том, что магазин исполь­зует Z85, поз­волит нам подоб­рать­ся к сле­дующей очень слож­ной задаче.

Подделка кода купона

На дос­ке задач есть задача на шесть звез­дочек, пред­лага­ющая нам под­делать купон и соз­дать купон со скид­кой не менее 80%: Forge a coupon code that gives you a discount of at least 80%.

Как ты пом­нишь, сре­ди най­ден­ных нами фай­лов в пап­ке ftp был очень инте­рес­ный файл с резер­вной копи­ей раз­ных купонов. К сожале­нию, они без­надеж­но уста­рели... Одна­ко если отпра­вить их в ана­лиза­тор шиф­ров, о котором я писал выше, то он покажет, что все эти коды очень похожи на коды ROT, то есть не явля­ются нас­тоящим шиф­ровани­ем, а прос­то исполь­зуют сме­щение букв на опре­делен­ную величи­ну. К сожале­нию, точ­ный вари­ант такого пре­обра­зова­ния он уста­новить не смо­жет.

Тут надо вспом­нить, что про­ект реали­зован на Node.js, а раз­работ­чики обыч­но ленивы и исполь­зуют одну и ту же биб­лиоте­ку для раз­ных вещей. Еще пом­нишь о Z85? У нее есть кон­соль­ная вер­сия Z85-cli — самое вре­мя уста­новить ее и поп­робовать в деле. Перей­ди в пап­ку Juice Shop и выпол­ни сле­дующую коман­ду:

npm install -g z85-cli

Те­перь мож­но поп­робовать декоди­ровать купон:

z85 --decode "q:<IqgC7sn"

Ре­зуль­тат — SEP13-10! То есть это купон на сен­тябрь 2013 года на 10%. Отлично, теперь ты зна­ешь, как сде­лать акту­аль­ный купон и при­менить его. Для при­мера вот мой купон на 99%.

Ог­ромная скид­ка

ВЫВОДЫ

На­деюсь, эта статья поз­волила тебе еще под одним углом взгля­нуть на безопас­ность веб‑при­ложе­ний и осво­ить новые тех­ники. В Juice Shop оста­лось мно­го инте­рес­ных задач, так что ты всег­да можешь на них поп­ракти­ковать­ся. Заод­но узна­ешь, как не допус­кать таких уяз­вимос­тей при раз­работ­ке сво­их при­ложе­ний!

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei


Report Page