vulhub靶场练习——Apache换行解析、多后缀解析、以及ssl远程命令执行漏洞分析
Apache HTTP
Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
[2] Apache
HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。 --百度
文章目录
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被执行
- 点赞
- 收藏
- 分享
- 文章举报
- Apache Tomcat CVE-2017-12615远程代码执行漏洞分析
- Apache shiro 1.2.4版本远程命令执行漏洞详解
- Bash远程解析命令执行漏洞测试方法
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- Supervisord远程命令执行漏洞分析(CVE-2017-11610)
- Apache Struts远程命令执行漏洞、开放式式重定向漏洞
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- Apache struts2 Freemarker标签远程命令执行_CVE-2017-12611(S2-053)漏洞复现
- Struts2远程命令执行漏洞 S2-045 源码分析
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- Apache struts2 namespace远程命令执行_CVE-2018-11776(S2-057)漏洞复现
- Apache struts2 namespace远程命令执行_CVE-2018-11776(S2-057)漏洞复现
- CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析
- Apache Struts2 多个前缀参数远程命令执行漏洞及测试方法
- Apache Struts2 远程命令执行漏洞
- Struts2 REST插件远程执行命令漏洞全面分析,WAF支持检测防御
- Apache Struts2远程命令执行漏洞呈爆发趋势
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- Bash远程解析命令执行漏洞测试方法
- Apache struts2远程命令执行_CVE-2017-9805(S2-052)漏洞复现