【经典好文】- 攻击JavaWeb应用 [1]

建立社区的目的在于知识的分享和积累,那么对于ThreatHunter社区来说,我们希望能建立一个专业的技术讨论社区,所以对于社区的每个版块,我们希望这个版块在该领域是有一定影响力的,同样也希望为刚开始学习相关领域的同学提供一些素材。这个系列是经典好文的收录,希望更多的同学能在社区分享你的知识。

本系列经过@yzmm园长师傅的授权,由于他最近比较忙就由我代发了,后续他会为大家带来更多精彩的文章。

简介

注:本节仅让大家简单的了解Java一些相关知识,简要介绍了下JavaWeb结构和servlet容器以及怎么样去快速找到敏感信息,后面的章节也是建立在此基础上。本人从未从事过网络安全行业,技术不精文中肯定有很多的错误或者不足之处,欢迎指正,THX!

JAVAEE基础

JSP: 全名为java server page,其根本是一个简化的Servlet设计。 Servlet:Servlet是一种服务器端的Java应用程序,可以生成动态的Web页面。 JavaEE: JavaEE是J2EE新的名称。改名目的是让大家清楚J2EE只是Java企业应用。

什么叫Jsp什么叫Java我真的非常让大家搞清楚!拜托别一上来就来一句:“前几天我搞了一个jsp的服务器,可难吭了”。请大家分清楚什么是jsp什么是JavaEE!

Java平台结构图: <div align=“center”> image.png </div> 可以看到Java平台非常的庞大,而开发者的分化为: image.png

列举这两个图的原因就是让你知道你看到的JSP不过是冰山一角,Jsp技术不过是Java初级开发人员必备的技术而已。 我今天要讲的就是Java树的最下面的两层了,也是初级工程师需要掌握的东西。 image.png 这是一个典型的就是客户端发送一个HTTP请求到服务器端,服务器端接收到请求并处理、响应的一个过程。

如果请求的是JSP,tomcat会把我们的JSP编译成Servlet也就是一个普通的Java类。

其实JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例。Servlet又是一个普通的Java类它编译后就是一个普通的class文件。 这是一个普通的jsp脚本页面,因为我只用JSP来作为展示层仅仅做了简单的后端数据的页面展示: image.png

上图可以非常清晰的看到通常的Jsp在项目中的地位并不如我们大多数人所想的那么重要,甚至是可有可无!因为我们完全可以用其他的东西来代替JSP作为前端展示层。

我们来看一下这个页面编译成class后是什么样子: image.png

你会发现你根本就看不懂这个class文件,因为这是字节码文件我们根本就没法看。通过我们的TOMCAT编译后他编程了一个Java类文件保存在Tomcat的work目录下。 文件目录:C:\apache-tomcat-7.0.34\work\Catalina\localhost\你的项目名\org\apache\jsp image.png 我们只要打开index_jsp.java或者用jd-gui(Java反编译工具)打开就行了: image.png 有人说这是Servlet吗?当然了。

说了这么多,很多人会觉得Servlet很抽象。我们还是连创建一个Servlet吧: image.png

创建成功后会自动的往web.xml里面写入: image.png

其实就是一个映射的URL和一个处理映射的类的路径。而我们自动生成的Java类精简后大致是这个样子: image.png

请求响应输出内容: image.png

了解了Jsp、Servlet我们再来非常简单的看一下JavaWeb应用是怎样跑起来的。 image.png

加载web.xml的配置然后从配置里面获取各种信息为WEB应用启动准备。

科普:C:\apache-tomcat-7.0.34\webapps\下默认是部署的Web项目。webapps 下的文件夹就是你的项目名了,而项目下的WebRoot一般就是网站的根目录了,WebRoot下的文件夹WEB-INF默认是不让Web访问的 image.pngimage.png

如何找到数据源

大家可能都非常关心数据库连接一般都配置在什么地方呢? 答案普遍是:C:\apache-tomcat-7.0.34\webapps\wordpress\WEB-INF下的***.xml 大多数的Spring框架都是配置在applicationContext里面的: image.png

如果用到Hibernate框架那么:WebRoot\WEB-INF\hibernate.cfg.xml 还有一种变态+SB的配置方式就是直接卸载源代码里面: image.png

