您的位置:首页 > 运维架构 > Apache

vulhub靶场练习——Apache换行解析、多后缀解析、以及ssl远程命令执行漏洞分析

2020-01-12 10:37 429 查看

Apache HTTP
Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
[2] Apache
HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。 --百度

文章目录

  • 2.Apache多后缀解析漏洞(apache_parsing_vulnerability):
  • 3.Apache ssl远程命令执行漏洞(ssi-rce):
  • 1.Apache换行解析漏洞(CVE-2017-15715):

    漏洞描述:

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

    漏洞原理:

    关于原理我这里引用的是前辈们的总结

    apache的这个解析漏洞根本原因就是一个 $ 符,在正则中通常用 $ 符来匹配字符串的结尾位置
    匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 \ $。

    这里说的RegExp 对象,用来表示的就是正则表达式

    也就是在设置过RegExp 对象的 Multiline 属性后$会匹配 ‘\n’ 或 ‘\r’。
    那我们进入docker环境中看一看apache2是如何配置的


    文件匹配php后面确实多了个$符。

    漏洞利用

    这次实验我将使用虚拟机来完成实验,进入httpd这个目录


    选择CVE-2017-15715这个漏洞目录,docker-compose up -d开启环境

    开启后,我们需要进入容器内部,输入:

    docker exec -it containerID /bin/bash

    containerID可通过docker ps查看,我这里是0a43cb32d381

    进入之后,我们可以给容器安装一个vim方便文本编辑,命令如下:

    apt-get update
    apt-get install vim

    安装好之后输入:

    vim hack.php$'\n'

    来创建一个后缀用$匹配换行符的php文件,内容如下,引用了phpinfo()函数:

    我这里用kali进入网址,打开文件发现确实调用了phpinfo()函数,文件被解析成php。

    2.Apache多后缀解析漏洞(apache_parsing_vulnerability):

    漏洞描述:

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

    漏洞原理:

    Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件:
    AddType text/html .
    html
    AddLanguage zh-CN .cn
    其给.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言,值为zh-CN。此时,如果用户请求文件index.cn.html,他将返回一个中
    文的html页面。
    那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

    漏洞利用:

    进入apache_parsing_vulnerability环境目录开启容器,然后kali进入网页,端口为80:

    然后上传一个test.php.jpg,显示上传成功,进入目录查看文件


    发现jpg文件中的phpinfo()函数被成功调用:

    3.Apache ssl远程命令执行漏洞(ssi-rce):

    漏洞描述:

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

    漏洞原理:

    SSI(服务器端包含)是放置在HTML页面中的指令,并在服务页面时在服务器上对其进行评估。它们使您可以将动态生成的内容添加到现有的HTML页面,
    而不必通过CGI程序或其他动态技术来提供整个页面。
    其实apache的ssl更像是flask的jinjia2,用来实现和前端实现一种动态交互,只不过在配置ssl之后,如果上传接口没有过滤掉.shtml文件,那么就可以就其中包含我们要执行的命令。
    <!–#exec cmd=“ls -al” -->

    漏洞利用:

    进入最后一个容器环境ssi-rce
    使用kali进入网址

    同样是上传文件,这次创建一个info.php文件,上传的时候进行burp suite抓包处理,把请求包发送到repeater里进行改包

    将info.php改为shtml后缀,并在文件中加入exec命令,来实现远程命令执行,响应信息显示200OK说明文件上传成功。

    然后打开刚创建的文件,发现shell被执行

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    Regenwald 发布了7 篇原创文章 · 获赞 2 · 访问量 498 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: