在 nginx 配置中可能會發生攻擊,其中 PHP-FPM 中的轉發是通過使用“fastcgi_split_path_info”分割 URL 的各個部分並定義 PATH_INFO 環境變量來執行的,但沒有首先使用“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