День 44. "Хаос на АЗС" hackerlab.pro
CTF Write-up | «Хаос на АЗС» — hackerlab.pro
Заправка. Flask. Werkzeug. Выглядит скучно — внутри полный хаос.
Цель: 62.173.140.174:16109 Флаг: CODEBY{FU3L_B4CKUP_0WN3D}
nmap — живёт HTTP на Werkzeug 3.1.5, Python 3.11.6. Титул страницы: «AZS LEET». Окей, посмотрим что тут за лит-заправка.
Перебираю маршруты — /admin, /admin/fuel, /admin/backup, /admin/secret — всё редиректит на /adminLogin. Единственная открытая дверь. Стучимся.
[2/5] Приложение само сдаёт своих пользователей
Пробую случайный логин — User does not exist. Пробую operator — Check username or password.
Стоп. Это разные сообщения. Приложение буквально говорит мне кто существует, а кто нет.
ffuf + SecLists, фильтрую по User does not exist — остаётся только то, что нашлось:
operator → секция Fuel superadmin → секция Secret
Берём darkweb2017_top-100.txt — самые позорные пароли планеты Земля. Запускаю ffuf на operator.
На 42-й итерации — HTTP 302. Редирект на /admin/fuel.
Куки в кармане. Захожу в панель управления.
Смотрю исходник /admin/fuel. Форма с ценами — скучно. Но ниже:
<form method="post" action="/admin/backup"
enctype="multipart/form-data" hidden>
<input type="file" name="sqlfile">
</form>hidden. В браузере не видно. Для обычного юзера — не существует. Для curl — прекрасно видна.
GET /admin/backup — сервер любезно отдаёт полный SQL-дамп. С таблицей users. С хешами паролей. Всех.
INSERT INTO "users" VALUES('Secret','superadmin','d9e9fece...');Что за хеш? Знаю пару qwe123 → b6a2976b... — проверяю схемы. SHA256 — мимо. MD5 — мимо. SHA256(SHA256(pass)) — попадание. Без соли. Классика.
Генерирую хеш для нового пароля pass123, создаю файлик:
UPDATE users SET password='826ec584...' WHERE username='superadmin';
curl -b /tmp/cookies.txt \ -F "sqlfile=@inject.sql" \ http://62.173.140.174:16109/admin/backup
Сервер принимает. Выполняет. И — вишенка на торте — возвращает обновлённый дамп, где хеш superadmin уже мой.
[5/5] Заезжаю на секретную заправку
section=Secret&username=superadmin&password=pass123
HTTP 302 → /admin/secret → открываю страницу →
CODEBY{FU3L_B4CKUP_0WN3D}Цепочка целиком: nmap → User Enum → брутфорс → скрытая форма → SQL-дамп с хешами → inject.sql → смена пароля superadmin → флаг
Ни одной экзотической техники. Только невнимательность разработчика — и четыре дыры выстроились в прямую дорожку к флагу.
Уязвимости: User Enumeration / Weak Password / SQL Dump Exposure / Arbitrary SQL Execution / Unsalted Double SHA-256
Основная группа обучения ИБ
Lab-группу с полезным софтом / книгами / аудио.
Чат для обсуждений, задавай свои вопросы.
P.S. С вами был @Fnay_Offensive
До новой встречи, user_name!