[RoarCTF 2019]Easy Java學到的tomcat安全小知識

題目

點進去看到這個登陸框:
在這裏插入圖片描述
點擊help,發現URL發生變化,且多了一條報錯信息
在這裏插入圖片描述
把發包方式換成POST,發現可以下載help.docx:
在這裏插入圖片描述
下載help.docx後,發現什麼都沒有。於是我們構造一個錯誤的POST包,得到它的文件路徑:
在這裏插入圖片描述
接下來就好辦了。
WEB-INF是Java的WEB應用的安全目錄。所謂安全就是客戶端無法訪問,只有服務端可以訪問的目錄。以我下的Tomcat裏的例子來看:
在這裏插入圖片描述

  1. /WEB-INF/web.xml 你的Web應用程序配置文件,這是一個XML文件,其中描述了 servlet 和其他的應用組件配置及命名規則; (最最最最最最主要的突破口)
  2. /WEB-INF/classes/ 這個目錄包含了站點所有用的 class 文件,包括 servlet class 和非servlet class,他們不能包含在 .jar文件中。站點的類的存放規則應該按照Java的打包規則執行。例如: 有一個類命名爲 com.mycompany.mypackage.MyServlet, 你應該按照以下形式部署: /WEB-INF/classes/com/mycompany/mypackage/MyServlet.class ;
  3. /WEB-INF/tags/ 標籤文件庫,存放了客戶定義的標籤文件,該目錄並不一定爲 tags,用戶可以根據自己的喜好和習慣爲自己的標籤文件庫命名,當使用了用戶定義的標籤文件庫名稱時,在用戶使用標籤文件時就必須聲明正確的標籤文件庫路徑。例如:當自定義標籤文件庫名稱爲 simpleTags 時,在使用 simpleTags 目錄下的標籤文件時,就必須在 jsp 文件頭聲明爲:<%@ taglib prefix=“tags” tagdir="/WEB-INF/simpleTags" % >;
  4. /WEB-INF/jsp/ Jsp 1.2 以下版本的文件存放位置。改目錄沒有特定的聲明,同樣,用戶可以根據自己的喜好與習慣來命名。此目錄主要存放的是 Jsp 1.2 以下版本的文件,爲區分 Jsp 2.0 文件,通常使用 jsp 命名
  5. /WEB-INF/jsp2/ 與 jsp 文件目錄相比,該目錄下主要存放 Jsp 2.0 以下版本的文件,當然,它也是可以任意命名的,同樣爲區別 Jsp 1.2 以下版本的文件目錄,通常才命名爲 jsp2。
    (出自文章:https://blog.csdn.net/COM_JAVA/article/details/2088717

接下來就是下載web.xml文件了:
文件內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <welcome-file-list>
        <welcome-file>Index</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>IndexController</servlet-name>
        <servlet-class>com.wm.ctf.IndexController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>IndexController</servlet-name>
        <url-pattern>/Index</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>LoginController</servlet-name>
        <servlet-class>com.wm.ctf.LoginController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginController</servlet-name>
        <url-pattern>/Login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>DownloadController</servlet-name>
        <servlet-class>com.wm.ctf.DownloadController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DownloadController</servlet-name>
        <url-pattern>/Download</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>FlagController</servlet-name>
        <servlet-class>com.wm.ctf.FlagController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FlagController</servlet-name>
        <url-pattern>/Flag</url-pattern>
    </servlet-mapping>

</web-app>

可以看到有個FlagController,可能是flag文件所在,按照我們之前關於class文件夾所說的內容,
在這裏插入圖片描述
在這裏插入圖片描述FlagController應該是在WEB-INF/classes/com/wm/ctf/FlagController.class裏,於是我們把文件下載下來即可得到flag的base64,解碼得到flag。

知識點梳理:

WEB-INF目錄

WEB-INF目錄是tomcat中的最重要的突破口,裏面的web.xml文件相當於告訴了你目錄,class文件夾裏的控制器就可以被很好地利用起來。

疑惑之處

關於javaIO

在之前GET參數時返回狀態碼200,但是並沒有讓我下載文件,而是返回了一個虛假的報錯信息(無法讀取文件)。但用POST方式卻不一樣。POST傳參下載文件對於tomcat框架是否有普遍性,或者是哪裏的提示我沒有看到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章