diff --git a/nselib/netbios.lua b/nselib/netbios.lua
index d2783877f..d0b9e5ae3 100644
--- a/nselib/netbios.lua
+++ b/nselib/netbios.lua
@@ -264,27 +264,12 @@ function do_nbstat(host)
local socket = nmap.new_socket()
local encoded_name = name_encode("*")
local statistics
- local reg
- if type(host) == "string" then --ip
- stdnse.print_debug(3, "Performing nbstat on host '%s'", host)
- nmap.registry.netbios = nmap.registry.netbios or {}
- nmap.registry.netbios[host] = nmap.registry.netbios[host] or {}
- reg = nmap.registry.netbios[host]
- else
- stdnse.print_debug(3, "Performing nbstat on host '%s'", host.ip)
- if host.registry.netbios == nil and
- nmap.registry.netbios ~= nil and
- nmap.registry.netbios[host.ip] ~= nil then
- host.registry.netbios = nmap.registry.netbios[host.ip]
- end
- host.registry.netbios = host.registry.netbios or {}
- reg = host.registry.netbios
- end
- -- Check if it's cached in the registry for this host
- if(reg["nbstat_names"] ~= nil) then
+ stdnse.print_debug(3, "Performing nbstat on host '%s'", host)
+ -- Check if it's cased in the registry for this host
+ if(nmap.registry["nbstat_names_" .. host] ~= nil) then
stdnse.print_debug(3, " |_ [using cached value]")
- return true, reg["nbstat_names"], reg["nbstat_statistics"]
+ return true, nmap.registry["nbstat_names_" .. host], nmap.registry["nbstat_statistics_" .. host]
end
-- Create the query header
@@ -384,8 +369,8 @@ function do_nbstat(host)
pos, statistics = bin.unpack(string.format(">A%d", rrlength), result, pos)
-- Put it in the registry, in case anybody else needs it
- reg["nbstat_names"] = names
- reg["nbstat_statistics"] = statistics
+ nmap.registry["nbstat_names_" .. host] = names
+ nmap.registry["nbstat_statistics_" .. host] = statistics
return true, names, statistics
diff --git a/nselib/smbauth.lua b/nselib/smbauth.lua
index e94490de7..3836059ec 100644
--- a/nselib/smbauth.lua
+++ b/nselib/smbauth.lua
@@ -105,11 +105,11 @@ local ACCOUNT_TYPES = {
}
local function account_exists(host, username, domain)
- if(host.registry['smbaccounts'] == nil) then
+ if(nmap.registry[host.ip] == nil or nmap.registry[host.ip]['smbaccounts'] == nil) then
return false
end
- for i, j in pairs(host.registry['smbaccounts']) do
+ for i, j in pairs(nmap.registry[host.ip]['smbaccounts']) do
if(j['username'] == username and j['domain'] == domain) then
return true
end
@@ -120,13 +120,13 @@ end
function next_account(host, num)
if(num == nil) then
- if(host.registry['smbindex'] == nil) then
- host.registry['smbindex'] = 1
+ if(nmap.registry[host.ip]['smbindex'] == nil) then
+ nmap.registry[host.ip]['smbindex'] = 1
else
- host.registry['smbindex'] = host.registry['smbindex'] + 1
+ nmap.registry[host.ip]['smbindex'] = nmap.registry[host.ip]['smbindex'] + 1
end
else
- host.registry['smbindex'] = num
+ nmap.registry[host.ip]['smbindex'] = num
end
end
@@ -165,8 +165,11 @@ function add_account(host, username, domain, password, password_hash, hash_type,
return
end
- if(host.registry['smbaccounts'] == nil) then
- host.registry['smbaccounts'] = {}
+ if(nmap.registry[host.ip] == nil) then
+ nmap.registry[host.ip] = {}
+ end
+ if(nmap.registry[host.ip]['smbaccounts'] == nil) then
+ nmap.registry[host.ip]['smbaccounts'] = {}
end
-- Determine the type of account, if it wasn't given
@@ -201,10 +204,10 @@ function add_account(host, username, domain, password, password_hash, hash_type,
new_entry['account_type'] = account_type
-- Insert the new entry into the table
- table.insert(host.registry['smbaccounts'], new_entry)
+ table.insert(nmap.registry[host.ip]['smbaccounts'], new_entry)
-- Sort the table based on the account type (we want anonymous at the end, administrator at the front)
- table.sort(host.registry['smbaccounts'], function(a,b) return a['account_type'] > b['account_type'] end)
+ table.sort(nmap.registry[host.ip]['smbaccounts'], function(a,b) return a['account_type'] > b['account_type'] end)
-- Print a debug message
stdnse.print_debug(1, "SMB: Added account '%s' to account list", username)
@@ -212,7 +215,7 @@ function add_account(host, username, domain, password, password_hash, hash_type,
-- Reset the credentials
next_account(host, 1)
--- io.write("\n\n" .. nsedebug.tostr(host.registry['smbaccounts']) .. "\n\n")
+-- io.write("\n\n" .. nsedebug.tostr(nmap.registry[host.ip]['smbaccounts']) .. "\n\n")
end
---Retrieve the current set of credentials set in the registry. If these fail, next_credentials should be
@@ -222,12 +225,12 @@ end
--@return (result, username, domain, password, password_hash, hash_type) If result is false, username is an error message. Otherwise, username and password are
-- the current username and password that should be used.
function get_account(host)
- if(host.registry['smbindex'] == nil) then
- host.registry['smbindex'] = 1
+ if(nmap.registry[host.ip]['smbindex'] == nil) then
+ nmap.registry[host.ip]['smbindex'] = 1
end
- local index = host.registry['smbindex']
- local account = host.registry['smbaccounts'][index]
+ local index = nmap.registry[host.ip]['smbindex']
+ local account = nmap.registry[host.ip]['smbaccounts'][index]
if(account == nil) then
return false, "No accounts left to try"
@@ -241,13 +244,18 @@ end
--
--@param host The host object.
function init_account(host)
+ -- Create the key if it exists
+ if(nmap.registry[host.ip] == nil) then
+ nmap.registry[host.ip] = {}
+ end
+
-- Don't run this more than once for each host
- if(host.registry['smbaccounts'] ~= nil) then
+ if(nmap.registry[host.ip]['smbaccounts'] ~= nil) then
return
end
-- Create the list
- host.registry['smbaccounts'] = {}
+ nmap.registry[host.ip]['smbaccounts'] = {}
-- Add the anonymous/guest accounts
add_account(host, '', '', '', nil, 'none')
diff --git a/scripts/cvs-brute-repository.nse b/scripts/cvs-brute-repository.nse
index d4eb2b067..465c4082b 100644
--- a/scripts/cvs-brute-repository.nse
+++ b/scripts/cvs-brute-repository.nse
@@ -66,8 +66,10 @@ Driver =
if ( not(status) and err:match("I HATE YOU") ) then
-- let's store the repositories in the registry so the brute
-- script can use them later.
- self.host.registry.cvs_repos = self.host.registry.cvs_repos or {}
- table.insert(self.host.registry.cvs_repos, password)
+ nmap.registry.cvs = nmap.registry.cvs or {}
+ nmap.registry.cvs[self.host.ip] = nmap.registry.cvs[self.host.ip] or {}
+ nmap.registry.cvs[self.host.ip].repos = nmap.registry.cvs[self.host.ip].repos or {}
+ table.insert(nmap.registry.cvs[self.host.ip].repos, password)
return true, brute.Account:new(username, password, 0)
end
return false, brute.Error:new( "Incorrect password" )
diff --git a/scripts/cvs-brute.nse b/scripts/cvs-brute.nse
index a3c82bed9..47816e570 100644
--- a/scripts/cvs-brute.nse
+++ b/scripts/cvs-brute.nse
@@ -79,11 +79,14 @@ Driver =
local function getDiscoveredRepos(host)
- if ( not(host.registry.cvs_repos)) then
+ if ( not(nmap.registry.cvs) or
+ not(nmap.registry.cvs[host.ip]) or
+ not(nmap.registry.cvs[host.ip].repos)
+ ) then
return
end
- return host.registry.cvs_repos
+ return nmap.registry.cvs[host.ip].repos
end
action = function(host, port)
diff --git a/scripts/nbstat.nse b/scripts/nbstat.nse
index c94372636..b9b7a2cee 100644
--- a/scripts/nbstat.nse
+++ b/scripts/nbstat.nse
@@ -80,22 +80,22 @@ action = function(host)
-- Get the list of NetBIOS names
- status, names, statistics = netbios.do_nbstat(host)
- status, names, statistics = netbios.do_nbstat(host)
- status, names, statistics = netbios.do_nbstat(host)
- status, names, statistics = netbios.do_nbstat(host)
+ status, names, statistics = netbios.do_nbstat(host.ip)
+ status, names, statistics = netbios.do_nbstat(host.ip)
+ status, names, statistics = netbios.do_nbstat(host.ip)
+ status, names, statistics = netbios.do_nbstat(host.ip)
if(status == false) then
return stdnse.format_output(false, names)
end
-- Get the server name
- status, server_name = netbios.get_server_name(host, names)
+ status, server_name = netbios.get_server_name(host.ip, names)
if(status == false) then
return stdnse.format_output(false, server_name)
end
-- Get the logged in user
- status, user_name = netbios.get_user_name(host, names)
+ status, user_name = netbios.get_user_name(host.ip, names)
if(status == false) then
return stdnse.format_output(false, user_name)
end
diff --git a/scripts/path-mtu.nse b/scripts/path-mtu.nse
index a5b9d7b81..7a7451007 100644
--- a/scripts/path-mtu.nse
+++ b/scripts/path-mtu.nse
@@ -261,7 +261,10 @@ end
-- Sets necessary probe data in registry
local setreg = function(host, proto, port)
- host.registry['pathmtuprobe'] = {
+ if not nmap.registry[host.ip] then
+ nmap.registry[host.ip] = {}
+ end
+ nmap.registry[host.ip]['pathmtuprobe'] = {
['proto'] = proto,
['port'] = port
}
@@ -298,8 +301,8 @@ action = function(host)
local mtuset
local sock = nmap.new_dnet()
local pcap = nmap.new_socket()
- local proto = host.registry['pathmtuprobe']['proto']
- local port = host.registry['pathmtuprobe']['port']
+ local proto = nmap.registry[host.ip]['pathmtuprobe']['proto']
+ local port = nmap.registry[host.ip]['pathmtuprobe']['port']
local saddr = packet.toip(host.bin_ip_src)
local daddr = packet.toip(host.bin_ip)
local try = nmap.new_try()
diff --git a/scripts/snmp-interfaces.nse b/scripts/snmp-interfaces.nse
index 9a5004d56..83e197622 100644
--- a/scripts/snmp-interfaces.nse
+++ b/scripts/snmp-interfaces.nse
@@ -45,7 +45,6 @@ dependencies = {"snmp-brute"}
-- Revised 04/11/2010 - v0.2 - moved snmp_walk to snmp library
-- Revised 08/10/2010 - v0.3 - prerule; add interface addresses to Nmap's target list (Kris Katterjohn)
-- Revised 05/27/2011 - v0.4 - action; add MAC addresses to nmap.registry[host.ip]["mac-geolocation"] (Gorjan Petrovski)
--- Revised 07/31/2012 - v0.5 - action; remove mac-geolocation changes (script removed from trunk)
@@ -420,6 +419,14 @@ action = function(host, port)
srvport = port.number
end
+ -- table for mac-geolocation.nse
+ if not nmap.registry[srvhost] then
+ nmap.registry[srvhost] = {}
+ nmap.registry[srvhost]["mac-geolocation"] = {}
+ elseif not nmap.registry[srvhost]["mac-geolocation"] then
+ nmap.registry[srvhost]["mac-geolocation"] = {}
+ end
+
socket:set_timeout(5000)
try(socket:connect(srvhost, srvport, "udp"))
@@ -446,6 +453,14 @@ action = function(host, port)
end
local output = stdnse.format_output( true, build_results(interfaces) )
+
+ -- insert the MAC addresses into the mac-geolocation table
+ for _,item in ipairs(interfaces) do
+ if item.phys_addr then
+ table.insert(nmap.registry[srvhost]["mac-geolocation"], item.phys_addr:match("^(%x+:%x+:%x+:%x+:%x+:%x+)"))
+ end
+ end
+ -- wtf is this? table.insert(nmap.registry[srvhost]["mac-geolocation"], "00:23:69:2a:b1:27")
if SCRIPT_TYPE == "prerule" and target.ALLOW_NEW_TARGETS then
local sum = 0