Взлом интернет магазина OWASP Juice Shop

OWASP Juice Shop

В этой статье мы продолжим взлом интернет магазина OWASP Juice Shop. OWASP Juice Shop — это веб-приложение с открытым исходным кодом для демонстрации самых распространенных уязвимостей. Поддерживается некоммерческой организацией Open Web Application Security Project (OWASP) и волонтерами.

Еще по теме: Обзор лучших сканеров уязвимостей

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

В недавней статье, мы рассказывали, как установить и использовать OWASP Juice Shop. Очень рекомендую для затравки!

Взлом интернет магазина OWASP Juice Shop

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

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

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

dirb http://localhost:3000
Взлом интернет магазина Juice Shop
Най­ден­ные дирек­тории

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

Взлом интернет магазина Juice Shop. Ин­терес­ные фай­лы на FTP
Ин­терес­ные фай­лы на FTP

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

Од­на из тех­ник называ­ется 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
Взлом интернет магазина. Дамп таб­лицы 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 исполь­зует имен­но этот стан­дарт кодиро­вания. В ито­ге у меня получил­ся вот такой токен.

Взлом OWASP Juice Shop. Измененный токен
Взлом OWASP Juice Shop. Измененный токен

Те­перь под­делайте в 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 есть три биб­лиоте­ки, под­ходящие под нуж­ное опи­сание: hashids, jsonwebtoken и z85.

Взлом Juice Shop. Интересные пакеты
Взлом Juice Shop. Интересные пакеты

Ес­ли пос­мотреть вни­матель­но опи­сание этих пакетов в интерне­те, то мож­но опре­делить, что пакет 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. Огромная скидка
Взлом Juice Shop. Огромная скидка

Заключение

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

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

Еще по теме: Проверка сайта на уязвимости

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *