攻击JavaWeb应用[7]-Server篇[1] – 园长

java应用服务器


Java应用服务器主要为应用程序提供运行环境,为组件提供服务。Java 的应用服务器很多,从功能上分为两类:JSP 服务器和 Java EE 服务器。

常见的Server概述

常见的Java服务器:Tomcat、Weblogic、JBoss、GlassFish、Jetty、Resin、IBM Websphere、Bejy Tiger、Geronimo、Jonas、Jrun、Orion、TongWeb、BES Application Server、ColdFusion、Apusic Application Server、Sun Application Server 、Oracle9i/AS、Sun Java System Application Server。

Myeclipse比较方便的配置各式各样的Server,一般只要简单的选择下Server的目录就行了。  enter image description here

部署完成后启动进入各个Server的后台:

enter image description here

构建WebShell war文件

1、打开Myeclipse新建Web项目
2、把jsp放到WebRoot目录下
3、导出项目为war文件

enter image description here

Tomcat


Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

Tomcat版本

Tomcat主流版本:5-6-7,最新版Tomcat8刚发布不久。Tomcat5较之6-7在文件结构上有细微的差异,6-7-8没有大的差异。最新版的Tomcat8主要新增了:Servlet 3.1, JSP 2.3, EL 3.0 and Web Socket 1.0支持。

版本详情说明:http://tomcat.apache.org/whichversion.html

结构目录:

Tomcat5:

Bin、common、conf、LICENSE、logs、NOTICE、RELEASE-NOTES、RUNNING.txt、Server、shared、Temp、webapps、work

Tomcat6-8:

Bin、conf、lib、LICENSE、logs、NOTICE、RELEASE-NOTES、RUNNING.txt、temp、webapps、work

关注conf和webapps目录即可。conf目录与非常重要的tomcat配置文件比如登录帐号所在的tomcat-users.xml;域名绑定目录、端口、数据源(部分情况)、SSL所在的server.xml;数据源配置所在的context.xml文件,以及容器初始化调用的web.xml。

源码下载:

Tomcat6:http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_18/

Tomcat7:http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk/

Tomcat默认配置

1、tomcat-users.xml

Tomcat5默认配置了两个角色:tomcat、role1。其中帐号为both、tomcat、role1的默认密码都是tomcat。不过都不具备直接部署应用的权限,默认需要有manager权限才能够直接部署war包,Tomcat5默认需要安装Administration Web Application。Tomcat6默认没有配置任何用户以及角色,没办法用默认帐号登录。

配置详解:http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Introduction

2、context.xml

Tomcat的上下文,一般情况下如果用Tomcat的自身的数据源多在这里配置。找到数据源即可用对应的帐号密码去连接数据库。

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/u3" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="xxxxx" password="xxxx" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.0.xxx:3306/xxx?autoReconnect=true"/>
</Context>

3、server.xml

Server这个配置文件价值非常高,通常的访问端口、域名绑定和数据源可以在这里找到,如果想知道找到域名对应的目录可以读取这个配置文件。如果有用Https,其配置也在这里面能够找到。

4、web.xml

web.xml之前讲MVC的时候有提到过,项目初始化的时候会去调用这个配置文件这个文件一般很少有人动但是不要忽略其重要性,修改web.xml可以做某些YD+BT的事情。

Tomcat获取WebShell

Tomcat后台部署war获取WebShell

登录tomcat后台:http://xxx.com/manager/html,一般用WAR file to deploy就行了,Deploy directory or WAR file located on server这种很少用。

1>Deploy directory or WAR file located on server

Web应用的URL入口、XML配置文件对应路径、WAR文件或者该Web应用相对于/webapps目录的文件路径,然后单击 按钮,即可发布该Web应用,发布后在Application列表中即可看到该Web应用的信息。这种方式只能发布位于/webapps目录下的Web应用。

2>WAR file to deploy

选择需要发布的WAR文件,然后单击Deploy,即可发布该Web应用,发布后在Application列表中即可看到该Web应用的信息。这种方式可以发布位于任意目录下的Web应用。

其中,第二种方式实际上是把需要发布的WAR文件自动复制到/webapps目录下,所以上述两种方式发布的Web应用都可以通过在浏览器地址栏中输入http://localhost:8080/Web进行访问。

enter image description here

