si1ent

Apache多后缀解析漏洞

2021-05-14

概述

Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。

当攻击者上传的文件中只要后缀名含有php,该文件就可以被解析成php文件,利用Apache httpd这个特性,就可以绕过上传文件的白名单。

该漏洞和apache版本和php版本无关,属于用户配置不当造成的解析漏洞

环境搭建

docker环境搭建

Apache parsing

漏洞描述

由于管理员的错误配置, AddHandler application/x-httpd-php .php,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

影响范围

All

漏洞原理

由于管理员的错误配置, AddHandler application/x-httpd-php .php,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

漏洞条件

Apache配置文件:AddHandler application/x-httpd-php .php

漏洞检测

1、检测

1
http://192.168.20.120/

image-20210512141533187

2、尝试上传php后缀

image-20210512141636311

image-20210512141722975

3、查看index.php文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

if (!empty($_FILES)):
//检测上传后缀是否包含以下图片后缀
$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, ['gif', 'png', 'jpg', 'jpeg'])) {
die('Unsupported filetype uploaded.');
}

$new_name = __DIR__ . '/upload_files/' . $_FILES['file_upload']['name'];
if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], $new_name)){
die('Error uploading file - check destination is writeable.');
}

die('File uploaded successfully: ' . $new_name);

else:
?>
<form method="post" enctype="multipart/form-data">
File: <input type="file" name="file_upload">
<input type="submit">
</form>
<?php
endif;

4、修改后缀尝试上传绕过

image-20210512142014524

image-20210512142226500

5、访问此“图片”

1
http://192.168.20.120/uploadfiles/phpinfo_test.php.jpg

image-20210512142316887

解析成功
![image-20210512144206374](/images/Apache_parsing/image-20210512144206374.png)
配置文件
漏洞修复

1、禁止.php后缀文件执行

2、检查配置文件

Tags: apache
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章