漏洞原理
Nginx拿到文件路径(更专业的说法是URI)/test.jpg/test.php后,一看后缀是.php,便认为该文件是php文件,转交给php去处理。php一看/test.jpg/test.php不存在,便删去最后的/test.php,又看/test.jpg存在,便把/test.jpg当成要执行的文件了,又因为后缀为.jpg,php认为这不是php文件,于是返回“Access denied.”
这其中涉及到php的一个选项:cgi.fix_pathinfo,该值默认为1,表示开启。开启这一选项PHP可以对文件路径进行“修理”。举个例子,当php遇到文件路径“/1.jpg/2.txt/3.php”时,若“/1.jpg/2.txt/3.php”不存在,则会去掉最后的“/3.php”,然后判断“/1.jpg/2.txt”是否存在,若存在,则把“/1.jpg/2.txt”当做文件“/1.jpg/2.txt/3.php”,若“/1.jpg/2.txt”仍不存在,则继续去掉“/2.txt”,以此类推。
实验环境:
- Windows Server 2008 R2 x64
- IIS服务器
- xampp-win32-5.6.28-1-VC11-installer(php环境)
模拟实验
1、安装xampp-win32-5.6.28-1-VC11-installer,一直下一步就可以了
2、安装IIS服务器,如图操作
3、安装完关闭防火墙
4、查看IP,看物理机是否能够访问
5、打开IIS服务器,点击处理程序映射
6、点击添加模块映射…依次填入*.php
,FastCgiModule
,C: \xampp\php\php-cgi. exe
名称随意
注意: 到C:\xampp\php\
路径下时,将右下角的文件类型改成exe