攻擊JavaWeb應用————1、JavaEE基礎

FLy_鵬程萬里發表於2018-05-17

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的安裝路徑:


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 [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>

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

enter image description here

整合成功後:


相關文章