diff --git a/CHANGELOG b/CHANGELOG index e73158bd0..6676326b3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,8 @@ # Nmap Changelog ($Id$); -*-text-*- +o [NSE][GH#301] Added default credential checks for RICOH Web Image Monitor and + BeEF to http-default-accounts. [nnposter] + o Properly display Next-hop MTU value from ICMP Type 3 Code 4 Fragmentation Required messages when tracing packets or in Nping output. Improper offset meant we were printing the total IP length. [Sławomir Demeszko] diff --git a/nselib/data/http-default-accounts-fingerprints.lua b/nselib/data/http-default-accounts-fingerprints.lua index ec790f779..828cef774 100644 --- a/nselib/data/http-default-accounts-fingerprints.lua +++ b/nselib/data/http-default-accounts-fingerprints.lua @@ -1,3 +1,4 @@ +local base64 = require "base64" local bin = require "bin" local http = require "http" local table = require "table" @@ -199,6 +200,27 @@ table.insert(fingerprints, { return try_http_post_login(host, port, path, "login", "Invalid auth credentials!", {submit="+Login+", userName=user, password=pass}) end }) + +table.insert(fingerprints, { + name = "BeEF", + category = "web", + paths = { + {path = "/ui/authentication/"} + }, + target_check = function (host, port, path, response) + return response.body + and response.body:lower():find("beef authentication", 1, true) + end, + login_combos = { + {username = "beef", password = "beef"} + }, + login_check = function (host, port, path, user, pass) + return try_http_post_login(host, port, path, "login", + "{%s*success%s*:%s*false%s*}", + {["username-cfrm"]=user, ["password-cfrm"]=pass}) + end +}) + --- --ROUTERS --- @@ -424,6 +446,46 @@ table.insert(fingerprints, { end }) +table.insert(fingerprints, { + name = "RICOH Web Image Monitor", + category = "printer", + paths = { + {path = "/web/guest/en/websys/webArch/header.cgi"} + }, + target_check = function (host, port, path, response) + return response.header["server"] + and response.header["server"]:find("^Web%-Server/%d+%.%d+$") + and response.body + and response.body:find("RICOH", 1, true) + end, + login_combos = { + {username = "admin", password = ""}, + {username = "supervisor", password = ""} + }, + login_check = function (host, port, path, user, pass) + -- harvest the login form token + local req1 = http.get(host, port, url.absolute(path, "authForm.cgi"), {no_cache=true, redirect_ok = false, cookies = "cookieOnOffChecker=on"}) + if req1.status ~= 200 then return false end + local token = req1.body and req1.body:match('