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.对上传文件进行重命名

浙公网安备 33010602011771号