🔥 Суббота, OWASP Juice Shop и три самописных скрипта: как я выносил магазинчик соков
🔥 Суббота, OWASP Juice Shop и три самописных скрипта: как я выносил магазинчик соков Решил размяться на OWASP Juice Shop - легендарном «дырявом» веб-приложении для тренировки пентеста. Без sqlmap, без готовых эксплойтов - только свои скрипты. Спойлер: магазинчик сдался 💀 Что было сделано: 💉 Шаг 1. SQL-инъекция в форме логина Эндпоинт /rest/user/login склеивает email прямо в SQL-запрос. Один пейлоад `' OR 1=1--` - и я админ. Написал фаззер sqli_login.py: 9 пейлоадов в обойме, декодинг JWT прямо из ответа. Итог - три учётки: admin, bender, jim. 🔍 Шаг 2. Обход мини-WAF и blind-экстракция В поиске товаров нашлась вторая SQLi (параметр q). Но тут меня ждал сюрприз: сервер режет любые запросы со словом UNION - классика не прошла. Ну что ж, если нельзя UNION - включаем boolean-blind: посимвольная выкачка базы через unicode(substr(...)) и бинарный поиск, в 8 потоков. Скрипт union_extract.py вытащил: - всю схему базы из sqlite_master (6559 символов) - 24 email'а пользователей - все MD5-хеши паролей WAF - это не стена, а приглашение 😉 🔓 Шаг 3. hashcat пощёлкал хеши MD5 без соли против rockyou.txt - это даже не файт. 4 секунды - и вот они: admin:admin123, jim:ncc-1701 (кто-то любит Star Trek 🖖), ethereum:private (криптоанархист с паролем «private» - ирония зашкаливает). 🎄 Шаг 4. Рождественская коробка 2014 года Скрытый товар, который нельзя купить через UI - он «удалён» (deletedAt IS NOT NULL). Но API корзины не проверяет видимость товара: нашёл его id через SQLi, положил в корзину через POST /api/BasketItems и оформил заказ. Скрипт basket_order.js на Node.js делает всю цепочку сам: логин через SQLi → товар в корзину → checkout. 📦 Все три скрипта прикрепляю в отдельной статье: https://vk.ru/@mikhail_tarasovcom-subbota-owasp-juice-shop-i-tri-samopisnyh-skripta-kak-ya-vyn 1⃣ sqli_login.py - SQLi-фаззер формы входа 2⃣ union_extract.py - UNION + boolean-blind SQLi экстрактор 3⃣ basket_order.js - эксплойт «заказ невидимого товара» Забирайте, разбирайте, учитесь. И помните: запускать - только на своих стендах и лабах. С чужими системами такие шутки заканчиваются не скриншотами, а статьёй 😅