在 nginx 配置中可能会发生攻击,其中通过使用“fastcgi_split_path_info”分隔 URL 的各个部分并定义 PATH_INFO 环境变量来转发到 PHP-FPM,但没有首先使用“try_files $fastcgi_script_name”检查文件是否存在指令或“if (!-f $) document_root$fastcgi_script_name)”。 问题还在于
位置 ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(。+?\。php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
您可以在以下页面上跟踪分发包中问题的解决情况:
try_files $fastcgi_script_name =404;
该问题是由于操作文件中的指针时出现错误引起的
如果 fastcgi_split_path_info 指令指定使用换行敏感的正则表达式分割脚本路径(例如,许多示例建议使用“^(.+?\.php)(/.*)$”),那么攻击者可以确保空值被写入 PATH_INFO 环境变量。 在这种情况下,进一步执行
通过请求以某种方式格式化的URL,攻击者可以实现将path_info指针移动到“_fcgi_data_seg”结构的第一个字节,并且向该字节写入零将导致“char* pos”的移动指向先前定位的内存区域的指针。 接下来调用的 FCGI_PUTENV 会用攻击者可以控制的值覆盖此内存中的数据。 指定的内存还存储其他FastCGI变量的值,通过写入它们的数据,攻击者可以创建一个虚构的PHP_VALUE变量并实现其代码的执行。
来源: opennet.ru