文章目录
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.jpg
或xxx.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,可见命令已成功执行: