漏洞详情
Apache HTTPD 是一款 HTTP 服务器,它可以通过 mod_php 来运行 PHP 网页。其 2.4.0~2.4.29 版本中存在一个解析漏洞,在解析 PHP 时,1.php\x0a 将被按照 PHP 后缀进行解析,导致绕过一些服务器的安全策略。
复现
打开漏洞页面,发现一片空白,到 docker 里查看了一下,发现此页面并未写前端,所以就自己写 html 表单上传文件
可以看到这里获取文件名是需要单独 post 一个 name 的,因为如果通过$_FILES['file']['name']
获取文件名的话,会把\x0a 自动去除,所以$_FILES['file']['name']
这种方式获取文件名就不会造成这个漏洞
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="text" name="name">
<input type="submit" value="submit">
</form>
burp 抓包,在 Hex 选项卡. php 后面 0d 的位置右键 - Insert byte,添加一个 0a,然后发包,成功上传
浏览器访问 /x.php%0A,正常解析
漏洞详情
该环境版本:
- PHP 7.x 最新版
- Apache HTTPD 2.4.10 稳定版(来自 debian 源)
由此可知,该漏洞与 Apache、php 版本无关,属于用户配置不当造成的解析漏洞。
访问 /uploadfiles/apache.php.jpeg 即可发现,phpinfo 被执行了,该文件被解析为 php 脚本。我们可以通过上传文件名为 xxx.php.jpg 或 xxx.php.jpeg 的文件,利用 Apache 解析漏洞进行 getshell。
那在当前环境下具体是什么配置不当呢
在 ubuntu 下,Apache 的配置文件在 etc/apache2/apache2.conf,查看一下这个文件,发现包含了 conf-enabled 下的所有. conf 配置文件
conf-enabled 下都是 conf-available 中文件的链接,所以真正的配置文件在 conf-available
就是该目录下的 docker-php.conf 配置不当造成未知后缀解析漏洞
真正成因就在AddHandler application/x-httpd-php .php
是由于运维人员在配置服务器时,为了使 Apache 能够解析 PHP,而自己添加了一个 handler。这句话的作用也是为了让 Apache 把 PHP 文件交给 php_moudle 解析,但是它与 sethandler 的区别是它的后缀不是用正则去匹配。所以在文件名的任何位置匹配到 php,他都会让 php_module 解析。类似 1.php.xxx.yyy 文件就会是这样的顺序,.yyy 无法识别,向左,.xxx 无法识别,向左,.php 可以识别,就激活 php 处理器,执行 PHP 代码,解析漏洞就产生了
https://www.cnblogs.com/leixiao-/p/10223090.html