[Vulhub] Apache HTTPD解析漏洞 & Apache SSI RCE


Apache HTTPD 换行解析漏洞(CVE-2017-15715)

0x00 漏洞描述

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


0x01 影响版本

Apache HTTPD 2.4.0~2.4.29


0x02 靶场环境

Apache HTTPD 2.4.0:https://vulhub.org/#/environments/httpd/CVE-2017-15715/


0x03 漏洞分析

index.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);
}?>
</body>

在默认的Apache的配置里面,判断是否解析为php文件是使用正则来匹配的(php|php4|phtml),而这个\符号不仅仅是可以匹配行尾,还可以匹配一个换行(因此我们上传的带有换行的文件就会被解析,但是 $_FILES['file']['name'] 会默认的将换行给去掉

漏洞分析:https://www.cnblogs.com/Mikasa-Ackerman/p/Apache-jie-xi-lou-dong-fu-xian-CVE201715715-ke-yi-.html


0x04 漏洞复现

访问index.php,上传php文件,被拦截:
在这里插入图片描述
在php后面插入一个\x0A(注意,不能是\x0D\x0A,只能是一个\x0A。其中\x0D\r的16进制,为回车符;\x0A\n的16进制,为换行符),不再拦截:
在这里插入图片描述
访问上传的hacker.php%0A,能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:
在这里插入图片描述


Apache HTTPD 多后缀解析漏洞

0x00 漏洞描述

Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析成php文件,利用Apache httpd这个特性,就可以绕过上传文件的白名单。


0x01 影响版本

该漏洞和apache版本和php版本无关,属于用户配置不当造成的解析漏洞


0x02 靶场环境

Apache,并附带PHP 7.3环境:https://vulhub.org/#/environments/httpd/apache_parsing_vulnerability/


0x03 漏洞分析

Apache HTTPD 支持一个文件拥有多个后缀,并为不同的后缀执行不同的指令。例如,如下配置文件:

AddType text/html .html
AddLanguage zh-CN .cn

其给.html后缀增加了media-type,是text/html;给.cn后缀了语言,是zh-CN。此时,如果用户请求文件index.cn.html,他将返回一个中文的html页面。

以上就是Apache多后缀的特性。如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

那么,在有一些后缀的情况下,只要有一个带有.php后缀的文件就会被识别成 PHP,没必要是最后的后缀。利用特性,将造成一个可以绕过上传白名单的解析漏洞。


0x04 漏洞复现

靶场搭建完成后,访问靶场地址,上传文件php文件被拦截:
在这里插入图片描述
index.php中是一个白名单检查文件后缀的上传组件,上传完成后并未重命名。可以我们通过上传文件名为xxx.php.jpgxxx.php.jpeg的文件,利用Apache的解析漏洞进行getshell。
在这里插入图片描述
访问文件地址,成功执行phpinfo():
在这里插入图片描述


Apache SSI 远程命令执行漏洞

0x00 漏洞描述

在测试任意文件上传漏洞的时候,目标服务端可能不允许上传php后缀的文件。如果目标服务器开启了SSI与CGI支持,我们可以上传一个shtml文件,并利用<!--#exec cmd="id" -->语法执行任意命令。

使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为"服务器端嵌入"或者叫"服务器端包含",是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm.shtm.shtml


0x01 影响版本

该漏洞和apache版本和php版本无关,属于用户配置不当造成的解析漏洞


0x02 靶场环境

一个支持SSI与CGI的Apache服务器:https://vulhub.org/#/environments/httpd/ssi-rce/


0x03 漏洞分析

SSI(服务器端包含)是​​放置在 HTML 页面中的指令,并在提供页面时在服务器上进行评估。它们使你可以将动态生成的内容添加到现有的 HTML 页面,而无需通过 CGI 程序或其他动态技术提供整个页面。而目标服务器开启了SSI与CGI支持,可以上传一个shtml文件语法执行任意命令。

例如,将指令放入现有的 HTML 页面,例如:<!--#echo var="DATE_LOCAL" -->
当页面被提供时,这个片段将被评估并替换为它的值:Tuesday, 15-Jan-2013 19:28:54 EST

参考文章:
https://httpd.apache.org/docs/2.4/howto/ssi.html
https://www.w3.org/Jigsaw/Doc/User/SSI.html


0x04 漏洞复现

访问upload.php,上传php文件被拦截:
在这里插入图片描述
上传一个.shtml文件,内容为<!--#exec cmd="id" -->
在这里插入图片描述
成功上传,然后访问hacker.shtml,可见命令已成功执行:
在这里插入图片描述


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值