一、实验目的:
1、通过本次实验掌握apache解析漏洞 原理。 2、通过upload-labs-master 闯关游戏Pass-04 ,掌握apache解析漏洞 技术。
二、工具:
火狐/谷歌浏览器
三、实验环境:
靶?机: windows10虚拟机:192.168.15.133 ??????upload-labs-master 闯关游戏 ??????phpstudy2013 搭建网站 ??????Apache 服务器(wamp2.0 ) 攻击机: 物理机
四、Apache 解析漏洞:
1.?漏洞原理:
??Apache 解析文件的规则是从右到左 开始判断解析,如果后缀名 为不可识别 文件解析,就再往左判断。比如test.php.a.b 的“.a ”和“.b ”这两种后缀是apache 不可识别解析,apache 就会把test.php.a.b 解析成test.php 。
2.?影响版本:
apache 1.x apache 2.2.x
查看apache版本 : 打开服务器的Apache\bin 目录,复制目录地址: 
进入命令行,切换到D: 盘,cd 到上面复制的路径下,输入下面命令:
命令:
httpd -v //查看apache版本信息

3.?实验过程:
3.1?模拟实验:
1、在www目录 下创建名为1.php.a.b 的文件: 内容为:
<?php phpinfo();?>
  2、然后在浏览器中打开此文件,成果展示: 
3.2?upload-labs闯关游戏(Pass-04):
页面源码:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext);
$file_ext = str_ireplace('::$DATA', '', $file_ext);
$file_ext = trim($file_ext);
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '此文件不允许上传!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
代码处理流程:声明一个数组,里面存放着文件上传的后缀名黑名单-->获得上传文件的后缀名,并移除两端空白字符-->删除文件名末尾的点-->截取文件后缀名-->所有的字符转换为小写-->去除字符串::$DATA-->首尾去空-->进行判断,如果不在黑名单里面就获取图片的临时存储路径-->重构文件路径和文件名-->对文件进行转存 1、上传上面创建的1.php.a.b 文件到服务器,并复制图片链接,进行访问: 
2、通过访问,发现1.php.a.b 文件可以被解析为php脚本 文件: 
五、其余配置问题导致的漏洞:
1、如果在 Apache 的conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是test2.php.jpg 也会以php 来执行。
修改配置文件: 2、在红框中加入AddHandler php5-script .php : 3、重启phpstudy:  2、如果在 Apache 的 conf 里有这样一行配置AddType application/x-httpd-php .jpg 即使扩展名是jpg 一样能以php 方式执行。 在红框中加入AddType application/x-httpd-php .jpg : 3、重启phpstudy : 
|