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

Ты навер­няка слы­шал об OWASP (Open Web Application Security Project). Это откры­тый неком­мерчес­кий фонд, который занима­ется воп­росами обес­печения безопас­ности веб‑при­ложе­ний. Кро­ме край­не популяр­ного OWASP Top 10, там раз­работа­ли и пос­тоян­но раз­вива­ют очень инте­рес­ный про­ект Juice Shop, приз­ванный про­демонс­три­ровать самые час­то встре­чаемые уяз­вимос­ти в при­ложе­ниях и «худ­шие прак­тики» веб‑раз­работ­ки. Этот магазин­чик — иде­аль­ный полигон для тре­ниров­ки и изу­чения пен­теста реаль­ных при­ложе­ний. В этой статье я покажу, как его ста­вить, запус­кать и искать свои пер­вые уяз­вимос­ти.

 

Установка и запуск

Juice Shop под­держи­вает раз­ные вари­анты уста­нов­ки, но я рекомен­дую исполь­зовать локаль­ный вари­ант с Node.js. В вер­сии Docker дос­тупны не все воз­можные уяз­вимос­ти, кро­ме того, неп­лохо научить­ся ста­вить Node.js без рута и узнать, как исполь­зовать одновре­мен­но нес­коль­ко раз­ных вер­сий.

 

Установка Node.js

Juice Shop под­держи­вает раз­ные ста­биль­ные релизы Node.js. На момент написа­ния статьи пос­ледней LTS (Long Term Support) Node.js была 14 вер­сия, ее‑то мы и будем ста­вить. Что­бы не зах­ламлять свою ОС пакета­ми и иметь воз­можность исполь­зовать раз­ные релизы, был при­думан Node Version Manager. Он уста­нав­лива­ется в домаш­нюю пап­ку и поз­воля­ет лег­ко рулить вер­сиями. Сей­час пос­ледняя вер­сия — 0.38, но я всег­да рекомен­дую схо­дить и про­верить перед уста­нов­кой. Уста­нов­ка выпол­няет­ся одной коман­дой в домаш­ней пап­ке.

$curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

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

$nvm -v
$nvm install --lts

Про­верь вер­сию уста­нов­ленной коман­ды node и запом­ни ее.

$node --version

Ес­ли тебе понадо­бит­ся нес­коль­ко раз­ных вер­сий одновре­мен­но, прос­то уста­нови нуж­ные и выбирай акту­аль­ную по необ­ходимос­ти (эта часть уже не нуж­на для работы Juice Shop).

$nvm install <номер версии>
$nvm use <номер версии>
 

Установка Juice Shop

В гит­хабе раз­работ­чиков всег­да мож­но най­ти све­жие релизы. Про­ект пос­тоян­но раз­вива­ется, вно­сят­ся новые задания и исправ­ляют­ся ошиб­ки, поэто­му всег­да бери самый све­жий вари­ант! Но он дол­жен быть сов­мести­мым с тво­им Node.js. Если на пре­дыду­щем эта­пе ты уста­новил Node.js 14, то тебе будет нужен juice-shop-xx.x.x_node14_linux_x64.tgz. Ска­чай его и рас­пакуй в удоб­ную тебе пап­ку.

$tar -xzf juice-shop-xx.x.x_node14_linux_x64.tgz

На этом уста­нов­ка завер­шена. Перехо­ди в пап­ку с Juice Shop и запус­кай его:

$npm start

Ес­ли все прош­ло успешно, ты уви­дишь сооб­щение «info: Server listening on port 3000». Откры­вай любимый бра­узер и перехо­ди на http://localhost:3000. В пра­вом вер­хнем углу есть выбор язы­ка, я всег­да рекомен­дую ста­вить англий­ский, так ты не встре­тишь­ся с проб­лемами перево­да раз­ных тер­минов и, воз­можно, выучишь пару новых сло­вечек. Наде­юсь, тебе нра­вят­ся соки и этот прек­расный дырявый пакет, так как они и Burp Suite ста­нут тво­ими луч­шими друзь­ями на мно­жес­тво увле­катель­ных часов.

 

Настройка Burp Suite

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

 

Основные уязвимые места

