Add human-readable descriptions to CheckCode returns in windows/http exploit modules

This commit is contained in:
adfoster-r7
2026-04-22 11:58:31 +01:00
parent 9efc727462
commit 370c35c1e2
112 changed files with 318 additions and 318 deletions
@@ -100,7 +100,7 @@ class MetasploitModule < Msf::Exploit::Remote
print_status('Vulnerability is present, though authentication is required.')
end
CheckCode::Appears
CheckCode::Appears('Target appears to be vulnerable')
end
def send_db_backup_request(filename)
@@ -97,16 +97,16 @@ class MetasploitModule < Msf::Exploit::Remote
'page' => 'version.frag'
}
)
return CheckCode::Unknown unless res&.code == 200
return CheckCode::Unknown('Target did not return HTTP 200') unless res&.code == 200
version = res.get_html_document.xpath('string(//input[starts-with(@value, "Version")]/@value)')
return CheckCode::Unknown unless version =~ /Version (\d+\.\d+) \(Build ([\d.]+)\)/
return CheckCode::Unknown('Could not extract version information') unless version =~ /Version (\d+\.\d+) \(Build ([\d.]+)\)/
version = "#{Regexp.last_match(1)}.#{Regexp.last_match(2)}"
vprint_status("Identified the version as #{version}")
return CheckCode::Safe if Rex::Version.new(version) >= Rex::Version.new('5.7.03.6112')
return CheckCode::Safe("Version #{version} is not vulnerable") if Rex::Version.new(version) >= Rex::Version.new('5.7.03.6112')
CheckCode::Appears
CheckCode::Appears("Detected vulnerable version: #{version}")
end
def exploit
@@ -86,9 +86,9 @@ class MetasploitModule < Msf::Exploit::Remote
def check
if auto_target
Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -78,10 +78,10 @@ class MetasploitModule < Msf::Exploit::Remote
if (res.to_s =~ /<H1>BAD REQUEST<\/H1><P>Your client sent a request that this server didn't understand.<br>Request:\s(\w+)/)
if ($1 == rand)
return Exploit::CheckCode::Vulnerable
return Exploit::CheckCode::Vulnerable('Target is vulnerable')
end
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -98,10 +98,10 @@ class MetasploitModule < Msf::Exploit::Remote
},
1
)
return Exploit::CheckCode::Vulnerable
return Exploit::CheckCode::Vulnerable('Target is vulnerable')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -171,12 +171,12 @@ class MetasploitModule < Msf::Exploit::Remote
response = send_request_raw({ 'uri' => '/' }, 5)
if response.nil?
vprint_status("No response to request")
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
http_fingerprint({ :response => response }) # Custom Server header matching
code = Exploit::CheckCode::Appears
code = Exploit::CheckCode::Appears('Target appears to be vulnerable')
case response['Server']
when "Oracle HTTP Server Powered by Apache/1.3.12 (Win32) ApacheJServ/1.1 mod_ssl/2.6.4 OpenSSL/0.9.5a mod_perl/1.22"
@@ -187,10 +187,10 @@ class MetasploitModule < Msf::Exploit::Remote
vprint_status("This looks like an Oracle 9.2.0 Apache service (multiple tries allowed)")
when /IBM_HTTP_SERVER\/1\.3\.(19\.[3-9]|2[0-9]\.)/
vprint_status("IBM backported the patch, this system is not vulnerable")
code = Exploit::CheckCode::Safe
code = Exploit::CheckCode::Safe('Target is not vulnerable')
when /Apache(-AdvancedExtranetServer)?\/(1\.([0-2]\.[0-9]|3\.([0-9][^0-9]|[0-1][0-9]|2[0-5]))|2\.0.([0-9][^0-9]|[0-2][0-9]|3[0-8]))/
else
code = Exploit::CheckCode::Safe
code = Exploit::CheckCode::Safe('Target is not vulnerable')
end
vprint_status("Server: #{response['Server']}")
@@ -74,10 +74,10 @@ class MetasploitModule < Msf::Exploit::Remote
}, 2)
if (res.to_s =~ /Apache/) # This could be smarter.
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -66,9 +66,9 @@ class MetasploitModule < Msf::Exploit::Remote
if (resp and (m = resp.match(/Server: Apache\/(.*) \(Win32\)(.*) mod_jk\/1\.2\.20/))) then
vprint_status("Apache version detected : #{m[1]}")
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
@@ -76,20 +76,20 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res.nil?
vprint_error('No server response, check configuration')
return CheckCode::Safe
return CheckCode::Safe('No server response')
elsif res.code != 200
vprint_error('No server response, check configuration')
return CheckCode::Safe
return CheckCode::Safe('Unexpected response code from target')
end
if res.body =~ /Apache Tika (\d.[\d]+)/
version = Rex::Version.new($1)
vprint_status("Apache Tika Version Detected: #{version}")
if version.between?(Rex::Version.new('1.15'), Rex::Version.new('1.17'))
return CheckCode::Vulnerable
return CheckCode::Vulnerable("Target is vulnerable based on version: #{version}")
end
end
CheckCode::Safe
CheckCode::Safe('Target is not vulnerable')
end
def execute_command(cmd, opts = {})
@@ -55,10 +55,10 @@ class MetasploitModule < Msf::Exploit::Remote
def check
info = http_fingerprint # check method
if (info =~ /BadBlue\/2\.5/)
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -92,13 +92,13 @@ class MetasploitModule < Msf::Exploit::Remote
case fingerprint
when /Version found/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
when /BEA WebLogic connector vulnerable/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
when /BEA WebLogic connector undefined/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
when /BEA WebLogic connector no vulnerable/, /BEA WebLogic connector not found/
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
@@ -69,10 +69,10 @@ class MetasploitModule < Msf::Exploit::Remote
banner = sock.get_once
if (banner.to_s =~ /GET and POST methods are the only methods supported at this time/) # Unique?
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -80,7 +80,7 @@ class MetasploitModule < Msf::Exploit::Remote
if version && Rex::Version.new(version) <= Rex::Version.new('2.5')
print_good("Version Detected: #{version}")
return CheckCode::Appears
return CheckCode::Appears("Detected vulnerable version: #{version}")
end
# try a backup plan, at least verify the title
@@ -95,9 +95,9 @@ class MetasploitModule < Msf::Exploit::Remote
if res.body =~ %r{<title>xPost</title>}
vprint_good('HTML Title includes xPost')
return CheckCode::Detected
return CheckCode::Detected('Target service detected as xPost')
end
CheckCode::Safe
CheckCode::Safe('Target is not vulnerable')
rescue ::Rex::ConnectionError
CheckCode::Safe('Could not connect to the web service, check URI Path and IP')
end
@@ -357,10 +357,10 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res && res.code == 200 && res.body =~ /PermissionRecord/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def send_injection(dll)
@@ -72,10 +72,10 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res and res.code == 200 and res.body =~ /<title>DataHub - Web Data Browser<\/title>/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -67,14 +67,15 @@ class MetasploitModule < Msf::Exploit::Remote
b64_version = get_version(path)
if b64_version.empty?
vprint_error("Unable to determine the version number")
return Exploit::CheckCode::Unknown('Could not determine the target version')
else
b64_version = Rex::Text.decode_base64(b64_version)
if b64_version =~ /^[0-6]\.1/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{b64_version}")
end
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{b64_version}")
end
def get_version(path)
@@ -99,15 +99,15 @@ class MetasploitModule < Msf::Exploit::Remote
end
if build.nil?
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
elsif Rex::Version.new(build) < Rex::Version.new("80293")
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{build}")
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{build}")
end
end
Exploit::CheckCode::Unknown
Exploit::CheckCode::Unknown('Could not determine the target status')
end
def exploit
@@ -78,15 +78,15 @@ class MetasploitModule < Msf::Exploit::Remote
end
if build.nil?
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
elsif Rex::Version.new(build) < Rex::Version.new("90055")
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{build}")
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{build}")
end
end
Exploit::CheckCode::Unknown
Exploit::CheckCode::Unknown('Could not determine the target status')
end
def exploit
@@ -68,10 +68,10 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res and res.code == 200 and res.body =~ /Disk Pulse Enterprise v9\.0\.34/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -67,10 +67,10 @@ class MetasploitModule < Msf::Exploit::Remote
)
if res && res.code == 200 && res.body =~ /Disk Pulse Enterprise v9\.9\.16/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -90,16 +90,16 @@ class MetasploitModule < Msf::Exploit::Remote
if res && res.code == 200
if res.body =~ /DiskBoss Enterprise v(7\.4\.28|7\.5\.12|8\.2\.14)/
return Exploit::CheckCode::Vulnerable
return Exploit::CheckCode::Vulnerable('Target is vulnerable')
elsif res.body =~ /DiskBoss Enterprise/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
else
vprint_error('Unable to determine due to a HTTP connection timeout')
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -84,17 +84,17 @@ class MetasploitModule < Msf::Exploit::Remote
if version
vprint_status("Version detected: #{version}")
if version =~ /9\.(1|3)\.14/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
end
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected("Target detected with version: #{version}")
end
else
vprint_error('Unable to determine due to a HTTP connection timeout')
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Disk Savvy Enterprise not detected')
end
def exploit
@@ -69,17 +69,17 @@ class MetasploitModule < Msf::Exploit::Remote
if version
vprint_status("Version detected: #{version}")
if version =~ /9\.5\.12/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
end
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected("Target detected with version: #{version}")
end
else
vprint_error('Unable to determine due to a HTTP connection timeout')
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Disk Sorter Enterprise not detected')
end
def exploit
@@ -69,10 +69,10 @@ class MetasploitModule < Msf::Exploit::Remote
def check
rand_text = Rex::Text.rand_text_alphanumeric(rand(4..10))
if inject_php("echo \"#{rand_text}\"")&.chomp == rand_text
return Exploit::CheckCode::Vulnerable
return Exploit::CheckCode::Vulnerable('Target is vulnerable')
end
Exploit::CheckCode::Unknown
Exploit::CheckCode::Unknown('Could not determine the target status')
end
def exploit
@@ -345,9 +345,9 @@ class MetasploitModule < Msf::Exploit::Remote
print_good('Custom error page detected.')
else
print_error('IIS Error Page detected.')
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
# ===========================
@@ -82,10 +82,10 @@ class MetasploitModule < Msf::Exploit::Remote
def check
info = http_fingerprint # check method
if info and (info =~ /Easy\-Web Server\//)
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -67,21 +67,21 @@ class MetasploitModule < Msf::Exploit::Remote
def check
version = get_version
if not version
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('EFS Easy Chat Server not detected')
end
vprint_status "Found version: #{version}"
if version !~ /^(2\.\d|3\.0|3\.1)$/
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{version}")
end
path = get_install_path
if not path
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected("Target detected with version: #{version}")
end
vprint_status "Found path: #{path}"
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
end
#
@@ -97,14 +97,14 @@ class MetasploitModule < Msf::Exploit::Remote
end
def check
code = Exploit::CheckCode::Safe
version = get_version
code = Exploit::CheckCode::Safe("Version #{version} is not vulnerable")
if version.nil?
code = Exploit::CheckCode::Unknown
code = Exploit::CheckCode::Unknown('Could not determine the target status')
elsif version == "5.3"
code = Exploit::CheckCode::Appears
code = Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
elsif version == "4.0"
code = Exploit::CheckCode::Appears
code = Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
end
code
@@ -99,10 +99,10 @@ class MetasploitModule < Msf::Exploit::Remote
)
if res and res.code == 200 and res.body =~ /#{fingerprint}/ and res.body !~ /Error/
return Exploit::CheckCode::Vulnerable
return Exploit::CheckCode::Vulnerable('Successfully executed XSLT code on target')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target does not appear to be vulnerable')
end
def uri_path
@@ -141,10 +141,10 @@ class MetasploitModule < Msf::Exploit::Remote
)
if res and res.code == 200 and res.body =~ /#{fingerprint}/ and res.body !~ /Error/
return Exploit::CheckCode::Vulnerable
return Exploit::CheckCode::Vulnerable('Target is vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def uri_path
@@ -68,16 +68,16 @@ class MetasploitModule < Msf::Exploit::Remote
})
unless res && res.code == 200 && res.headers['Server']
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
if res.headers['Server'] =~ /Ericom AccessNow Server/
return Exploit::CheckCode::Appears # Ericom AccessNow 2.4
return Exploit::CheckCode::Appears('Ericom AccessNow 2.4 detected')
elsif res && res.code == 200 && res.headers['Server'] && res.headers['Server'] =~ /Ericom Access Server/
return Exploit::CheckCode::Detected # Ericom AccessNow 3
return Exploit::CheckCode::Detected('Ericom AccessNow 3 detected')
end
Exploit::CheckCode::Unknown
Exploit::CheckCode::Unknown('Could not determine the target status')
end
def exploit_uri
@@ -71,19 +71,19 @@ class MetasploitModule < Msf::Exploit::Remote
def check
state = get_request_setup
viewstate = state[:viewstate]
return CheckCode::Unknown if viewstate.nil?
return CheckCode::Unknown('Could not retrieve ViewState') if viewstate.nil?
viewstate = Rex::Text.decode_base64(viewstate)
body = viewstate[0...-20]
signature = viewstate[-20..-1]
unless generate_viewstate_signature(state[:viewstate_generator], state[:session_id], body) == signature
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
# we've validated the signature matches based on the data we have and thus
# proven that we are capable of signing a viewstate ourselves
CheckCode::Vulnerable
CheckCode::Vulnerable('Target is vulnerable')
end
def generate_viewstate(generator, session_id, cmd)
@@ -91,16 +91,16 @@ class MetasploitModule < Msf::Exploit::Remote
def check
@ssrf_email ||= Faker::Internet.email
res = send_http('GET', '/mapi/nspi/')
return CheckCode::Unknown if res.nil?
return CheckCode::Unknown('No response received from target') if res.nil?
return CheckCode::Unknown('Server responded with 401 Unauthorized.') if res.code == 401
return CheckCode::Safe unless res.code == 200 && res.get_html_document.xpath('//head/title').text == 'Exchange MAPI/HTTP Connectivity Endpoint'
return CheckCode::Safe('Exchange MAPI/HTTP endpoint not detected') unless res.code == 200 && res.get_html_document.xpath('//head/title').text == 'Exchange MAPI/HTTP Connectivity Endpoint'
# actually run the powershell cmdlet and see if it works, this will fail if:
# * the credentials are incorrect (USERNAME, PASSWORD, DOMAIN)
# * the exchange emergency mitigation service M1 rule is in place
return CheckCode::Safe unless execute_powershell('Get-Mailbox')
return CheckCode::Safe('PowerShell Get-Mailbox cmdlet failed') unless execute_powershell('Get-Mailbox')
CheckCode::Vulnerable
CheckCode::Vulnerable('Target is vulnerable')
rescue Msf::Exploit::Failed => e
CheckCode::Safe(e.to_s)
end
@@ -125,10 +125,10 @@ class MetasploitModule < Msf::Exploit::Remote
def check
@ssrf_email ||= Faker::Internet.email
res = send_http('GET', '/mapi/nspi/')
return CheckCode::Unknown if res.nil?
return CheckCode::Safe unless res.code == 200 && res.get_html_document.xpath('//head/title').text == 'Exchange MAPI/HTTP Connectivity Endpoint'
return CheckCode::Unknown('No response received from target') if res.nil?
return CheckCode::Safe('Exchange MAPI/HTTP endpoint not detected') unless res.code == 200 && res.get_html_document.xpath('//head/title').text == 'Exchange MAPI/HTTP Connectivity Endpoint'
CheckCode::Vulnerable
CheckCode::Vulnerable('Target is vulnerable')
end
def cmd_windows_generic?
@@ -56,9 +56,9 @@ class MetasploitModule < Msf::Exploit::Remote
end
# Checks for the `WWW-Authenticate` header in the response
if res.code && res.code == 401 && res.headers['WWW-Authenticate'].include?('Basic realm="File Sharing Wizard"')
CheckCode::Detected
CheckCode::Detected('Target service detected')
else
CheckCode::Safe
CheckCode::Safe('Target is not vulnerable')
end
end
@@ -97,7 +97,7 @@ class MetasploitModule < Msf::Exploit::Remote
end
def check
check_code = Exploit::CheckCode::Safe
check_code = Exploit::CheckCode::Safe('Target is not vulnerable')
res = send_request_cgi(
{
@@ -107,7 +107,7 @@ class MetasploitModule < Msf::Exploit::Remote
)
unless res
check_code = Exploit::CheckCode::Unknown
check_code = Exploit::CheckCode::Unknown('Could not determine the target status')
end
if res && res.code == 500 &&
@@ -115,7 +115,7 @@ class MetasploitModule < Msf::Exploit::Remote
res.body.to_s.include?("java.lang.NullPointerException") &&
res.body.to_s.include?("com.hp.autopass")
check_code = Exploit::CheckCode::Detected
check_code = Exploit::CheckCode::Detected('Target service detected')
end
check_code
@@ -70,17 +70,17 @@ class MetasploitModule < Msf::Exploit::Remote
if res.nil?
vprint_error("Unable to determine, because the request timed out.")
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
if res.code == 200 and res.headers['Content-Type'] =~ /application\/doc/ and res.body =~ /com\.h3c\.imc\.bims\.acs\.server\.UploadServlet/
vprint_status("Upload interface found. Must be tested to verify vulnerable state.")
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
elsif res.code == 405 and res.message =~ /Method Not Allowed/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -66,11 +66,11 @@ class MetasploitModule < Msf::Exploit::Remote
unless res
vprint_error 'Connection failed'
return CheckCode::Unknown
return CheckCode::Unknown('Could not determine the target status')
end
unless res.code == 200 && res.body.include?('login_logo_hp.png')
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
# Java serialized ysoserial JSON1 synchronous sleep command, from https://github.com/federicodotta/Java-Deserialization-Scanner/blob/43653733ae58f63a9a4ef257ac2f276d1ca3c0a8/src/burp/BurpExtender.java
@@ -87,15 +87,15 @@ class MetasploitModule < Msf::Exploit::Remote
unless res
vprint_error 'Connection failed'
return CheckCode::Detected
return CheckCode::Unknown('Connection failed')
end
diff = t2 - t1
if res.code == 500 && res.body.include?('HPE Intelligent Management Center') && diff >= 10
print_good("Response received after #{diff} seconds.")
return CheckCode::Vulnerable
return CheckCode::Vulnerable('Target is vulnerable')
else
return CheckCode::Appears
return CheckCode::Appears('Target appears to be vulnerable')
end
end
@@ -69,10 +69,10 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res and res.code == 200 and res.body =~ /HP Intelligent Management Center/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -130,10 +130,10 @@ class MetasploitModule < Msf::Exploit::Remote
if res and res.code == 200 and res.body.to_s =~ /HP Service Emulation/
vprint_good("Traversal exists and parameters are correct...")
return Exploit::CheckCode::Vulnerable
return Exploit::CheckCode::Vulnerable("Target is vulnerable with Tomcat version #{tomcat_version}")
elsif res and res.code == 500 and res.body.to_s =~ /FileNotFoundException/
vprint_warning("Traversal appears to exist, try adjusting parameters DEPTH and INSTALLPATH...")
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{tomcat_version}")
else
vprint_error("Failed to verify the directory traversal...")
end
@@ -148,10 +148,10 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res and res.code == 200 and res.body.to_s =~ /wsdl.*EmulationAdmin/ and res.body.to_s =~ /copyFileToServerRequest/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Vulnerable web service and method detected')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -178,16 +178,16 @@ class MetasploitModule < Msf::Exploit::Remote
if res and res.code == 200 and res.body =~ /HP Managed Printing Administration/ and res.body =~ /<dd>v(.*)<\/dd>/
version = $1
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('HP Managed Printing Administration not detected')
end
vprint_status("HP MPA Version Detected: #{version}")
if version <= "2.6.3"
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{version}")
end
def exploit
+3 -3
View File
@@ -186,13 +186,13 @@ class MetasploitModule < Msf::Exploit::Remote
resp = send_request_raw({ 'uri' => '/topology/home' }, 5)
if resp.nil?
vprint_status("No response to request")
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
if (resp.body =~ /NNM Release B\.07\.53/ || resp.body =~ /NNM Release B\.07\.52/ || resp.body =~ /NNM Release B\.07\.51/)
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
@@ -63,7 +63,7 @@ class MetasploitModule < Msf::Exploit::Remote
def check
session = get_session
if session.nil?
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
res = send_request_cgi({
@@ -72,10 +72,10 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res and res.code == 200 and res.body =~ /"success":"true"/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def get_session
@@ -63,7 +63,7 @@ class MetasploitModule < Msf::Exploit::Remote
def check
session = get_session
if session.nil?
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
res = send_request_cgi({
@@ -72,10 +72,10 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res and res.code == 200 and res.body =~ /domainName/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def get_session
@@ -79,10 +79,10 @@ class MetasploitModule < Msf::Exploit::Remote
res = send_soap_request(op, key, value)
if res and res.code == 200 and res.body =~ /runOMAgentCommandResponse/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -90,10 +90,10 @@ class MetasploitModule < Msf::Exploit::Remote
def check
info = http_fingerprint # check method
if info and (info =~ /httpdx\/(.*) \(Win32\)/)
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -144,10 +144,10 @@ For now, that will have to be done manually.
if version
print_status("HTTPDX version detected : #{version}")
if (version =~ /1\.4/) or (version == "1.5")
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
end
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe("Target is not vulnerable#{version ? " based on version: #{version}" : ''}")
end
def exploit
@@ -73,15 +73,15 @@ class MetasploitModule < Msf::Exploit::Remote
connect
rescue
print_error("Could not connect to target!")
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
sock.put("GET / HTTP/1.0\r\n\r\n")
res = sock.get_once
if res =~ /intrasrv 1\.0/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
@@ -149,14 +149,14 @@ class MetasploitModule < Msf::Exploit::Remote
if res and res.code == 200 and res.body =~ /<meta name="application-name" content="JIRA" data-name="jira" data-version="([0-9\.]*)">/
version = $1
else
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
if version <= "6.0.3"
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected("Target detected with version: #{version}")
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{version}")
end
def exploit
@@ -55,9 +55,9 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res && res.code == 302 && res.body && res.body.to_s =~ /mainLogon\.asp\?logout=([0-9]*)/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
else
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
end
@@ -56,10 +56,10 @@ class MetasploitModule < Msf::Exploit::Remote
# the vuln was patched by removing uploadImage.asp. if the page is there, calling it without params will return 500, else 404
unless res and res.code == 500
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
def exploit
@@ -79,10 +79,10 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res && res.body =~ /SyncServer Web Service/i # SOAP endpoint disco / WSDL
return CheckCode::Detected
return CheckCode::Detected('Target service detected')
end
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -55,10 +55,10 @@ class MetasploitModule < Msf::Exploit::Remote
def check
info = http_fingerprint
if info and (info =~ /kolibri-2\.0/)
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -63,14 +63,14 @@ class MetasploitModule < Msf::Exploit::Remote
if res && res.code == 200 && res.body && res.body.to_s =~ /MarkVision Enterprise ([\d\.]+)/
version = $1
else
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
if Rex::Version.new(version) <= Rex::Version.new('2.0.0')
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{version}")
end
def exploit
@@ -69,13 +69,13 @@ class MetasploitModule < Msf::Exploit::Remote
return Exploit::CheckCode::Unknown("#{peer} - Could not connect to web service - no response") if res.nil?
version_text = res.get_html_document.xpath('//h2')[0]&.text&.gsub('v', '')
return Exploit::CheckCode::Unknown if version_text.blank? || version_text == 'Unknown'
return Exploit::CheckCode::Unknown('Could not determine version') if version_text.blank? || version_text == 'Unknown'
version = Rex::Version.new(version_text)
return Exploit::CheckCode::Unknown if version == Rex::Version.new('0')
return Exploit::CheckCode::Unknown('Could not parse version') if version == Rex::Version.new('0')
return Exploit::CheckCode::Appears("Version: #{version}") if version <= Rex::Version.new('3.21.0')
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{version}")
end
def generate_jsp_payload
@@ -68,13 +68,13 @@ class MetasploitModule < Msf::Exploit::Remote
return Exploit::CheckCode::Unknown("#{peer} - Could not connect to web service - no response") if res.nil?
version_text = res.get_html_document.xpath('//h2')[0]&.text&.gsub('v', '')
return Exploit::CheckCode::Unknown if version_text.blank? || version_text == 'Unknown'
return Exploit::CheckCode::Unknown('Could not determine version') if version_text.blank? || version_text == 'Unknown'
version = Rex::Version.new(version_text)
return Exploit::CheckCode::Unknown if version == Rex::Version.new('0')
return Exploit::CheckCode::Unknown('Could not parse version') if version == Rex::Version.new('0')
return Exploit::CheckCode::Appears("Version: #{version}") if version <= Rex::Version.new('3.21.0')
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{version}")
end
def exploit
@@ -62,7 +62,7 @@ class MetasploitModule < Msf::Exploit::Remote
'uri' => normalize_uri(target_uri.path, 'config.js')
})
return CheckCode::Unknown unless res&.code == 200
return CheckCode::Unknown('Target did not return HTTP 200') unless res&.code == 200
js_object = res.body.to_s[/window\.globalConfig = (\{.+\})/m, 1]
@@ -74,14 +74,14 @@ class MetasploitModule < Msf::Exploit::Remote
full_version = data.fetch('magicInfoFrontEndVersion', nil)
version = full_version[/Server\s+([\d.]+)/, 1]
return CheckCode::Unknown unless version
return CheckCode::Unknown('Could not extract version from response') unless version
unless Rex::Version.new(version) > Rex::Version.new('21.1050.0')
vprint_status("MagicINFO version detected: #{full_version}")
return CheckCode::Appears
return CheckCode::Appears("Detected vulnerable version: #{version}")
end
return CheckCode::Safe
return CheckCode::Safe("Target is not vulnerable based on version: #{version}")
end
def exploit
@@ -52,10 +52,10 @@ class MetasploitModule < Msf::Exploit::Remote
def check
info = http_fingerprint # check method
if (info =~ /MailEnable/)
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -65,21 +65,21 @@ class MetasploitModule < Msf::Exploit::Remote
})
unless res && res.code == 200
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target did not respond as expected')
end
if res.body =~ /OpManager.*v\.([0-9]+\.[0-9]+)<\/span>/
version = $1
if Rex::Version.new(version) <= Rex::Version.new('11.6')
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
else
# Patch unknown
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected("Target detected with version: #{version}")
end
elsif res.body =~ /OpManager/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('OpManager detected but version not identified')
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target does not appear to be OpManager')
end
end
@@ -59,12 +59,12 @@ class MetasploitModule < Msf::Exploit::Remote
unless res
vprint_error 'Connection failed'
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
unless res.code == 200
vprint_status 'Target is not ManageEngine Exchange Reporter Plus'
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
begin
@@ -72,16 +72,16 @@ class MetasploitModule < Msf::Exploit::Remote
raise if json.empty? || !json['BUILD_NUMBER']
rescue
vprint_status 'Target is not ManageEngine Exchange Reporter Plus'
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
vprint_status "Version: #{json['BUILD_NUMBER']}"
if json['BUILD_NUMBER'].to_i <= 5310
return CheckCode::Appears
return CheckCode::Appears('Target appears to be vulnerable')
end
CheckCode::Safe
CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -63,9 +63,9 @@ class MetasploitModule < Msf::Exploit::Remote
def check
res = trigger_endpoint(Rex::Text.rand_text_alpha(3))
if res && res.body.include?('Kindly check the credentials and try again')
Exploit::CheckCode::Vulnerable
Exploit::CheckCode::Vulnerable('Target is vulnerable')
else
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
@@ -134,7 +134,7 @@ class MetasploitModule < Msf::Exploit::Remote
unless res
vprint_error("Connection timed out")
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
build_number = get_build_number(res)
@@ -144,12 +144,12 @@ class MetasploitModule < Msf::Exploit::Remote
vprint_status("Found title: #{html_title}")
if build_number <= '91084'
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{build_number}")
elsif /ManageEngine Desktop Central/ === html_title
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected("Target detected with version: #{build_number}")
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{build_number}")
end
def upload_jsp(stager_info)
@@ -111,7 +111,7 @@ class MetasploitModule < Msf::Exploit::Remote
def check
# check if SAML-based SSO is enabled otherwise exploit will fail
# No additional fingerprint / banner information available to collect and determine version
return Exploit::CheckCode::Safe unless check_saml_enabled
return Exploit::CheckCode::Safe('SAML-based SSO is not enabled') unless check_saml_enabled
CheckCode::Detected('SAML-based SSO is enabled.')
end
@@ -74,10 +74,10 @@ class MetasploitModule < Msf::Exploit::Remote
banner = sock.get_once
if banner.to_s =~ /Spipe\/1\.0/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -75,10 +75,10 @@ class MetasploitModule < Msf::Exploit::Remote
disconnect
if (banner.to_s =~ /WDaemon\/6\.8\.[0-5]/)
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -74,16 +74,16 @@ class MetasploitModule < Msf::Exploit::Remote
})
rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout, ::Timeout::Error, ::Errno::EPIPE
vprint_error("Connection failed")
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
if !res or res.headers['Server'].empty?
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
elsif res.headers['Server'] =~ /^MiniWeb$/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def upload(filename, filedata)
@@ -112,21 +112,21 @@ class MetasploitModule < Msf::Exploit::Remote
if res && res.code == 200 && res.headers.key?('X-MOVEitISAPI-Version')
version = Rex::Version.new(res.headers['X-MOVEitISAPI-Version'])
# 2020.1.x AKA 12.1.x
return Exploit::CheckCode::Appears if version >= Rex::Version.new('12.1.0') && version < Rex::Version.new('12.1.10')
return Exploit::CheckCode::Appears("MOVEit Transfer version #{version} is vulnerable") if version >= Rex::Version.new('12.1.0') && version < Rex::Version.new('12.1.10')
# 2021.0.x AKA 13.0.x
return Exploit::CheckCode::Appears if version >= Rex::Version.new('13.0.0') && version < Rex::Version.new('13.0.8')
return Exploit::CheckCode::Appears("MOVEit Transfer version #{version} is vulnerable") if version >= Rex::Version.new('13.0.0') && version < Rex::Version.new('13.0.8')
# 2021.1.x AKA 13.1.x
return Exploit::CheckCode::Appears if version >= Rex::Version.new('13.1.0') && version < Rex::Version.new('13.1.6')
return Exploit::CheckCode::Appears("MOVEit Transfer version #{version} is vulnerable") if version >= Rex::Version.new('13.1.0') && version < Rex::Version.new('13.1.6')
# 2022.0.x AKA 14.0.x
return Exploit::CheckCode::Appears if version >= Rex::Version.new('14.0.0') && version < Rex::Version.new('14.0.6')
return Exploit::CheckCode::Appears("MOVEit Transfer version #{version} is vulnerable") if version >= Rex::Version.new('14.0.0') && version < Rex::Version.new('14.0.6')
# 2022.1.x AKA 14.1.x
return Exploit::CheckCode::Appears if version >= Rex::Version.new('14.1.0') && version < Rex::Version.new('14.1.7')
return Exploit::CheckCode::Appears("MOVEit Transfer version #{version} is vulnerable") if version >= Rex::Version.new('14.1.0') && version < Rex::Version.new('14.1.7')
# 2023.0.x AKA 15.0.x
return Exploit::CheckCode::Appears if version >= Rex::Version.new('15.0.0') && version < Rex::Version.new('15.0.3')
return Exploit::CheckCode::Appears("MOVEit Transfer version #{version} is vulnerable") if version >= Rex::Version.new('15.0.0') && version < Rex::Version.new('15.0.3')
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('MOVEit Transfer not detected')
end
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
def cleanup
@@ -65,10 +65,10 @@ class MetasploitModule < Msf::Exploit::Remote
disconnect
if (resp =~ /2\.01 11th September/)
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -65,9 +65,9 @@ class MetasploitModule < Msf::Exploit::Remote
res = send_request_cgi({ 'uri' => '/' })
banner = res.headers['Server']
if banner =~ /NetDecision\-HTTP\-Server\/1\.0/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
@@ -71,9 +71,9 @@ class MetasploitModule < Msf::Exploit::Remote
'vars_get' => { 'method' => 'loginHtml' } # This is required for auth bypass above v1.5.0.11
})
if res && res.code == 200 # if this endpoint returns 200 than we can exploit all targets
Exploit::CheckCode::Detected
Exploit::CheckCode::Detected('Target service detected')
else
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
@@ -67,13 +67,13 @@ class MetasploitModule < Msf::Exploit::Remote
print_status("Detected version: #{v || 'Unknown'}")
if v.nil?
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
elsif v =~ /^2\.6\.[01]/ or v =~ /^2\.7\.0/
# Conditions based on OSVDB info
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def setup_session()
@@ -102,10 +102,10 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res && res.body.include?('Oracle WebLogic Server Administration Console')
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def set_admin_console_session(res)
@@ -72,17 +72,17 @@ class MetasploitModule < Msf::Exploit::Remote
fail_with(Failure::BadConfig, 'Need username and password or API key')
rescue Msf::Exploit::Failed => e
vprint_error(e.message)
return CheckCode::Unknown
return CheckCode::Unknown('Could not determine the target status')
end
end
disconnect
return CheckCode::Unknown if res.nil?
return CheckCode::Unknown('No response received from target') if res.nil?
if res.code.between?(400, 499)
vprint_error("Server rejected the credentials")
return CheckCode::Unknown
return CheckCode::Unknown('Could not determine the target status')
end
CheckCode::Appears
CheckCode::Appears('Target appears to be vulnerable')
end
def exploit
@@ -66,10 +66,10 @@ class MetasploitModule < Msf::Exploit::Remote
disconnect
if (resp =~ /9\.2\.0\.1\.0/)
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -60,10 +60,10 @@ class MetasploitModule < Msf::Exploit::Remote
res = send_request_cgi('uri' => normalize_uri(target_uri.path, 'voice-servlet', 'prompt-qa', 'showRecxml.jsp'))
if res && /RECXML Prompt Tester/ === res.body
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -60,12 +60,12 @@ class MetasploitModule < Msf::Exploit::Remote
if res.nil?
vprint_error("Connection timed out.")
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
elsif res && (res.code == 403 || res.code == 200)
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -84,13 +84,13 @@ class MetasploitModule < Msf::Exploit::Remote
res = send_request_soap(version_soap)
if res.nil? or res.code != 200 or res.body !~ /versionResponse/
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target did not return a valid version response')
end
version_match = res.body.match(/<serverVersion>Oracle Endeca Server ([0-9\.]*) /)
if version_match.nil?
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Could not extract version from response')
else
version = version_match[1]
end
@@ -98,10 +98,10 @@ class MetasploitModule < Msf::Exploit::Remote
vprint_status("Version found: Oracle Endeca Server #{version}")
if version =~ /7\.4\.0/ and version <= "7.4.0.787"
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears("Detected vulnerable version: #{version}")
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{version}")
end
def send_request_soap(data)
@@ -123,12 +123,12 @@ class MetasploitModule < Msf::Exploit::Remote
if res && res.code == 200
if res.body.to_s.include?("Oracle Event Processing 11g Release 1 (11.1.1.7.0)")
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
elsif res.body.to_s.include?("Oracle Event Processing 12")
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
Exploit::CheckCode::Unknown
Exploit::CheckCode::Unknown('Could not determine the target status')
end
end
@@ -238,7 +238,7 @@ class MetasploitModule < Msf::Exploit::Remote
return CheckCode::Safe('Camera Upload not enabled')
end
print_good("Camera Upload: #{server['MediaContainer']['allowCameraUpload']}")
CheckCode::Vulnerable
CheckCode::Vulnerable("Version #{v} is vulnerable")
end
def exploit
@@ -233,7 +233,7 @@ class MetasploitModule < Msf::Exploit::Remote
'uri' => normalize_uri(datastore['URI'], '/index.htm')
})
rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout, ::Rex::ConnectionError
return CheckCode::Unknown
return CheckCode::Unknown('Could not determine the target status')
ensure
disconnect
end
@@ -255,16 +255,16 @@ class MetasploitModule < Msf::Exploit::Remote
if prtg_version
vprint_status("Identified PRTG Network Monitor Version #{prtg_version}")
if Rex::Version.new(prtg_version) < Rex::Version.new('18.2.39')
return CheckCode::Appears
return CheckCode::Appears("Detected vulnerable version: #{prtg_version}")
else
return CheckCode::Safe
return CheckCode::Safe("Target is not vulnerable based on version: #{prtg_version}")
end
elsif (prtg_server_header.include? 'PRTG') || (html.to_s.include? 'PRTG')
return CheckCode::Detected
return CheckCode::Detected('PRTG Network Monitor detected but version not identified')
end
end
return CheckCode::Unknown
return CheckCode::Unknown('Could not determine the target status')
end
def exploit
@@ -76,20 +76,19 @@ class MetasploitModule < Msf::Exploit::Remote
'uri' => normalize_uri(datastore['URI'], '/index.htm')
})
rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout, ::Rex::ConnectionError
return CheckCode::Unknown
return CheckCode::Unknown('Could not determine the target status')
ensure
disconnect
end
if res && res.code == 200
prtg_server_header = res.headers['Server']
if (prtg_server_header.include? 'PRTG') || (html.to_s.include? 'PRTG')
return CheckCode::Detected
if (prtg_server_header&.include? 'PRTG') || (res.body.to_s.include? 'PRTG')
return CheckCode::Detected("Target detected: #{prtg_server_header || 'PRTG detected in response body'}")
end
end
return CheckCode::Unknown
return CheckCode::Unknown('Could not determine the target status')
end
def exploit
@@ -64,10 +64,10 @@ class MetasploitModule < Msf::Exploit::Remote
sock.put("GET / HTTP/1.0\r\n\r\n")
banner = sock.get_once
if (banner.to_s =~ /PSO Proxy 0\.9/)
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -65,9 +65,9 @@ class MetasploitModule < Msf::Exploit::Remote
})
if res and res.headers['Server'] == 'R4 Embedded Server'
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
else
return Exploit::CheckCoded::Safe
return Exploit::CheckCode::Safe('Target service was not detected')
end
end
@@ -67,12 +67,12 @@ class MetasploitModule < Msf::Exploit::Remote
if res && res.headers['Server'] && res.headers['Server'] =~ /HFS ([\d.]+)/
version = $1
if Rex::Version.new(version) <= Rex::Version.new("2.3")
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected("Target detected with version: #{version}")
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe("Target is not vulnerable based on version: #{version}")
end
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('HFS not detected')
end
end
@@ -128,7 +128,7 @@ class MetasploitModule < Msf::Exploit::Remote
return CheckCode::Vulnerable("Rejetto HFS version #{version[1]}") if version
CheckCode::Safe
CheckCode::Safe('Rejetto HFS not detected or not vulnerable')
end
def exploit
@@ -72,10 +72,10 @@ class MetasploitModule < Msf::Exploit::Remote
disconnect
if (banner =~ /Server:\sSAMBAR/)
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -71,15 +71,15 @@ class MetasploitModule < Msf::Exploit
res = send_evil_request(uri, "whoami", 20)
rescue
vprint_error("An error has occurred while sending the malicious request")
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
end
if !res
vprint_error("Connection timed out")
return Exploit::CheckCode::Unknown
return Exploit::CheckCode::Unknown('Could not determine the target status')
elsif res.body.include?("Process created")
return Exploit::CheckCode::Vulnerable
return Exploit::CheckCode::Vulnerable('Target is vulnerable')
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
@@ -391,9 +391,9 @@ class MetasploitModule < Msf::Exploit::Remote
}, 10)
if (res and res.code == 500 and res.body =~ /Generic error/)
return CheckCode::Vulnerable
return CheckCode::Vulnerable('Target is vulnerable')
else
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
end
@@ -69,10 +69,10 @@ class MetasploitModule < Msf::Exploit::Remote
def check
info = http_fingerprint # check method
if info and (info =~ /Savant\/3\.1/)
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
def safe_nops(count)
@@ -65,30 +65,30 @@ class MetasploitModule < Msf::Exploit::Remote
unless res
vprint_error 'Connection failed'
return CheckCode::Unknown
return CheckCode::Unknown('Could not determine the target status')
end
if res.headers['Server'] !~ /Serviio/
vprint_status 'Target is not a Serviio Media Server'
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
if res.headers['Server'] !~ /Windows/
vprint_status 'Target operating system is not vulnerable'
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
if res.code != 200 || res.body !~ %r{<errorCode>603</errorCode>}
vprint_status 'Unexpected reply'
return CheckCode::Safe
return CheckCode::Safe('Target is not vulnerable')
end
if res.headers['Server'] =~ %r{Serviio/(1\.[4-8])}
vprint_status "#{peer} Serviio Media Server version #{$1}"
return CheckCode::Appears
return CheckCode::Appears('Target appears to be vulnerable')
end
CheckCode::Safe
CheckCode::Safe('Target is not vulnerable')
end
def execute_command(cmd, opts = {})
@@ -81,12 +81,12 @@ class MetasploitModule < Msf::Exploit::Remote
disconnect
if (res.to_s =~ /Server: Serv-U\/9\.0\.0\.5/)
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
elsif (res.to_s =~ /Server: Serv-U/)
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -97,7 +97,7 @@ class MetasploitModule < Msf::Exploit::Remote
return CheckCode::Safe('Failed to identify that SharePoint is running.') unless res&.code == 200 && res.headers['MicrosoftSharePointTeamServices']
html = res.get_html_document
return CheckCode::Safe if html.xpath('//html/body/form[@action]').select do |node|
return CheckCode::Safe('Quicklinks form not found in response') if html.xpath('//html/body/form[@action]').select do |node|
node['action'] =~ /quicklinks.aspx\?Mode=Suggestion/i
end.empty?
@@ -72,9 +72,9 @@ class MetasploitModule < Msf::Exploit::Remote
return CheckCode::Unknown('No compiler errors were reported') unless compiler_errors&.length&.> 0
# once patched you get a specific compiler error message about the type name
return CheckCode::Safe if compiler_errors[0].to_s =~ /is not a valid language-independent type name/
return CheckCode::Safe('Target appears to be patched') if compiler_errors[0].to_s =~ /is not a valid language-independent type name/
CheckCode::Vulnerable
CheckCode::Vulnerable('Target is vulnerable')
end
def extract_compiler_errors(res)
@@ -64,23 +64,23 @@ class MetasploitModule < Msf::Exploit::Remote
'uri' => uri
}, 5)
return Exploit::CheckCode::Safe if not r
return Exploit::CheckCode::Safe('No response from target') if not r
m = r.body.match(/Network Audio Server\/([^\s]+)\s+([^<]+)<BR/)
return Exploit::CheckCode::Safe if not m
return Exploit::CheckCode::Safe('Could not identify SHOUTcast version') if not m
vprint_status("This system is running SHOUTcast #{m[1]} on #{m[2]}")
# SHOUTcast Distributed Network Audio Server/win32 v1.9.2<BR>
if (m[1] =~ /v1\.([0-8]\.|9\.[0-3])$/)
if (m[2] == "win32")
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
else
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -131,7 +131,7 @@ class MetasploitModule < Msf::Exploit::Remote
end
if product_build && Rex::Version.new(build_number) < Rex::Version.new('6985')
return CheckCode::Appears
return CheckCode::Appears("Detected vulnerable version: #{build_number}")
end
print_status('Checking SmarterMail product version...')
@@ -145,10 +145,10 @@ class MetasploitModule < Msf::Exploit::Remote
print_good("Target is running SmarterMail Version #{version_number}.")
if Rex::Version.new(version_number) <= Rex::Version.new('16.3.6989.16341')
return CheckCode::Appears
return CheckCode::Appears("Detected vulnerable version: #{version_number}")
end
return CheckCode::Safe
return CheckCode::Safe("Target is not vulnerable based on version: #{version_number}")
end
def execute_command(cmd, _opts = {})
@@ -116,7 +116,7 @@ class MetasploitModule < Msf::Exploit::Remote
# check the Softing SIS version
softing_version_res = checker_instance.check_setup
unless softing_version_res
return CheckCode::Unknown
return CheckCode::Unknown('Could not determine the target status')
end
softing_version = Rex::Version.new(softing_version_res)
@@ -125,7 +125,7 @@ class MetasploitModule < Msf::Exploit::Remote
# the vulnerabilities are to be fixed in version 1.30 according to the Softing advisory
# so we will not continue if the version is not vulnerable
unless softing_version < Rex::Version.new('1.30')
return CheckCode::Safe
return CheckCode::Safe("Target is not vulnerable based on version: #{softing_version_res}")
end
# if the operator provides a signature, then use that instead of the username and password
@@ -171,7 +171,7 @@ class MetasploitModule < Msf::Exploit::Remote
# if the version is less than 1.30 it's supposedly vulnerable
# but there is no way to confirm vulnerability existence without actually exploiting
# so instead of "Vulnerable", return "Appears"
CheckCode::Appears
CheckCode::Appears("Detected vulnerable version: #{softing_version_res}")
end
def exploit
@@ -72,10 +72,10 @@ class MetasploitModule < Msf::Exploit::Remote
res = send_request_cgi('uri' => normalize_uri(target_uri.path, 'fsm', 'login.jsp'))
if res && res.body =~ /SolarWinds FSM Change Advisor/i
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
end
Exploit::CheckCode::Safe
Exploit::CheckCode::Safe('Target is not vulnerable')
end
# Exploit/run command
@@ -75,9 +75,9 @@ class MetasploitModule < Msf::Exploit::Remote
if res and res.body =~ /\<title>\SolarWinds \- Storage Manager\<\/title\>/ and
res.body =~ /\<img style="padding\-top:30px;" src="\/images\/logo_solarwinds_login\.png" width="163" height="70" alt="SolarWinds Storage Manager"\>/
return Exploit::CheckCode::Detected
return Exploit::CheckCode::Detected('Target service detected')
else
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
end
@@ -66,10 +66,10 @@ class MetasploitModule < Msf::Exploit::Remote
res = send_request_raw({ 'uri' => '/' }) # Check the base path for version regex
if res and res.body =~ /\<title\>Scrutinizer\<\/title\>/ and
res.body =~ /\<div id\=\'.+\'\>Scrutinizer 9\.[0-5]\.[0-1]\<\/div\>/
return Exploit::CheckCode::Appears
return Exploit::CheckCode::Appears('Target appears to be vulnerable')
end
return Exploit::CheckCode::Safe
return Exploit::CheckCode::Safe('Target is not vulnerable')
end
def exploit
@@ -74,9 +74,9 @@ class MetasploitModule < Msf::Exploit::Remote
def check
json_response = send_api_request('ReportServerInfo', 'Model.SiteName')
return CheckCode::Unknown unless json_response && json_response['value'] == 'SQL Server Reporting Services'
return CheckCode::Unknown('SQL Server Reporting Services not detected') unless json_response && json_response['value'] == 'SQL Server Reporting Services'
CheckCode::Detected
CheckCode::Detected('Target service detected')
end
def exploit

Some files were not shown because too many files have changed in this diff Show More