Tips:
当访问xxxx.com找不到默认管理地址怎么办?
1:http://xxxx.com/manager/html 查看是否存在
2:ping xxxx.com 获取其IP地址,在访问:http://111.111.111.111/manager/html
3:遍历server.xml配置读取配置

Tomcat口令爆破

Tomcat登录比较容易爆破,但是之前说过默认不对其做任何配置的时候爆破是无效的。

Tomcat的认证比较弱,Base64(用户名:密码)编码,请求:” /manager/html/”如果响应码不是401(未经授权:访问由于凭据无效被拒绝。)即登录成功。

conn.setRequestProperty("Authorization", "Basic " + new BASE64Encoder().encode((user + ":" + pass).getBytes()));

Tomcat漏洞

Tomcat5-6-7安全性并不完美,总是被挖出各种稀奇古怪的安全漏洞。在CVE和Tomcat官网也有相应的漏洞信息详情。

怎样找到Tomcat的历史版本:

http://archive.apache.org/dist/tomcat/

Tomcat历史版本漏洞?

Tomcat官网安全漏洞公布:

Apache Tomcat - Apache Tomcat 5 漏洞: http://tomcat.apache.org/security-5.html

Apache Tomcat - Apache Tomcat 6 漏洞: http://tomcat.apache.org/security-6.html

Apache Tomcat - Apache Tomcat7 漏洞: http://tomcat.apache.org/security-7.html

CVE 通用漏洞与披露: http://cve.scap.org.cn/cve_list.php?keyword=tomcat&action=search&p=1

Cvedetails : http://www.cvedetails.com/product/887/Apache-Tomcat.html?vendor_id=45 http://www.cvedetails.com/vulnerability-list/vendor_id-45/product_id-887/Apache-Tomcat.html

Sebug: http://sebug.net/appdir/Apache+Tomcat

怎样发现Tomcat有那些漏洞?

1、通过默认的报错页面(404、500等)可以获取到Tomcat的具体版本,对照Tomcat漏洞。

2、利用WVS之类的扫描工具可以自动探测出对应的版本及漏洞。

怎样快速确定是不是Tomcat?

请求响应为:Server:Apache-Coyote/1.1 就是tomcat了。

Tomcat稀奇古怪的漏洞:

Tomcat的安全问题被爆过非常多,漏洞统计图:

enter image description here

有一些有意思的漏洞,比如:Insecure default password CVE-2009-3548(影响版本: 6.0.0-6.0.20)

The Windows installer defaults to a blank password for the administrative user. If this is not changed during the install process, then by default a user is created with the name admin, roles admin and manager and a blank password.在windows安装版admin默认空密码漏洞,其实是用户安装可能偷懒,没有设置密码…

enter image description here

这样的问题在tar.gz和zip包里面根本就不会存在。有些漏洞看似来势汹汹其实鸡肋得不行如:Unexpected file deletion in work directory CVE-2009-2902 都已经有deploy权限了,闹个啥。

Tomcat非常严重的漏洞(打开Tomcat security-5、6、7.html找):

Important: Session fixation CVE-2013-2067 (6.0.21-6.0.36) 
Important: Denial of service CVE-2012-3544 (6.0.0-6.0.36) 
Important: Denial of service CVE-2012-2733 (6.0.0-6.0.35) 
Important: Bypass of security constraints CVE-2012-3546 (6.0.0-6.0.35) 
Important: Bypass of CSRF prevention filter CVE-2012-4431 (6.0.30-6.0.35) 
Important: Denial of service CVE-2012-4534 (6.0.0-6.0.35) 
Important: Information disclosure CVE-2011-3375 (6.0.30-6.0.33) 
Important: Authentication bypass and information disclosure CVE-2011-3190 (6.0.0-6.0.33) (………………………………………………….) 
Important: Directory traversal CVE-2008-2938 (6.0.18) 
Important: Directory traversal CVE-2007-0450 (6.0.0-6.0.9)

如果英文亚历山大的同学,对应的漏洞信息一般都能够在中文的sebug找到。

Sebug:

enter image description here

CVE 通用漏洞与披露:

enter image description here

Resin


Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。

