Path: blob/master/lib/metasploit/framework/login_scanner/octopusdeploy.rb
71808 views
require 'metasploit/framework/login_scanner/http'1require 'json'23module Metasploit4module Framework5module LoginScanner67# Octopus Deploy login scanner8class OctopusDeploy < HTTP910# Inherit LIKELY_PORTS,LIKELY_SERVICE_NAMES, and REALM_KEY from HTTP11CAN_GET_SESSION = true12DEFAULT_PORT = 8013PRIVATE_TYPES = [ :password ]1415# (see Base#set_sane_defaults)16def set_sane_defaults17uri = '/api/users/login' if uri.nil?18method = 'POST' if method.nil?1920super21end2223def attempt_login(credential)24result_opts = {25credential: credential,26**service_as_result(service_opts)27}28begin29json_post_data = JSON.pretty_generate({ Username: credential.public, Password: credential.private })30res = send_request({31'method' => 'POST',32'uri' => uri,33'ctype' => 'application/json',34'data' => json_post_data35})3637body = JSON.parse(res.body)38if res && res.code == 200 && body.key?('IsActive') && body['IsActive']39result_opts.merge!(status: Metasploit::Model::Login::Status::SUCCESSFUL, proof: res.body)40else41result_opts.merge!(status: Metasploit::Model::Login::Status::INCORRECT, proof: res)42end43rescue ::JSON::ParserError44result_opts.merge!(status: Metasploit::Model::Login::Status::INCORRECT, proof: res.body)45rescue ::EOFError, Errno::ETIMEDOUT, Rex::ConnectionError, ::Timeout::Error46result_opts.merge!(status: Metasploit::Model::Login::Status::UNABLE_TO_CONNECT)47end48Result.new(result_opts)49end5051def service_opts52build_service_opts('octopusdeploy')53end54end55end56end57end585960