В сво­ей пре­дыду­щей статье я уже упо­минал о важ­ности методи­ки и сис­темно­го под­хода к пен­тесту. В слу­чае с веб‑при­ложе­ниями это вдвой­не важ­но! В сети есть мно­жес­тво отличных чек‑лис­тов вро­де Pentesting Web Checklist. Если ты никог­да не слы­шал о XSS, IDOR, CSRF, OAUTH — очень рекомен­дую тебе бес­плат­ный курс раз­работ­чиков Burp Suite.

Те­перь перей­дем непос­редс­твен­но к ана­лизу нашего при­ложе­ния. Я рекомен­дую сде­лать таб­личку с опи­сани­ем дос­тупных фун­кций и необ­ходимых уров­ней дос­тупа. Она поможет тебе потом экспе­римен­тировать над при­ложе­нием и отве­чать на воп­росы вро­де «А что будет, если я отправ­лю админ­ский зап­рос с пра­вами гос­тя?»

Доступные функции
Дос­тупные фун­кции

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

warning

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

На какие мес­та и фун­кции это­го и дру­гих при­ложе­ний я рекомен­дую обра­щать осо­бое вни­мание:

  • фор­ма регис­тра­ции, вхо­да и вос­ста­нов­ления пароля;
  • лю­бые стро­ки поис­ка и поль­зователь­ско­го вво­да. Они все могут быть уяз­вимы к раз­ным видам XSS. Это я еще про­демонс­три­рую;
  • все вари­анты филь­тра­ции товара или выбор­ки его по кри­тери­ям. Это час­то путь к SQL-инъ­екци­ям;
  • ра­бота с кор­зиной, спис­ком заказов и дос­тавкой. Там час­то мож­но встре­тить очень пло­хой кон­троль дос­тупа и под­смот­реть чужие кор­зины и адре­са;
  • лю­бые фун­кции с воз­можностью зло­упот­ребле­ний (воз­врат товара, плат­ные под­писки и так далее);
  • ад­минка и дос­туп к ней неав­торизо­ван­ных поль­зовате­лей или выпол­нение админ­ских фун­кций без необ­ходимых прав (но вна­чале надо в эту админку попасть).

Те­перь самое вре­мя пос­мотреть на OWASP Top 10. Все десять катего­рий обя­затель­но при­сутс­тву­ют в Juice Shop. Что самое инте­рес­ное, в каж­дой из этих катего­рий под­робно опи­саны вари­анты воз­никно­вения и методы защиты. Вари­анты мож­но исполь­зовать как чек‑лист для про­вер­ки вро­де «А пос­мотрел ли я этот момент в при­ложе­нии?» или, если ты раз­работ­чик, «А не допус­тил ли я такой же ошиб­ки у себя?»

На этом скуч­ная (но очень важ­ная!) ввод­ная часть закан­чива­ется, и я перехо­жу непос­редс­твен­но к демонс­тра­ции уяз­вимос­тей магази­на.

 

Ищем доску с заданиями

Ты навер­няка при пер­вом запус­ке уже заметил пакет с соком, пред­лага­ющий решить очень прос­тую задачу, а имен­но най­ти дос­ку с задани­ями и резуль­татами, она же Score Board. У этой край­не прос­той задачи есть два вари­анта решения.

  1. Вни­матель­но пос­мотри на адресную стро­ку вида /#/search, /#/login и так далее и подумай, а какой бы была стро­ка для дос­тупа к Score Board? Сра­зу ска­жу, этот вари­ант мне не очень нра­вит­ся, пос­коль­ку нуж­но играть в уга­дай­ку, и не всег­да успешно. Поэто­му я пред­почитаю вари­ант номер два.
  2. Да­вай изу­чим исходный код сай­та и пос­мотрим, нет ли там чего инте­рес­ного. Я наде­юсь, ты уме­ешь читать исходный код сай­та в сво­ем любимом бра­узе­ре? В Firefox дос­таточ­но прос­то нажать F12.
Исходный код главной страницы Juice Shop
Ис­ходный код глав­ной стра­ницы Juice Shop

Что сра­зу же бро­сает­ся в гла­за? Огромное количес­тво под­клю­чаемых скрип­тов на JS! Нас с тобой будет инте­ресо­вать скрипт main. За что отве­чают дру­гие скрип­ты, ты можешь выяс­нить на досуге с помощью любимо­го поис­ковика.

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

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

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

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

Оставить мнение