diff --git a/Gemfile.lock b/Gemfile.lock index 35074de0b00cb..2e6d9fbee10fb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -682,7 +682,7 @@ GEM websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) win32api (0.1.0) - windows_error (0.1.5) + windows_error (0.1.6) winrm (2.3.9) builder (>= 2.1.2) erubi (~> 1.8) diff --git a/lib/msf/core/exploit/remote/ms_icpr.rb b/lib/msf/core/exploit/remote/ms_icpr.rb index 62b09e9bb1326..7e0525e51d273 100644 --- a/lib/msf/core/exploit/remote/ms_icpr.rb +++ b/lib/msf/core/exploit/remote/ms_icpr.rb @@ -110,7 +110,7 @@ def do_request_cert(icpr, opts, csr, attributes) else print_error('There was an error while requesting the certificate.') print_error(response[:disposition_message].strip.to_s) unless response[:disposition_message].blank? - hresult = ::WindowsError::HResult.find_by_retval(response[:disposition]).first + hresult = ::WindowsError::HResult.find_by_retval(response[:disposition])&.first if hresult print_error('Error details:') @@ -126,7 +126,15 @@ def do_request_cert(icpr, opts, csr, attributes) when ::WindowsError::HResult::CERTSRV_E_UNSUPPORTED_CERT_TYPE raise MsIcprNotFoundError.new(hresult.description) else - raise MsIcprUnknownError.new(hresult.description) + if hresult + message = "#{hresult.description} (0x#{response[:disposition].to_i.to_s(16).rjust(8, '0')})" + elsif response[:disposition] + message = "Unknown HRESULT 0x#{response[:disposition].to_s(16).rjust(8, '0')}" + else + message = "Unknown error, no disposition code" + end + + raise MsIcprUnknownError.new(message) end end