攻击JavaWeb应用[1]-JavaEE 基础

园长 2013-07-04 18:46:00

0x00 JavaEE 基础


JSP: 全名为java server page,其根本是一个简化的Servlet

Servlet:Servlet是一种服务器端的Java应用程序,可以生成动态的Web页面。

JavaEE: JavaEE是J2EE新的名称。改名目的是让大家清楚J2EE只是Java企业应用。

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

请大家分清楚什么是jsp什么是JavaEE!Java平台结构图:

可以看到Java平台非常的庞大,而开发者的分化为:

列举这两个图的原因就是让你知道你看到的JSP不过是冰山一角,Jsp技术不过是Java初级开发人员必备的技术而已。

我今天要讲的就是Java树的最下面的两层了,也是初级工程师需要掌握的东西。

Web请求与相应简要的流程:

这是一个典型的就是客户端发送一个HTTP请求到服务器端,服务器端接收到请求并处理、响应的一个过程。

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

其实JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例。Servlet又是一个普通的Java类它编译后就是一个普通的class文件。

这是一个普通的jsp脚本页面,因为我只用JSP来作为展示层仅仅做了简单的后端数据的页面展示:

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

你会发现你根本就看不懂这个class文件,因为这是字节码文件我们根本就没法看。通过我们的TOMCAT编译后他编程了一个Java类文件保存在Tomcat的work目录下。

文件目录:C:\apache-tomcat-7.0.34\work\Catalina\localhost\你的项目名\org\apache\jsp

我们只要打开index_jsp.java或者用jd-gui(Java反编译工具)打开就行了:

有人说这是Servlet吗?当然了。

继承HttpJspBase类,该类其实是个HttpServlet的子类(jasper是tomcat的jsp engine)。

Jsp有着比Servlet更加优越的展现,很多初学PHP的人恐怕很难把视图和逻辑分开吧。比如之前在写PHPSQL注入测试的DEMO:

 

这代码看起来似乎没有什么大的问题,也能正确的跑起来啊会有什么问题呢?原因很简单这属于典型的展现和业务逻辑没有分开!这和写得烂的Servlet差不多!

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

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

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

请求响应输出内容:

熟悉PHP的大神们这里就不做解释了哦。了解了Jsp、Servlet我们再来非常简单的看一下JavaWeb应用是怎样跑起来的。

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

科普:C:\apache-tomcat-7.0.34\webapps下默认是部署的Web项目。webapps 下的文件夹就是你的项目名了,而项目下的WebRoot一般就是网站的根目录了,WebRoot下的文件夹WEB-INF默认是不让Web访问的,一般存在配置泄漏多半是nginx配置没有过滤掉这个目录。

快速定位数据库连接信息:

大家可能都非常关心数据库连接一般都配置在什么地方呢?

答案普遍是:C:\apache-tomcat-7.0.34\webapps\wordpress\WEB-INF下的***.xml

大多数的Spring框架都是配置在applicationContext里面的:

如果用到Hibernate框架那么:WebRoot\WEB-INF\classes\hibernate.cfg.xml

还有一种变态的配置方式就是直接卸载源代码里面:

Tomcat的数据源(其他的服务器大同小异):

目录:C:\apache-tomcat-7.0.34\conf\context.xml、server.xml

Resin数据源:

路径:D:\installDev\resin-pro-4.0.28conf\resin.conf(resin 3.x是resin.xml)

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

0x01 Tomcat 基础


没错,这就是 TOM 猫。楼主跟这只猫打交道已经有好几年了,在 Java 应用当中 TOMCAT 运用的非常的广泛。

TOM 猫是一个 Web 应用服务器,也是 Servlet 容器。

Apache+Tomcat 做负载均衡:

Tomcat快速定位到网站目录:

如何快速的找到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.xmlserver.xml如果网站有域名绑定那么你可以试下ping域名然后带上端口访问有可能会出现tomcat的登录界面tomcat默认是没有配置用户登录的所以当tomcat-users.xml下没有相关的用户配置就别在这里浪费时间了  
8如果配置未找到那么到网站目录下的WEB-INF目录和其下的classes目录下找下对应的propertiesxml一般都是properties)。  
9如果你够蛋疼可以读取WEB.XML下的classess内的源码  
10祝你好运

apache快速定位到网站目录:

普通的域名绑定:

直接添加到confhttpd.conf、confextrahttpd-vhosts.conf

Resin快速定位到网站目录:

在resin的conf下的resin.conf(resin3.x)和resin.xml(resin4.x)

Resin apache 负载均衡配置(从我以前的文章中节选的)

