【文件上传绕过】——解析漏洞_apache解析漏洞
文章目录一、实验目的:二、工具:三、实验环境:四、Apache 解析漏洞:1. 漏洞原理:2. 影响版本:3. 实验过程:3.1 模拟实验:3.2 upload-labs闯关游戏(Pass-04):五、其余配置问题导致的漏洞:一、实验目的:1、通过本次实验掌握apache解析漏洞原理。2、通过upload-labs-master闯关游戏Pass-04,掌握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、如果在 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
:
更多推荐
所有评论(0)