[RoarCTF 2019]Easy Java学到的tomcat安全小知识
程序员文章站
2022-05-19 13:48:07
...
题目
点进去看到这个登陆框:
点击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框架是否有普遍性,或者是哪里的提示我没有看到。
上一篇: Salesforce的CDC是做什么的?