diff --git a/nselib/sslcert.lua b/nselib/sslcert.lua index abfff62f7..88fef6083 100644 --- a/nselib/sslcert.lua +++ b/nselib/sslcert.lua @@ -12,6 +12,7 @@ -- * IMAP -- * LDAP -- * NNTP +-- * MySQL -- * POP3 -- * PostgreSQL -- * SMTP @@ -27,6 +28,7 @@ local ftp = require "ftp" local ldap = require "ldap" local match = require "match" local mssql = require "mssql" +local mysql = require "mysql" local nmap = require "nmap" local smtp = require "smtp" local stdnse = require "stdnse" @@ -394,6 +396,40 @@ StartTLS = { lmtp_prepare_tls = tls_reconnect("lmtp_prepare_tls_without_reconnect"), + mysql_prepare_tls_without_reconnect = function(host, port) + local s, err = comm.opencon(host, port) + if not s then + return false, string.format("Failed to connect to MySQL server: %s", err) + end + local status, resp = mysql.receiveGreeting(s) + if not status then + return false, string.format("MySQL handshake error: %s", resp) + end + if 0 == resp.capabilities & mysql.Capabilities.SwitchToSSLAfterHandshake then + return false, "MySQL server does not support SSL" + end + local clicap = mysql.Capabilities.SwitchToSSLAfterHandshake + + mysql.Capabilities.LongPassword + + mysql.Capabilities.LongColumnFlag + + mysql.Capabilities.SupportsLoadDataLocal + + mysql.Capabilities.Speaks41ProtocolNew + + mysql.Capabilities.InteractiveClient + + mysql.Capabilities.SupportsTransactions + + mysql.Capabilities.Support41Auth + local packet = string.pack( "