攻擊JavaWeb應用[1]-JavaEE 基礎

wyzsk發表於2020-08-19
作者: iswin · 2013/07/04 18:46

0x00 JavaEE 基礎


JSP: 全名為java server page,其根本是一個簡化的Servlet

Servlet:Servlet是一種伺服器端的Java應用程式,可以生成動態的Web頁面。

JavaEE: JavaEE是J2EE新的名稱。改名目的是讓大家清楚J2EE只是Java企業應用。

什麼叫Jsp什麼叫Java我真的非常讓大家搞清楚!拜託別一上來就來一句:“前幾天我搞了一個jsp的伺服器,可難吭了。”。

請大家分清楚什麼是jsp什麼是JavaEE! Java平臺結構圖:

20130703172818_61466.jpg

可以看到Java平臺非常的龐大,而開發者的分化為:

20130703172846_40325.jpg

列舉這兩個圖的原因就是讓你知道你看到的JSP不過是冰山一角,Jsp技術不過是Java初級開發人員必備的技術而已。

我今天要講的就是Java樹的最下面的兩層了,也是初級工程師需要掌握的東西。

Web請求與相應簡要的流程:

20130703173033_49603.gif

這是一個典型的就是客戶端傳送一個HTTP請求到伺服器端,伺服器端接收到請求並處理、響應的一個過程。

如果請求的是JSP,tomcat會把我們的JSP編譯成Servlet也就是一個普通的Java類。

其實JSP是Servlet的一種特殊形式,每個JSP頁面就是一個Servlet例項。Servlet又是一個普通的Java類它編譯後就是一個普通的class檔案。

這是一個普通的jsp指令碼頁面,因為我只用JSP來作為展示層僅僅做了簡單的後端資料的頁面展示:

20130703175439_28704.png

上圖可以非常清晰的看到通常的Jsp在專案中的地位並不如我們大多數人所想的那麼重要,甚至是可有可無!因為我們完全可以用其他的東西來代替JSP作為前端展示層。 我們來看一下這個頁面編譯成class後是什麼樣子:

20130703175626_72063.png

你會發現你根本就看不懂這個class檔案,因為這是位元組碼檔案我們根本就沒法看。透過我們的TOMCAT編譯後他程式設計了一個Java類檔案儲存在Tomcat的work目錄下。

檔案目錄:C:\apache-tomcat-7.0.34\work\Catalina\localhost\你的專案名\org\apache\jsp

20130703175736_31874.png

我們只要開啟index_jsp.java或者用jd-gui(Java反編譯工具)開啟就行了:

20130703175806_35537.png

有人說這是Servlet嗎?當然了。

20130703175859_89447.png

繼承HttpJspBase類,該類其實是個HttpServlet的子類(jasper是tomcat的jsp engine)。

Jsp有著比Servlet更加優越的展現,很多初學PHP的人恐怕很難把檢視和邏輯分開吧。比如之前在寫PHPSQL隱碼攻擊測試的DEMO:

20130703175946_12770.png 

這程式碼看起來似乎沒有什麼大的問題,也能正確的跑起來啊會有什麼問題呢?原因很簡單這屬於典型的展現和業務邏輯沒有分開!這和寫得爛的Servlet差不多!

說了這麼多,很多人會覺得Servlet很抽象。我們還是連建立一個Servlet吧:

20130703180119_18901.png

建立成功後會自動的往web.xml裡面寫入:

20130703180159_14918.png

其實就是一個對映的URL和一個處理對映的類的路徑。而我們自動生成的Java類精簡後大致是這個樣子:

20130703180237_62390.png

請求響應輸出內容:

20130703180312_90096.png

熟悉PHP的大神們這裡就不做解釋了哦。瞭解了Jsp、Servlet我們再來非常簡單的看一下JavaWeb應用是怎樣跑起來的。

載入web.xml的配置然後從配置裡面獲取各種資訊為WEB應用啟動準備。

科普:C:\apache-tomcat-7.0.34\webapps下預設是部署的Web專案。webapps 下的資料夾就是你的專案名了,而專案下的WebRoot一般就是網站的根目錄了,WebRoot下的資料夾WEB-INF預設是不讓Web訪問的,一般存在配置洩漏多半是nginx配置沒有過濾掉這個目錄。

20130703180428_53304.png

20130703180442_56745.png

快速定位資料庫連線資訊:

大家可能都非常關心資料庫連線一般都配置在什麼地方呢?

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

大多數的Spring框架都是配置在applicationContext裡面的:

20130703180636_91481.png

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

20130703180710_10465.png

還有一種變態的配置方式就是直接解除安裝原始碼裡面:

20130703180735_97556.png

Tomcat的資料來源(其他的伺服器大同小異):

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

20130703180923_33143.png

20130703180936_47449.png

Resin資料來源:

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

其他的配置方式諸如讀取如JEECMS讀取的就是.properties配置檔案,這種方式非常的常見:

20130703181109_16068.png

0x01 Tomcat 基礎


enter image description here

沒錯,這就是 TOM 貓。樓主跟這隻貓打交道已經有好幾年了,在 Java 應用當中 TOMCAT 運用的非常的廣泛。

TOM 貓是一個 Web 應用伺服器,也是 Servlet 容器。

Apache+Tomcat 做負載均衡:

enter image description here

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.xml、server.xml。如果網站有域名繫結那麼你可以試下ping域名然後帶上埠訪問。有可能會出現tomcat的登入介面。tomcat預設是沒有配置使用者登入的,所以當tomcat-users.xml下沒有相關的使用者配置就別在這裡浪費時間了。  
8、如果配置未找到那麼到網站目錄下的WEB-INF目錄和其下的classes目錄下找下對應的properties、xml(一般都是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:

enter image description here

需要修改: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>

enter image description here

Resin 的

enter image description here

請求處理:

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

enter image description here

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 配置就無壓力了。

enter image description here

整合成功後:

enter image description here

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章