Tomcat的数据源(其他的服务器大同小异): 目录:C:\apache-tomcat-7.0.34\conf\context.xml image.pngimage.png

Resin数据源: 路径:D:\install\Dev\resin-pro-4.0.28\conf\resin.conf image.png

其他的配置方式诸如读取如JEECMS读取的就是.properties配置文件,这种方式非常的常见: image.png

一般情况下Java的数据库配置都在WEBROOT下的WEB-INF目录下的多数情况在**.xml、.properties、.conf

Tomcat基础

  1. 不管是谁都应该明白的是不管apache还是tomcat安装的路径都是随意的,所以找不到路径也是非常正常的。
  2. 在你的/etc/httpd/conf/httpd.conf里面会有一个LoadModule jk_module配置用于集成tomcat然后找到JkWorkersFile也就是tomcat的配置,找到.properties的路径。httpd里面也有可能会配置路径如果没有找到那就去apache2\conf\extra\httpd-vhosts看下有没有配置域名绑定。
  3. 在第二步的时候找到了properties配置文件并读取,找到workers.tomcat_home也就是tomcat的配置路径了。
  4. 得到tomcat的路径你还没有成功,域名的具体配置是在conf下的server.xml。
  5. 读取server.xml不出意外你就可以找到网站的目录了。
  6. 如果第五步没有找到那么去webapps目录下ROOT瞧瞧默认不配置的话网站是部署在ROOT下的。
  7. 这一点是附加的科普知识爱听则听:数据库如果启用的tomcat有可能会采用tomcat的数据源配置未见为conf下的context.xml、server.xml。如果网站有域名绑定那么你可以试下ping域名然后带上端口访问。有可能会出现tomcat的登录界面。tomcat默认是没有配置用户登录的,所以当tomcat-users.xml下没有相关的用户配置就别在这里浪费时间了。
  8. 如果配置未找到那么到网站目录下的WEB-INF目录和其下的classes目录下找下对应的properties、xml(一般都是properties)。
  9. 如果你够蛋疼可以读取WEB.XML下的classess内的源码。
  10. 祝你好运。

Resin apache

APACHE RESIN做负载均衡,Resin用来做JAVAWEB的支持,APACHE用于处理静态和PHP请求,RESIN的速度飞快,RESIN和apache的配合应该是比较完美的吧。

域名解析: apache的httpd.conf: image.png 需要修改:Include conf/extra/httpd-vhosts.conf(一定要把前面的#除掉,否则配置不起作用) 普通的域名绑定: 直接添加到httpd.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot E:/XXXX/XXX
    ServerName beijingcanyinwang.com
    ErrorLog E:/XXXX/XXX/bssn-error_log
    CustomLog E:/XXXX/XXX/bssn_log common
</VirtualHost>

二级域名绑定,需要修改: E:\install\apache2\conf\extra\httpd-vhosts.conf 如:

<VirtualHost  *:80>    
     DocumentRoot E:/XXXXXXX/XXX
     ServerName bbs.beijingcanyinwang.com
     DirectoryIndex index.html index.php index.htm
</VirtualHost>

image.png

Resin的: image.png

请求处理:

<LocationMatch (.*?).jsp>
SetHandler caucho-request
</LocationMatch>
<LocationMatch (.*?).action>
SetHandler caucho-request
</LocationMatch>
<LocationMatch union-resin-stat-davic>
SetHandler caucho-request
</LocationMatch>
<LocationMatch stat>
SetHandler caucho-request
</LocationMatch>
<LocationMatch load>
SetHandler caucho-request
</LocationMatch>
<LocationMatch vote>
SetHandler caucho-request
</LocationMatch>

APACHE添加对Resin的支持: image.png

LoadModule caucho_module “E:/install/resin-pro-3.1.12/win32/apache-2.2/mod_caucho.dll”

然后在末尾加上:

<IfModule mod_caucho.c>
  ResinConfigServer localhost 6800
  CauchoStatus yes
</IfModule>

只有就能让apache找到resin了。


为您推荐了相关的技术文章:

  1. ne2der
  2. 一篇文章走进Mac逆向的世界
  3. IBM WebSphere java反序列化漏洞分析
  4. 免杀技术有一套(免杀方法大集结)(Anti-AntiVirus)
  5. 微信(WeChat)电脑端多开研究+源码

原文链接: threathunter.org