Apache HTTPD 换行解析漏洞(CVE-2017-15715)
漏洞描述
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,shell.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
影响版本
Apache HTTPd 2.4.0~2.4.29
环境搭建
$ git clone https://github.com/vulhub/vulhub.git
$ cd vulhub/httpd/CVE-2017-15715
$ sudo docker-compose build
$ sudo docker-compose up -d
访问http://ip:8080/,出现以下页面即为环境搭建成功
漏洞复现
上传php后门文件,shell.php
文件上传失败
抓取数据包,在shell.php后面插入一个0a,上传成功
访问url,php代码执行成功
http://ip:8080/shell.php%0A
Apache HTTPD 多后缀解析漏洞
漏洞描述
预备知识
在对漏洞介绍之前我们先对httpd.conf文件进行一个介绍,httpd.conf是apache的一个总配置文件,在该文件中,有很多对apache解析网页参数的设置,我们挑三个来介绍
- AddType:为特定后缀的文件指定MIME类型
- AddLanguage:一个HTML文档可以同时具备多个语言的版本,如对于file1.html文档可以具备file1.html.en、file1.html.cn等不同的版本,每个语言后缀可以使用AddLanguage进行定义;这样服务器可以针对不同国家的客户,通过与浏览器进行协商,发送不同的语言版本
- AddHandler:用于指定非静态的处理类型,用指定的方式处理非静态文档后,再向浏览器返回处理结果
有了这个基础之后,我们再来讲解漏洞原理
apache解析的特性
Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令,比如,我们在httpd.conf中添加如下配置文件
AddType text/html .html
AddLanguage zh-CN .cn
此时,如果用户请求文件index.cn.html,他将返回一个中文的html页面(.cn后缀对应的AddLanguage是zh-CN,.html对应的AddType是text/html,.html和.cn标记的属性同时被apache执行了),那么,如果在apache配置文件中添加了php对应的解析的话,我们上传的文件中只要包含.php,php文件就会被执行
# 在配置文件中添加此项,将会造成一个可以绕过上传白名单的解析漏洞
AddHandler application/x-httpd-php .php
影响版本
跟服务器配置有关,与apache版本无关
环境搭建
$ git clone https://github.com/vulhub/vulhub.git
$ cd vulhub/httpd/apache_parsing_vulnerability
$ sudo docker-compose build
$ sudo docker-compose up -d
访问http://ip/,出现以下页面即为环境搭建成功
漏洞复现
我们查看一下apache的配置文件
# 在vulhub/httpd/apache_parsing_vulnerability/conf目录下
$ cat docker-php.conf
AddHandler application/x-httpd-php .php
DirectoryIndex disabled
DirectoryIndex index.php index.html
<Directory /var/www/>
Options -Indexes
AllowOverride All
可以看到添加了对php文件的解析设置:AddHandler application/x-httpd-php .php
上传php文件
上传失败
将shell.php,修改为shell.php.png
上传成功,访问:http://ip/uploadfiles/shell.php.png ,php代码执行成功