mirror of
https://github.com/nmap/nmap.git
synced 2025-12-18 13:39:02 +00:00
Extract and publish more information about redis.
* Get OS * Get redis version (and set it to port.version) * Get architecture (and set it to port.extraversion) * Make and set an application CPE
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
local creds = require "creds"
|
local creds = require "creds"
|
||||||
local redis = require "redis"
|
local redis = require "redis"
|
||||||
|
local nmap = require "nmap"
|
||||||
local shortport = require "shortport"
|
local shortport = require "shortport"
|
||||||
local stdnse = require "stdnse"
|
local stdnse = require "stdnse"
|
||||||
local tab = require "tab"
|
local tab = require "tab"
|
||||||
@@ -37,12 +38,28 @@ portrule = shortport.port_or_service(6379, "redis")
|
|||||||
|
|
||||||
local function fail(err) return ("\n ERROR: %s"):format(err) end
|
local function fail(err) return ("\n ERROR: %s"):format(err) end
|
||||||
|
|
||||||
|
local function cb_parse_version(host, port, val)
|
||||||
|
port.version.version = val
|
||||||
|
port.version.cpe = port.version.cpe or {}
|
||||||
|
table.insert(port.version.cpe, 'cpe:/a:redis:redis:' .. val)
|
||||||
|
nmap.set_port_version(host, port)
|
||||||
|
return val
|
||||||
|
end
|
||||||
|
|
||||||
|
local function cb_parse_architecture(host, port, val)
|
||||||
|
val = ("%s bits"):format(val)
|
||||||
|
port.version.extrainfo = val
|
||||||
|
nmap.set_port_version(host, port)
|
||||||
|
return val
|
||||||
|
end
|
||||||
|
|
||||||
local filter = {
|
local filter = {
|
||||||
|
|
||||||
["redis_version"] = { name = "Version" },
|
["redis_version"] = { name = "Version", func = cb_parse_version },
|
||||||
["arch_bits"] = { name = "Architecture", func = function(v) return ("%s bits"):format(v) end },
|
["os"] = { name = "Operating System" },
|
||||||
|
["arch_bits"] = { name = "Architecture", func = cb_parse_architecture },
|
||||||
["process_id"] = { name = "Process ID"},
|
["process_id"] = { name = "Process ID"},
|
||||||
["uptime"] = { name = "Uptime", func = function(v) return ("%s seconds"):format(v) end },
|
["uptime"] = { name = "Uptime", func = function(h, p, v) return ("%s seconds"):format(v) end },
|
||||||
["used_cpu_sys"]= { name = "Used CPU (sys)"},
|
["used_cpu_sys"]= { name = "Used CPU (sys)"},
|
||||||
["used_cpu_user"] = { name = "Used CPU (user)"},
|
["used_cpu_user"] = { name = "Used CPU (user)"},
|
||||||
["connected_clients"] = { name = "Connected clients"},
|
["connected_clients"] = { name = "Connected clients"},
|
||||||
@@ -53,7 +70,7 @@ local filter = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
local order = {
|
local order = {
|
||||||
"redis_version", "arch_bits", "process_id", "used_cpu_sys",
|
"redis_version", "os", "arch_bits", "process_id", "used_cpu_sys",
|
||||||
"used_cpu_user", "connected_clients", "connected_slaves",
|
"used_cpu_user", "connected_clients", "connected_slaves",
|
||||||
"used_memory_human", "role"
|
"used_memory_human", "role"
|
||||||
}
|
}
|
||||||
@@ -108,9 +125,15 @@ action = function(host, port)
|
|||||||
|
|
||||||
local result = tab.new(2)
|
local result = tab.new(2)
|
||||||
for _, item in ipairs(order) do
|
for _, item in ipairs(order) do
|
||||||
if ( kvs[item] ) then
|
if kvs[item] then
|
||||||
local name = filter[item].name
|
local name = filter[item].name
|
||||||
local val = ( filter[item].func and filter[item].func(kvs[item]) or kvs[item] )
|
local val
|
||||||
|
|
||||||
|
if filter[item].func then
|
||||||
|
val = filter[item].func(host, port, kvs[item])
|
||||||
|
else
|
||||||
|
val = kvs[item]
|
||||||
|
end
|
||||||
tab.addrow(result, name, val)
|
tab.addrow(result, name, val)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user