8.12
今天做了2題,CTFshow 紅包挑戰8(PHP create_function())和BUU [RoarCTF 2019]Easy Java(web.xml泄露)。
此外一直在打NepCTF,出了一題(ez_java_checkin)簡單了解了java中shrio反序列化漏洞的利用。
做Nep時候順便補充了一下文件包含的繞過方式。
CTFshow 紅包挑戰8(wp現在不能放)
NepCTF ez_java_checkin
BUU [RoarCTF 2019]Easy Java
考點:web.xml泄露
開題是一個登錄框。
點擊help
跳轉到/Download
路由,同時返回提示(報錯)。
由此我們得出/Download
路由后端語言是Java
,同時存在任意文件下載漏洞。
WEB-INF
是Java的WEB應用的安全目錄。如果想在頁面中直接訪問其中的文件,必須通過web.xml
文件對要訪問的文件進行相應映射才能訪問。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應用我們會使用多個web服務器搭配使用,解決其中的一個web服務器的性能缺陷以及做均衡負載的優點和完成一些分層結構的安全策略等。在使用這種架構的時候,由于對靜態資源的目錄或文件的映射配置不當,可能會引發一些的安全問題,導致web.xml
等文件能夠被讀取。
**漏洞檢測以及利用方法:**通過找到web.xml
文件,推斷class文件的路徑,然后讀取class文件,在通過反編譯class文件,得到網站源碼。
一般情況,jsp引擎默認都是禁止訪問WEB-INF
目錄的,Nginx 配合Tomcat做均衡負載或集群等情況時,問題原因其實很簡單,Nginx不會去考慮配置其他類型引擎導致的安全問題而引入到自身的安全規范中來。
**修復漏洞方法:*修改Nginx配置文件禁止訪問WEB-INF目錄就好了: location ~ ^/WEB-INF/ { deny all; } 或者return 404; 或者其他。
我們先嘗試利用任意文件下載漏洞讀取Web應用程序配置文件
。
這里提交方式要改為POST,應該是題目原因。
filename=/WEB-INF/web.xml
成功下載。
_WEB-INF_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>
我們重點看以下xml
代碼片段和前文提到的WEB-INF
包含的class
目錄
<servlet><servlet-name>FlagController</servlet-name><servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>
/WEB-INF/classes/:含了站點所有用的 class 文件,包括 servlet class 和非servlet class,他們不能包含在 .jar文件中
所以我們讀取FlagController.class
文件的payload如下:
filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
用記事本打開是編譯過的。
用IDEA打開自動反編譯。
ZmxhZ3s3NWYyYmNlYS01YTJhLTQ4OTYtOGExZi02ODIwNWExMGIwYjR9Cg==
解碼后
flag{75f2bcea-5a2a-4896-8a1f-68205a10b0b4}