漏洞环境
Vulhub
影响版本
Apache 2.4.0~2.4.29
漏洞简介
Apache HTTPD
是一款 HTTP
服务器,其 2.4.0~2.4.29
版本中存在一个解析漏洞,在解析 PHP
时,1.php\x0A
将被按照 PHP
后缀进行解析。
解析漏洞是指服务器应用程序会把某些人为构造的后缀文件解析为脚本文件,从而导致侵入者获取不应该拥有的权限,大部分解析漏洞都是服务器应用程序本身产生的。
漏洞产生
我们就以 Vulhub
里面的环境为例。
读取配置文件,前三行的意思是把以 .php
结尾的文件当成 PHP
文件执行。问题就在它使用的是 $
符号匹配的,我们都知道这个符号在正则表达式中的意思是匹配字符串的末尾,是会匹配换行符的,那么漏洞就这样产生了。
配置目录:/etc/apache2/conf-available/docker-php.conf
漏洞复现
我们可以看到它过滤了一些 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 {
?>
用 bp
上传文件抓包并在文件名后面增加一个 0a
也就是换行符。
最后访问 shell.php%0a
执行命令即可。
漏洞修复
- 更新到最新版本。
- 给文件重新命名且限制上传文件的执行权限。
总结
其实这个漏洞还需要其他条件:
1、如果获取文件名的是 $_FILES['file']['name']
,而不是 $_POST['name']
,这个漏洞就不会产生,因为前者会自动去掉换行。
2、服务器要是 linux
,因为 windows
不支持带有换行符后缀的文件。
总的来说,这个漏洞用处不是很大,基本上不会用到,但了解一下总归是好的。