From 2d2606aeaf6034c92b37b1986a1140c3167b389f Mon Sep 17 00:00:00 2001 From: HD Moore Date: Tue, 26 Aug 2014 16:42:00 -0500 Subject: [PATCH] Update sip note format, small tweaks to output, service.info --- lib/msf/core/exploit/sip.rb | 60 +++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/lib/msf/core/exploit/sip.rb b/lib/msf/core/exploit/sip.rb index 093f47221c..4d1f77d36e 100644 --- a/lib/msf/core/exploit/sip.rb +++ b/lib/msf/core/exploit/sip.rb @@ -16,38 +16,52 @@ module Msf return false end - # We know it is SIP, so report - report_service( - host: rhost, - port: rport, - proto: proto.downcase, - name: 'sip' - ) - # Do header extraction as necessary extracted_headers = {} unless desired_headers.nil? || desired_headers.empty? desired_headers.each do |desired_header| next unless (found_header = options_response.header(desired_header)) extracted_headers[desired_header] ||= [] - extracted_headers[desired_header] |= found_header - end - - # report on any extracted headers - extracted_headers.each do |k, v| - report_note( - host: rhost, - port: rport, - proto: proto.downcase, - type: "sip_header.#{k.gsub(/-/, '_').downcase}", - data: v.join(',') - ) + extracted_headers[desired_header] |= found_header end end - status = "#{endpoint} #{options_response.status_line}" - status += ": #{extracted_headers}" unless extracted_headers.empty? - print_status(status) + # Create a SIP OPTIONS fingerprint hash + fprint = { + 'code' => options_response.code, + 'message' => options_response.message + } + + extracted_headers.each_pair do |k,v| + fprint['header_' + k.gsub('-', '_').downcase] = v.join(',') + end + + # Create a summary of the response + status = options_response.status_line.dup + unless extracted_headers.keys.length == 0 + status << ": #{extracted_headers}" + end + + # Report the service with the status information + report_service( + host: rhost, + port: rport, + proto: proto.downcase, + name: 'sip', + info: status + ) + + # Report the fingerprint information + report_note( + host: rhost, + port: rport, + proto: proto.downcase, + type: "sip.options.fingerprint", + data: fprint + ) + + # Display the actual result to the user + print_status(endpoint + " " + status) true end