文件包含漏洞allow_url_include、php://input攻击应对

一觉醒来,服务器短信提醒temp里有恶意文件,一看果然如此。站点是wordpress,打开日志文件发现了特定时间的一些异常访问:

关键异常行为

1. 高度危险的请求(RCE 尝试)

172.70.215.77 - - [08/May/2025:05:01:04 +0800] 
"POST /?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/2.0" 200 24201
  • 意图:远程代码执行(RCE)尝试
  • 解释:请求通过 URL 参数尝试开启 allow_url_include 并使用 php://input 包含外部代码,这是常见的 PHP 漏洞攻击方式。
  • 结论:这是一起明确的恶意攻击请求。

2. 尝试加载日志文件作为模板

172.71.24.52 - - [08/May/2025:05:06:47 +0800] 
"GET /?m=home&a=assign_resume_tpl&variable=1&tpl=data/Runtime/Logs/Home/25_05_08.log HTTP/2.0"

172.71.24.132 - - [08/May/2025:05:07:09 +0800] 
"GET /?a=display&templateFile=data/runtime/Logs/Portal/25_05_08.log HTTP/2.0"
  • 意图:尝试通过模板注入读取/执行日志文件
  • 若系统未做防护,攻击者可将日志文件中的注入内容当作模板执行,进行代码执行(尤其是 ThinkPHP、Discuz 等旧系统易受影响)。

3. 重复的 RCE 攻击请求

162.158.91.43 - - [08/May/2025:05:07:29 +0800] 
"POST /?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/2.0"
  • 与前面相同攻击方式,说明攻击者在持续尝试突破。

ChatGPT给出的建议

ChatGPT截图

一、立刻进行的防护措施

1. 封锁恶意请求中的特征参数(.htaccess)

请将以下规则添加到你的 WordPress 根目录的 .htaccess 文件中(放在 # BEGIN WordPress 前):

<IfModule mod_rewrite.c>
RewriteEngine On

# 阻止包含 php://input 的攻击请求
RewriteCond %{QUERY_STRING} php://input [NC,OR]
RewriteCond %{QUERY_STRING} data:// [NC,OR]
RewriteCond %{QUERY_STRING} auto_prepend_file [NC,OR]
RewriteCond %{QUERY_STRING} allow_url_include [NC]
RewriteRule ^.* - [F,L]

# 禁止直接访问日志、配置文件等
<FilesMatch "\.(log|conf|ini|bak|inc|sql)$">
    Order allow,deny
    Deny from all
</FilesMatch>
</IfModule>

2. 安装并配置 WordPress 安全插件

推荐使用以下插件之一来强化安全:

  • Wordfence Security:入侵检测、IP封锁、防火墙等功能强大。
  • All In One WP Security:更轻量,适合入门用户,操作简单。
  • iThemes Security:也提供模板注入、恶意 URL 防护。

3. 封锁可疑 IP 段(可选进阶)

你可以封锁如下 IP 段,方式有两种:

如果使用 .htaccess:

<Limit GET POST>
Order Allow,Deny
Allow from all
Deny from 172.70.
Deny from 172.71.
Deny from 162.158.
</Limit>

如果使用 Wordfence 插件:

进入“Blocking”功能中,添加这些 IP 段进行永久封禁。


二、清查与恢复建议

  1. 检查 /wp-content/uploads//tmp/ 目录,是否有可疑 .php 文件,特别是:
    • 文件名混淆如 image.php, shell.jpg.php 等。
    • 修改日期为近期但你没有上传。
  2. 审查插件与主题是否存在未授权代码
    • 不要使用从非官方渠道下载的插件/主题。
    • 保持 WordPress、主题、插件全部为最新版本
  3. 启用 disable_functions 限制危险函数(需修改 php.ini)
    如果你有权限,可以在服务器配置中禁用如下函数: ini复制编辑disable_functions = exec,passthru,shell_exec,system,proc_open,popen,eval,assert

实际操作(我的)

考虑到方便,还是决定直接修改.htaccess文件

# === 防止通过 GET/POST 等方式传入敏感 PHP 参数 ===
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\bphp://input\b|\bphp://filter\b|\bphp://stdin\b|\bdata://) [NC]
RewriteRule .* - [F,L]
</IfModule>

尘埃落定,这就是本次PHP攻击的应对,后续还要观察日志,看看实际效果怎么样。

相关文章

Cloudflare CDN 缓存设置,定义wordpress缓存规则

网站在运行时,发现缓存设置不太合理,为了实现“不缓存后台、不缓存预览、缓存整站、更新文章后能及时更新缓存”这个方案,和ChatGPT进行了一番探讨,它给我了一个非常不错的实施计划。 一、不缓存后台、不缓存预览、缓存整站 页面范围 缓存策略

WordPress纯代码为文章匹配已有标签和自动添加标签内链

为了给wordpress站点的文章设置tag标签的锚文本,在网上找了一圈方法,最终选择纯代码的方案,亲测有效! 这个代码需要添加到主题的 functions.php,可以实现下面的几个功能: 1、遍历文章内容,找到能所有匹配已存在的tags