漏洞复现篇——IIS7.0/7.5/Nginx的解析漏洞教程
漏洞原理
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
7、如图示找到php.ini
文件,注意在选框中不显示后缀名
7、在IIS主目录里创建一个php文件,但此时后缀名隐藏了,要关闭隐藏功能
8、改完后缀名会有显示,然后用记事本打开此文件,写入<?php phpinfo();?>
8、在浏览器中输入192.168.70.143/1.php
成功显示
9、在将后缀名改成png
,不能正常显示,这时在1.png
后加1.php
成功显示