<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając na celu promowanie wiedzy technicznej, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
**MySQL** można opisać jako otwarty, darmowy **System Zarządzania Bazą Danych Relacyjnych (RDBMS)**. Działa na **Structured Query Language (SQL)**, umożliwiając zarządzanie i manipulację bazami danych.
To connect to a local MySQL server, you can use the following command:
```bash
mysql -u <username> -p
```
Replace `<username>` with the username you want to use to connect to the server. You will be prompted to enter the password for the user.
### **Remote**
To connect to a remote MySQL server, you can use the following command:
```bash
mysql -h <hostname> -P <port> -u <username> -p
```
Replace `<hostname>` with the IP address or hostname of the remote server, `<port>` with the port number on which the MySQL server is running (default is 3306), `<username>` with the username you want to use to connect, and you will be prompted to enter the password for the user.
## **Enumerate**
### **Version**
To determine the version of the MySQL server, you can use the following command:
```sql
SELECT @@version;
```
This will return the version number of the MySQL server.
### **Databases**
To list all the databases on the MySQL server, you can use the following command:
```sql
SHOW DATABASES;
```
This will display a list of all the databases.
### **Tables**
To list all the tables in a specific database, you can use the following command:
```sql
USE <database_name>;
SHOW TABLES;
```
Replace `<database_name>` with the name of the database you want to enumerate.
### **Columns**
To list all the columns in a specific table, you can use the following command:
```sql
USE <database_name>;
SHOW COLUMNS FROM <table_name>;
```
Replace `<database_name>` with the name of the database and `<table_name>` with the name of the table you want to enumerate.
### **Data**
To retrieve data from a specific table, you can use the following command:
```sql
USE <database_name>;
SELECT * FROM <table_name>;
```
Replace `<database_name>` with the name of the database and `<table_name>` with the name of the table from which you want to retrieve data.
## **Exploit**
### **SQL Injection**
To exploit a SQL injection vulnerability in a web application, you can try injecting malicious SQL queries into input fields or parameters. The goal is to manipulate the SQL query being executed by the application and retrieve sensitive information or perform unauthorized actions.
If you have limited privileges on the MySQL server, you can try to escalate your privileges to gain administrative access. This can be done by exploiting vulnerabilities in the MySQL server or by leveraging misconfigurations or weak permissions.
Some common privilege escalation techniques include:
- Exploiting weak user credentials
- Exploiting vulnerabilities in the MySQL server version
- Exploiting misconfigurations or weak permissions
## **Post-Exploitation**
Once you have gained access to the MySQL server, you can perform various post-exploitation activities, such as:
- Dumping the contents of databases or specific tables
- Modifying or deleting data in the database
- Creating new database users or modifying existing ones
- Executing operating system commands on the server
## **Countermeasures**
To protect against MySQL server vulnerabilities and attacks, you can implement the following countermeasures:
- Keep the MySQL server up to date with the latest security patches
- Use strong and unique passwords for MySQL user accounts
- Implement proper input validation and sanitization in web applications to prevent SQL injection attacks
- Restrict access to the MySQL server to trusted IP addresses or networks
- Regularly monitor and review MySQL server logs for suspicious activities
MySQL can be accessed remotely through the network. This allows clients to connect to the MySQL server from a different machine. However, remote access should be carefully configured to ensure security.
MySQL może być zdalnie dostępny przez sieć. Pozwala to klientom na połączenie się z serwerem MySQL z innego komputera. Jednak zdalny dostęp powinien być starannie skonfigurowany, aby zapewnić bezpieczeństwo.
#### Default Port
By default, MySQL listens on port 3306 for incoming connections. This port should be open in the firewall to allow remote access.
Domyślnie MySQL nasłuchuje na porcie 3306 dla przychodzących połączeń. Ten port powinien być otwarty w firewallu, aby umożliwić zdalny dostęp.
#### User Authentication
MySQL uses a username and password for authentication. It is important to use strong and unique passwords for MySQL accounts to prevent unauthorized access.
MySQL używa nazwy użytkownika i hasła do uwierzytelniania. Ważne jest, aby używać silnych i unikalnych haseł dla kont MySQL, aby zapobiec nieautoryzowanemu dostępowi.
#### Network Encryption
To secure the communication between the client and the MySQL server, it is recommended to use SSL/TLS encryption. This ensures that the data transmitted over the network is encrypted and cannot be intercepted.
Aby zabezpieczyć komunikację między klientem a serwerem MySQL, zaleca się korzystanie z szyfrowania SSL/TLS. Zapewnia to, że dane przesyłane przez sieć są zaszyfrowane i nie mogą być przechwycone.
#### Firewall Configuration
To restrict access to the MySQL server, it is important to configure the firewall to only allow connections from trusted IP addresses. This helps prevent unauthorized access from malicious actors.
Aby ograniczyć dostęp do serwera MySQL, ważne jest skonfigurowanie firewalla tak, aby zezwalał tylko na połączenia z zaufanych adresów IP. Pomaga to zapobiec nieautoryzowanemu dostępowi ze strony złośliwych użytkowników.
MySQL is vulnerable to brute-force attacks, where an attacker tries multiple username and password combinations to gain access. To prevent this, it is recommended to implement account lockouts and rate limiting to block repeated login attempts.
MySQL jest podatny na ataki brute-force, w których atakujący próbuje wielu kombinacji nazwy użytkownika i hasła, aby uzyskać dostęp. Aby temu zapobiec, zaleca się wprowadzenie blokady konta i ograniczenia liczby prób logowania w celu zablokowania powtarzających się prób logowania.
#### SQL Injection
SQL injection is a common vulnerability in web applications that use MySQL as the backend database. It allows an attacker to manipulate the SQL queries executed by the application, potentially gaining unauthorized access to the database. To prevent SQL injection, it is important to use prepared statements or parameterized queries.
SQL injection to powszechna podatność w aplikacjach internetowych, które korzystają z MySQL jako bazy danych backendowej. Pozwala to atakującemu manipulować zapytaniami SQL wykonywanymi przez aplikację, co potencjalnie umożliwia nieautoryzowany dostęp do bazy danych. Aby zapobiec SQL injection, ważne jest korzystanie z przygotowanych instrukcji lub zapytań z parametrami.
#### Privilege Escalation
If an attacker gains access to a MySQL account with limited privileges, they may attempt to escalate their privileges to gain more control over the database. It is important to regularly review and update the privileges assigned to MySQL accounts to prevent privilege escalation.
Jeśli atakujący uzyska dostęp do konta MySQL o ograniczonych uprawnieniach, może próbować podnieść swoje uprawnienia, aby uzyskać większą kontrolę nad bazą danych. Ważne jest regularne przeglądanie i aktualizowanie przydzielonych uprawnień dla kont MySQL w celu zapobiegania eskalacji uprawnień.
MySQL to popularny system zarządzania bazą danych, który oferuje wiele przydatnych poleceń do zarządzania i manipulowania danymi. Poniżej przedstawiam kilka najważniejszych poleceń MySQL, które warto znać:
### **1. Polecenie SELECT**
Polecenie SELECT służy do pobierania danych z tabeli. Przykład użycia:
```sql
SELECT * FROM tabela;
```
### **2. Polecenie INSERT**
Polecenie INSERT służy do dodawania nowych rekordów do tabeli. Przykład użycia:
```sql
INSERT INTO tabela (kolumna1, kolumna2) VALUES (wartość1, wartość2);
MySQL jest popularnym systemem zarządzania bazą danych, który jest szeroko stosowany w aplikacjach internetowych. Podczas testowania penetracyjnego aplikacji internetowych, ważne jest zrozumienie uprawnień użytkowników MySQL, aby znaleźć potencjalne luki w zabezpieczeniach. Poniżej przedstawiono kilka technik, które można zastosować do wyliczenia uprawnień MySQL.
#### 1. Wyświetlanie uprawnień użytkownika
Aby wyświetlić uprawnienia użytkownika MySQL, można użyć polecenia `SHOW GRANTS FOR user;`, gdzie `user` to nazwa użytkownika, którego uprawnienia chcemy sprawdzić. Ten polecenie wyświetli listę uprawnień przypisanych do danego użytkownika.
#### 2. Wyświetlanie wszystkich uprawnień
Aby wyświetlić wszystkie uprawnienia w systemie MySQL, można użyć polecenia `SHOW GRANTS;`. Ten polecenie wyświetli listę wszystkich uprawnień przypisanych do wszystkich użytkowników w systemie.
#### 3. Wyświetlanie uprawnień dla wszystkich użytkowników
Aby wyświetlić uprawnienia dla wszystkich użytkowników w systemie MySQL, można użyć polecenia `SELECT user, host, authentication_string FROM mysql.user;`. Ten polecenie wyświetli listę użytkowników wraz z ich uprawnieniami.
Aby wyświetlić uprawnienia dla konkretnej bazy danych, można użyć polecenia `SHOW GRANTS FOR user ON database;`, gdzie `user` to nazwa użytkownika, a `database` to nazwa bazy danych. Ten polecenie wyświetli listę uprawnień przypisanych do danego użytkownika dla konkretnej bazy danych.
#### 5. Wyświetlanie uprawnień dla tabeli
Aby wyświetlić uprawnienia dla konkretnej tabeli w bazie danych, można użyć polecenia `SHOW GRANTS FOR user ON database.table;`, gdzie `user` to nazwa użytkownika, `database` to nazwa bazy danych, a `table` to nazwa tabeli. Ten polecenie wyświetli listę uprawnień przypisanych do danego użytkownika dla konkretnej tabeli.
Wyliczanie uprawnień MySQL jest ważnym krokiem w procesie testowania penetracyjnego aplikacji internetowych. Pozwala to zidentyfikować potencjalne luki w zabezpieczeniach i podjąć odpowiednie działania w celu ich naprawy.
Możesz zobaczyć w dokumentacji znaczenie każdego uprawnienia: [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)
W rzeczywistości, kiedy próbujesz **załadować dane lokalnie do tabeli**, **zawartość pliku** serwer MySQL lub MariaDB prosi **klienta o odczytanie go** i przesłanie zawartości. **Jeśli więc możesz przerobić klienta MySQL, aby połączył się z twoim własnym serwerem MySQL, możesz odczytywać dowolne pliki.**\
Proszę zauważyć, że jest to zachowanie przy użyciu:
**W tym artykule można znaleźć kompletny opis ataku oraz jak go rozszerzyć do zdalnego wykonania kodu:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
**Tutaj można znaleźć przegląd ataku:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając **misję promowania wiedzy technicznej**, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
- Ustawienie **`user`** jest używane do określenia użytkownika, na którym będzie uruchamiana usługa MySQL.
- **`password`** jest stosowane do ustanowienia hasła powiązanego z użytkownikiem MySQL.
- **`admin_address`** określa adres IP, na którym nasłuchuje połączeń TCP/IP na interfejsie administracyjnym.
- Zmienna **`debug`** wskazuje na obecne konfiguracje debugowania, w tym na wrażliwe informacje w dziennikach.
- **`sql_warnings`** zarządza generowaniem ciągów informacyjnych dla instrukcji INSERT dla pojedynczych wierszy, gdy pojawiają się ostrzeżenia, zawierające wrażliwe dane w dziennikach.
- Za pomocą **`secure_file_priv`** ogranicza się zakres operacji importu i eksportu danych w celu zwiększenia bezpieczeństwa.
Jeśli serwer **mysql działa jako root** (lub inny bardziej uprzywilejowany użytkownik), możesz go zmusić do wykonania poleceń. W tym celu musisz użyć **zdefiniowanych przez użytkownika funkcji**. Aby utworzyć zdefiniowaną przez użytkownika funkcję, będziesz potrzebować **biblioteki** dla systemu operacyjnego, na którym działa mysql.
Złośliwą bibliotekę można znaleźć wewnątrz sqlmap i metasploita, wykonując polecenie **`locate "*lib_mysqludf_sys*"`**. Pliki **`.so`** to biblioteki **Linuxa**, a pliki **`.dll`** to biblioteki **Windowsa**, wybierz odpowiednią dla swojego systemu.
Jeśli **nie masz** tych bibliotek, możesz albo **poszukać ich**, albo pobrać ten [**kod źródłowy w języku C dla Linuxa**](https://www.exploit-db.com/exploits/1518) i **skompilować go wewnątrz podatnej maszyny Linux**:
MySQL is a popular open-source relational database management system. It is commonly used in web applications to store and retrieve data. In a Windows environment, MySQL can be installed as a service.
To enumerate MySQL services on a Windows machine, you can use the following methods:
1.**Service Command**: Use the `sc` command to list all services and filter for those with "mysql" in the name.
```plaintext
sc query | findstr /i mysql
```
2.**Tasklist Command**: Use the `tasklist` command to list all running processes and filter for those with "mysqld" in the name.
```plaintext
tasklist /fi "imagename eq mysqld*"
```
3.**Registry**: Check the Windows registry for MySQL service entries.
Once you have identified the MySQL service, you can proceed with exploiting it. Here are some common techniques:
1.**Default Credentials**: Try using default credentials such as "root" with no password or "admin" with no password.
2.**Brute-Force Attack**: Use a tool like Hydra or Medusa to perform a brute-force attack against the MySQL service.
3.**SQL Injection**: Look for SQL injection vulnerabilities in the web application that interacts with the MySQL database.
4.**Privilege Escalation**: If you have access to a low-privileged MySQL user, try to escalate privileges by exploiting vulnerabilities or misconfigurations.
5.**File Upload**: Exploit file upload functionality in the web application to upload a malicious file that can be executed on the server.
Remember to always obtain proper authorization before attempting any exploitation. Unauthorized access to computer systems is illegal and unethical.
Wewnątrz pliku: _/var/lib/mysql/mysql/user.MYD_ znajdują się **wszystkie hashe użytkowników MySQL** (te, które można wyodrębnić z mysql.user wewnątrz bazy danych).
[**RootedCON**](https://www.rootedcon.com/) to najważniejsze wydarzenie związane z cyberbezpieczeństwem w **Hiszpanii** i jedno z najważniejszych w **Europie**. Mając na celu promowanie wiedzy technicznej, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.