漏洞描述:
Nginx默認是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通過正則匹配設置SCRIPT_FILENAME。當訪問http://192.168.1.103/phpinfo.jpg/1.php這個URL時,$fastcgi_script_name會被設置為“phpinfo.jpg/1.php”,然后構造成SCRIPT_FILENAME傳遞給PHP CGI。如果PHP中開啟了fix_pathinfo這個選項,PHP會認為SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就會將phpinfo.jpg作為PHP文件來解析了。
漏洞危害:
利用該漏洞,攻擊者可以將任意文件類型作為PHP文件解析,攻擊者通常利用該漏洞來獲取到一個WebShell。
修復方案:(Nginx用戶可以選擇方案一或方案二,IIS用戶請使用方案一)
方案一,修改php.ini文件,將cgi.fix_pathinfo的值設置為0。完成后請重啟PHP和NGINX(IIS)。
方案二,在Nginx配置文件中添加以下代碼:
if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}
這行代碼的意思是當匹配到類似test.jpg/a.php的URL時,將返回403錯誤代碼。修改完成后請重啟Nginx。
來源:http://www.mhzg.net/a/20159/2015928590965.html