APACHE RESIN 做负载均衡,Resin 用来做 JAVAWEB 的支持,APACHE 用于处理静态

和 PHP 请求,RESIN 的速度飞快,RESIN 和 apache 的配合应该是非常完美的吧。

域名解析:

apache 的 httpd.conf:

需要修改:Include conf/extra/httpd-vhosts.conf(一定要把前面的#除掉,否则配置不起作用)

普通的域名绑定:

直接添加到 httpd.conf

<VirtualHost *:80>
    ServerAdmin admin@bjcyw.cn
    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>

Resin 的

请求处理:

<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 的支持:

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 了。

PHP 支持问题:

resin 默认是支持 PHP 的测试 4.0.29 的时候就算你把 PHP 解析的 servlet 配置删了一样解析 PHP,无奈换成了 resin 3.1 在注释掉 PHP 的 servlet 配置就无压力了。

整合成功后:

评论

N

nyannyannyan 2013-07-04 22:24:45

真有心....应该还会连载的吧...现在貌似提到的大部分是架构的基础

梧桐雨 2013-07-05 08:44:59

多谢园长分享,又对JAVAWeb有了另一层的认识。

园长 2013-07-05 10:47:42

感谢支持,会有连载的...

X

xss_art 2013-07-05 11:32:26

期待园长长期连载。。。刚开始研究javaweb安全,正需要这样的文章。。。。谢谢分享。。。(0_0)

S

se55i0n 2013-07-05 12:06:45

顶园长MM

G

gniq 2013-07-05 17:42:59

这一篇的科普很到位,顶一下,从基础的讲起,慢慢深入安全

墨水心_Len 2013-07-05 18:02:16

mark

冷静 2013-07-05 20:01:49

搂起顶大牛

D

dave 2013-07-05 20:27:34

攻击??说科普更对。。我还以为java有爆啥0DAY.噶噶

B

B1acken 2013-07-06 15:02:29

一不小心闯了进来

园长 2013-07-07 01:13:22

慢慢来,会有的。老板上oday,多放辣椒。

子墨 2013-07-08 09:12:52

越是懂得多越是觉得自己是小菜

啦绯哥 2013-07-09 22:48:31

好东西,又看了一遍,除非DB源封装在jar和class里面,其他类型的配置1分钟就找到了

核攻击 2013-07-11 10:40:23

nice!

C

c2y2 2013-10-27 21:37:17

每看一次,都想说声,园长 谢谢你

路人甲 2014-05-13 19:24:52

经典,最近也在学j2ee,可以更好的了解网站入侵了

二狗子 2014-05-14 19:05:17

好东西,最近在学Java,先收藏了。

X

xiaoxin 2014-05-15 08:57:44

"还有一种变态的配置方式就是直接卸载源代码里面",应该是写在,不是卸载吧,认真看完每一行是对作者的尊重

F

fastory 2014-05-15 11:55:39

好好学习,天天向上啊

L

lulu 2014-06-18 10:31:35

谢谢分享,学习一下。
发现文中有一点点错误。
普通的域名绑定:
直接添加到confhttpd.conf、confextrahttpd-vhosts.conf
这里应该是:conf/httpd.conf、conf/extra/httpd-vhosts.conf
-------------------------------
9、如果你够蛋疼可以读取WEB.XML下的classess内的源码。
这里应该是:读取WEB-INF下的classes内源码

无力落地の白 2014-09-03 17:17:29

跟我一样的感受 谢谢园长!!!!!!!

路人甲 2014-11-01 14:32:50

dasdas

C

cf_hb 2014-12-03 14:09:39

作为曾自学过j2ee的人表示都白学了哎。。。感谢园长的分享,今天好好看看学习学习连载的几篇文章。

路人甲 2015-01-17 20:53:35

还是看不懂。。更基础的是啥。。。。

大亮 2015-06-25 23:21:42

刚开始在园长那里找发现没有1,后来又搜了搜才找到这个,为什么要叫iswin发这篇文章啊?

园长

2-3/3

twitter weibo github wechat

随机分类

memcache安全 文章:1 篇
硬件与物联网 文章:40 篇
Android 文章:89 篇
Python安全 文章:13 篇
逆向安全 文章:70 篇

扫码关注公众号

WeChat Offical Account QRCode

最新评论

K

k0uaz

foniw师傅提到的setfge当在类的字段名成是age时不会自动调用。因为获取

Yukong

🐮皮

H

HHHeey

好的,谢谢师傅的解答

Article_kelp

a类中的变量secret_class_var = "secret"是在merge

H

HHHeey

secret_var = 1 def test(): pass

目录