題目
點進去看到這個登陸框:
點擊help,發現URL發生變化,且多了一條報錯信息
把發包方式換成POST,發現可以下載help.docx:
下載help.docx後,發現什麼都沒有。於是我們構造一個錯誤的POST包,得到它的文件路徑:
接下來就好辦了。
WEB-INF是Java的WEB應用的安全目錄。所謂安全就是客戶端無法訪問,只有服務端可以訪問的目錄。以我下的Tomcat裏的例子來看:
- /WEB-INF/web.xml 你的Web應用程序配置文件,這是一個XML文件,其中描述了 servlet 和其他的應用組件配置及命名規則; (最最最最最最主要的突破口)
- /WEB-INF/classes/ 這個目錄包含了站點所有用的 class 文件,包括 servlet class 和非servlet class,他們不能包含在 .jar文件中。站點的類的存放規則應該按照Java的打包規則執行。例如: 有一個類命名爲 com.mycompany.mypackage.MyServlet, 你應該按照以下形式部署: /WEB-INF/classes/com/mycompany/mypackage/MyServlet.class ;
- /WEB-INF/tags/ 標籤文件庫,存放了客戶定義的標籤文件,該目錄並不一定爲 tags,用戶可以根據自己的喜好和習慣爲自己的標籤文件庫命名,當使用了用戶定義的標籤文件庫名稱時,在用戶使用標籤文件時就必須聲明正確的標籤文件庫路徑。例如:當自定義標籤文件庫名稱爲 simpleTags 時,在使用 simpleTags 目錄下的標籤文件時,就必須在 jsp 文件頭聲明爲:<%@ taglib prefix=“tags” tagdir="/WEB-INF/simpleTags" % >;
- /WEB-INF/jsp/ Jsp 1.2 以下版本的文件存放位置。改目錄沒有特定的聲明,同樣,用戶可以根據自己的喜好與習慣來命名。此目錄主要存放的是 Jsp 1.2 以下版本的文件,爲區分 Jsp 2.0 文件,通常使用 jsp 命名
- /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框架是否有普遍性,或者是哪裏的提示我沒有看到。