From 0d47952611198ef6b1163f366dc03922d20b1475 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 09:42:04 +0200 Subject: Adding upstream version 7.94+git20230807.3be01efb1+dfsg. Signed-off-by: Daniel Baumann --- scripts/ms-sql-ntlm-info.nse | 134 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 scripts/ms-sql-ntlm-info.nse (limited to 'scripts/ms-sql-ntlm-info.nse') diff --git a/scripts/ms-sql-ntlm-info.nse b/scripts/ms-sql-ntlm-info.nse new file mode 100644 index 0000000..6ff3db5 --- /dev/null +++ b/scripts/ms-sql-ntlm-info.nse @@ -0,0 +1,134 @@ +local os = require "os" +local datetime = require "datetime" +local mssql = require "mssql" +local stdnse = require "stdnse" +local smbauth = require "smbauth" +local string = require "string" + + +description = [[ +This script enumerates information from remote Microsoft SQL services with NTLM +authentication enabled. + +Sending a MS-TDS NTLM authentication request with an invalid domain and null +credentials will cause the remote service to respond with a NTLMSSP message +disclosing information to include NetBIOS, DNS, and OS build version. +]] + + +--- +-- @usage +-- nmap -p 1433 --script ms-sql-ntlm-info +-- +-- @output +-- 1433/tcp open ms-sql-s +-- | ms-sql-ntlm-info: +-- | Target_Name: ACTIVESQL +-- | NetBIOS_Domain_Name: ACTIVESQL +-- | NetBIOS_Computer_Name: DB-TEST2 +-- | DNS_Domain_Name: somedomain.com +-- | DNS_Computer_Name: db-test2.somedomain.com +-- | DNS_Tree_Name: somedomain.com +-- |_ Product_Version: 6.1.7601 +-- +--@xmloutput +-- ACTIVESQL +-- ACTIVESQL +-- DB-TEST2 +-- somedomain.com +-- db-test2.somedomain.com +-- somedomain.com +-- 6.1.7601 + + +author = "Justin Cacak" +license = "Same as Nmap--See https://nmap.org/book/man-legal.html" +categories = {"default", "discovery", "safe"} + +dependencies = {"broadcast-ms-sql-discover"} + +local do_action = function(host, port) + + local output = stdnse.output_table() + + local tdsstream = mssql.TDSStream:new() + local status, result = tdsstream:Connect(host, port) + if not status then + return nil + end + + local lp = mssql.LoginPacket:new() + lp:SetUsername("") + lp:SetPassword("") + lp:SetDatabase("") + lp:SetServer(stdnse.get_hostname(host)) + -- Setting domain forces NTLM authentication + lp:SetDomain(".") + + status, result = tdsstream:Send( lp:ToString() ) + if not status then + tdsstream:Disconnect() + return nil + end + + local status, response, errorDetail = tdsstream:Receive() + local recvtime = os.time() + tdsstream:Disconnect() + + local ttype, pos = string.unpack("B", response) + if ttype ~= mssql.TokenType.NTLMSSP_CHALLENGE then + return nil + end + + local data, pos = string.unpack(" 0 then + output.NetBIOS_Domain_Name = ntlm_decoded.netbios_domain_name + end + + if ntlm_decoded.netbios_computer_name and #ntlm_decoded.netbios_computer_name > 0 then + output.NetBIOS_Computer_Name = ntlm_decoded.netbios_computer_name + end + + if ntlm_decoded.dns_domain_name and #ntlm_decoded.dns_domain_name > 0 then + output.DNS_Domain_Name = ntlm_decoded.dns_domain_name + end + + if ntlm_decoded.fqdn and #ntlm_decoded.fqdn > 0 then + output.DNS_Computer_Name = ntlm_decoded.fqdn + end + + if ntlm_decoded.dns_forest_name and #ntlm_decoded.dns_forest_name > 0 then + output.DNS_Tree_Name = ntlm_decoded.dns_forest_name + end + + if ntlm_decoded.os_major_version then + output.Product_Version = string.format("%d.%d.%d", + ntlm_decoded.os_major_version, ntlm_decoded.os_minor_version, ntlm_decoded.os_build) + end + + return output + +end + +local function process_instance(instance) + return do_action(instance.host, instance.port) +end + +action, portrule = mssql.Helper.InitScript(process_instance) -- cgit v1.2.3