【文件上传绕过】——解析漏洞_apache解析漏洞

一、实验目的:

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)) { //检查服务器上传目录是否存在。如果指定的文件或目录存在则返回 true,否则返回 false。
        $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);//去除字符串::$DATA
        $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、如果在 Apacheconf里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是test2.php.jpg也会以php 来执行。

修改配置文件:
2、在红框中加入AddHandler php5-script .php
3、重启phpstudy:

2、如果在 Apacheconf里有这样一行配置AddType application/x-httpd-php .jpg即使扩展名是jpg一样能以php方式执行。
在红框中加入AddType application/x-httpd-php .jpg
在这里插入图片描述3、重启phpstudy:

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值