进入题目是一个登录页面,admin@admin888
弱口令进去发现没啥东西,然后注意到一个文件下载的点:
感觉可能存在任意文件读取漏洞,先尝试读取一下Java应用的配置文件WEB-INF/web.xml
,直接请求发现Get
方式不行,换Post
就可以了:
然后得到文件内容
<?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>
顺便补一下Java Web的一些基础常识,引用王叹之师傅的总结,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-INF/web.xml
中我们看到有一个com.wm.ctf.FlagController
包,然后我们就可以推测其class字节码文件的路径为WEB-INF/classes/com/wm/ctf/FlagController.class
,因为Java中包名和类的源文件物理位置有关,包名表示目录结构,其中包名中的点代表子文件夹。
用POST
方法读取FlagController类的class字节码文件得到:
看到这里有一串base64密文,解码就可以得到flag。