Apache HTTPD换行解析漏洞

漏洞概述

Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php0x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

这个漏洞主要影响Apache HTTPD 2.4.0至2.4.29版本。

漏洞复现

在虚拟机上用docker构建一个靶场环境

然后访问本机ip进入靶场页面

在本地写一个1.php脚本,里边写入<?=phpinfo();?>

上传使用burp抓包,直接放行会显示bad file,上传失败了

在页面的hex界面的1.php后边插入十六进制0x0a

然后放行,访问1.php%0a,页面显示phpinfo界面

说明漏洞利用成功

漏洞分析

先看容器的apache配置文件

<FilesMatch \.php$>
	SetHandler application/x-httpd-php
</FilesMatch>

DirectoryIndex disabled
DirectoryIndex index.php index.html

<Directory /var/www/>
	Options -Indexes
	AllowOverride All
</Directory>

#这里设置了匹配.php结尾文件的正则表达式,只有匹配到.php结尾的才会交给application/x-httpd-php处理,
但是$这个语法也能够匹配到以换行符结尾的字符串的结尾部分,也就是说.php%0a也会被当做php文件
<?php
if(isset($_FILES['file'])) {
    $name = basename($_POST['name']);
    $ext = pathinfo($name,PATHINFO_EXTENSION);
    if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
        exit('bad file');
    }
    move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
} else {

?>

其在前端又限制了上传文件的格式'php', 'php3', 'php4', 'php5', 'phtml', 'pht';
同时利用正则表达式$的特性 <FilesMatch \.php$> 他会匹配换行符将其成功执行

漏洞防御手段

1.对中间件进行升级

2.采用白名单的方法

3.对上传文件进行重命名

posted @ 2024-06-19 11:39  name12581  阅读(4)  评论(0)    收藏  举报