Resin比较有趣的是默认支持PHP! Resin默认通过Quercus 动态的去解析PHP文件请求。(Resin3也支持,详情:http://zone.wooyun.org/content/2467

Resin版本

Resin主流的版本是Resin3和Resin4,在文件结构上并没有多大的变化。Resin的速度和效率非常高,但是不知怎么Resin似乎对Quercus 更新特别多。

4.0.x版本更新详情:http://www.caucho.com/resin-4.0/changes/changes.xtp

3.1.x版本更新详情:http://www.caucho.com/resin-3.1/changes/changes.xtp

Resin默认配置

1、resin.conf和resin.xml

Tomcat和Rsin的核心配置文件都在conf目录下,Resin3.1.x 默认是resin.conf而4.0.x默认是resin.xml。resin.conf/resin.xml是Resin最主要配置文件,类似Tomcat的server.xml。

1>数据源:

第一节的时候有谈到resin数据源就是位于这个文件,搜索database(位于server标签内)即可定位到具体的配置信息。

2>域名绑定

搜索host即可定位到具体的域名配置,其中的root-directory是域名绑定的对应路径。很容易就能够找到域名绑定的目录了。

<host id="javaweb.org" root-directory=".">
<host-alias-regexp>^([^/]*).javaweb.org</host-alias-regexp>
<web-app id="/" root-directory="D:/web/xxxx/xxxx"/>
</host>

Resin默认安全策略

1>管理后台访问权限

Resin比较BT的是默认仅允许本机访问管理后台,这是因为在resin.conf当中默认配置禁止了外部IP请求后台。

<resin:set var="resin_admin_external" value="false"/>

修改为true外部才能够访问。

2>Resin后台管理密码

Resin的管理员密码需要手动配置,在resin.conf/resin.xml当中搜索management。即可找到不过需要注意的是Resin的密码默认是加密的,密文是在登录页自行生成。比如admin加密后的密文大概会是:yCGkvrQHY7K8qtlHsgJ6zg== 看起来仅是base64编码不过不只是admin默认的Base64编码是:YWRtaW4= Resin,翻了半天Resin终于在文档里面找到了:http://www.caucho.com/resin-3.1/doc/resin-security.xtp

enter image description here

虽说是MD5+Base64加密但是怎么看都有点不对,下载Resin源码找到加密算法:

package com.caucho.server.security.PasswordDigest

enter image description here

这加密已经没法反解了,所以就算找到Resin的密码配置文件应该也没法破解登录密码。事实上Resin3的管理后台并没有其他Server(相对JBOSS和Weblogic)那么丰富。而Resin4的管理后台看上去更加有趣。

Resin4的加密方式和Resin3还不一样改成了SSHA:

admin_user : admin
admin_password : {SSHA}XwNZqf8vxNt5BJKIGyKT6WMBGxV5OeIi

详情:http://www.caucho.com/resin-4.0/admin/security.xtp

Resin3:

enter image description here

Resin4:

enter image description here

Resin获取WebShell

As of Resin 4.0.0, it is now possible to deploy web applications remotely to a shared repository that is distributed across the cluster. This feature allows you to deploy once to any triad server and have the application be updated automatically across the entire cluster. When a new dynamic server joins the cluster, the triad will populate it with these applications as well.

Web Deploy war文件大概是从4.0.0开始支持的,不过想要在Web deploy一个应用也不是一件简单的事情,首先得先进入后台。然后还得以Https方式访问。不过命令行下部署就没那没法麻烦。Resin3得手动配置web-app-deploy。 最简单的但又不爽办法就是想办法把war文件上传到resin-pro-3.1.13webapps目录下,会自动部署(就算Resin已启动也会自动部署,不影响已部署的应用)。

Resin3部署详情:http://www.caucho.com/resin-3.1/doc/webapp-deploy.xtp

Resin4部署War文件详情:http://www.caucho.com/resin-4.0/admin/deploy.xtp

Resin4进入后台后选择Deploy,不过还得用SSL方式请求。Resin要走一个”非加密通道”。

To deploy an application remotely: log into the resin-admin console on any triad server. Make sure you are connecting over SSL, as this feature is not available over a non-encrypted channel. Browse to the "webapp" tab of the resin-admin server and at the bottom of the page, enter the virtual host, URL, and local .war file specifying the web application, then press "Deploy". The application should now be deployed on the server. In a few moments, all the servers in the cluster will have the webapp.

enter image description here

Resin4敢不敢再没节操点?默认HTTPS是没有开的。需要手动去打开:

conf

esin.properties

原文链接:http://drops.wooyun.org/tips/604

评论已关闭。