vulnerable_python | 2025-09-10
Уязвимое Python приложение - специально созданное веб-приложение для демонстрации и обучения эксплуатации распространенных уязвимостей:
- Pickle Deserialization RCE - Удаленное выполнение кода через десериализацию
- YAML Injection - Инъекция кода через парсинг YAML
- XXE Injection - XML External Entity обработка
- Eval() RCE - Выполнение кода через eval()
- Subprocess Command Injection - Инъекция команд в subprocess
# Запуск уязвимого приложения
docker run --name vuln_python_server --rm -ti -p 5000:5000 egonzalez90/vuln_python_server:latest
# Доступные эндпоинты
http://localhost:5000/ # Главная страница
http://localhost:5000/eval # Eval RCE
http://localhost:5000/pickle # Pickle deserialization
http://localhost:5000/yaml # YAML injection
http://localhost:5000/xml # XXE injection
http://localhost:5000/subprocess # Command injectionПриложение доступно по адресу: http://localhost:5000
| Уязвимость | Уровень риска | CVSS Score | Вектор | Exploitability | Impact |
|---|---|---|---|---|---|
| Eval() RCE | Критический | 10.0 | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
Легкий | Критический |
| Pickle Deserialization RCE | Критический | 9.8 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
Легкий | Критический |
| YAML Injection | Критический | 9.8 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
Легкий | Критический |
| XXE Injection | Высокий | 8.2 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N |
Легкий | Высокий |
| Subprocess Command Injection | Высокий | 8.6 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L |
Легкий | Высокий |
Эндпоинт: POST /eval
Уровень риска: Критический
Суть проблемы:
- Прямое выполнение пользовательского ввода через
eval() - Отсутствие любой валидации или санитизации
- Полный контроль над интерпретатором Python
Эксплуатация:
# Через веб-интерфейс
__import__('os').system('ls -la /')Визуальные доказательства:
Активация шела через браузер
Успешное подключение
Просмотр файловой системы
Демонстрация выполнения в терминале ls
Воздействие:
- Выполнение произвольного Python кода
- Полный контроль над сервером
- Компрометация всей системы
Рекомендации:
- Полностью отказаться от использования
eval()с пользовательским вводом - Использовать
ast.literal_eval()для безопасной десериализации - Реализовать строгую валидацию входных данных
Эндпоинт: POST /pickle
Уровень риска: Критический
Суть проблемы:
- Десериализация непроверенных данных через
pickle.loads() - Возможность выполнения произвольных команд через метод
__reduce__ - Отсутствие проверки целостности и валидации данных
Эксплуатация:
import pickle
import base64
import os
class Exploit(object):
def __reduce__(self):
return (os.system, ('cat /etc/passwd',))
payload = base64.b64encode(pickle.dumps(Exploit())).decode()Визуальные доказательства:
Веб-интерфейс Pickle уязвимости
Выполнение эксплойта через терминал
Воздействие:
- Выполнение произвольных системных команд
- Чтение и модификация файлов на сервере
- Полный контроль над системой
Рекомендации:
- Избегать десериализации непроверенных данных
- Использовать JSON вместо pickle для сериализации
- Реализовать цифровую подпись для сериализованных данных
Эндпоинт: POST /yaml
Уровень риска: Критический
Суть проблемы:
- Использование небезопасного
yaml.load()вместоyaml.safe_load() - Возможность выполнения произвольных команд через YAML теги
- Отсутствие валидации YAML содержимого
Эксплуатация:
!!python/object/apply:os.system
- 'cat /etc/passwd'Визуальные доказательства:
Веб-интерфейс YAML уязвимости
Результат выполнения эксплойта
Воздействие:
- Выполнение системных команд через инъекцию YAML
- Обход механизмов безопасности
- Компрометация системы
Рекомендации:
- Использовать
yaml.safe_load()вместоyaml.load() - Валидировать и санитизировать YAML входные данные
- Ограничить доступные YAML теги
Эндпоинт: POST /xml
Уровень риска: Высокий
Суть проблемы:
- Обработка XML с включенными внешними entities
- Возможность чтения локальных файлов через XXE
- Отсутствие ограничений на обработку XML
Эксплуатация:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>Визуальные доказательства:
Веб-интерфейс XXE уязвимости
Результат чтения файла через XXE
Воздействие:
- Чтение произвольных файлов на сервере
- Server Side Request Forgery (SSRF)
- Раскрытие конфиденциальной информации
Рекомендации:
- Отключить обработку внешних entities в XML парсерах
- Использовать безопасные XML парсеры (defusedxml)
- Валидировать XML структуру перед обработкой
Эндпоинт: POST /subprocess
Уровень риска: Высокий
Суть проблемы:
- Использование
shell=Trueс пользовательским вводом - Конкатенация команд без экранирования
- Отсутствие валидации входных данных
Эксплуатация:
127.0.0.1; cat /etc/passwdВизуальные доказательства:
Веб-интерфейс Subprocess уязвимости
Результат выполнения command injection
Воздействие:
- Выполнение произвольных системных команд
- Чтение системных файлов
- Эскалация привилегий
Рекомендации:
- Избегать использования
shell=True - Использовать параметризованные вызовы:
subprocess.run(['ping', '-c', '1', ip]) - Валидировать и экранировать пользовательский ввод
Проект включает два основных скрипта для автоматизации процесса тестирования:
1. Запуск всех эксплойтов - scripts/run_all_scripts.sh
Данный скрипт автоматически выполняет все эксплойты последовательно:
Функциональность:
- Автоматическое создание директории для логов
- Последовательный запуск всех 5 эксплойтов
- Логирование результатов в отдельные файлы
Использование:
chmod +x scripts/run_all_scripts.sh
./scripts/run_all_scripts.shВыходные данные:
logs/exploitation_*.log- Основной лог-файлlogs/EVAL_*.log- Лог для Eval уязвимостиlogs/PICKLE_*.log- Лог для Pickle уязвимостиlogs/YAML_*.log- Лог для YAML уязвимостиlogs/XXE_*.log- Лог для XXE уязвимостиlogs/SUBPROCESS_*.log- Лог для Subprocess уязвимости
2. Генерация HTML отчета - scripts/generate_reports.sh
Скрипт для создания красивого HTML отчета на основе логов:
Функциональность:
- Анализ последнего лог-файла
- Генерация структурированного HTML отчета
- Разделение по типам уязвимостей
- Визуальное оформление с CSS
- Автоматическое открытие в браузере
Использование:
chmod +x scripts/generate_reports.sh
./scripts/generate_reports.shВыходные данные:
reports/report_*.html- HTML отчет с результатами











