[RoarCTF 2019]Easy Java
-
java源码泄露
0x01初步尝试
看到登录第一反应是sql,试了一下,没什么进展。ctrl+u看到有个超链接,是help按键对应的链接。得到
java.io.FileNotFoundException:{help.docx}
发现help.docx的部分更改之后也可以回显,以为是注入捏(结果不是,别学我)
0x02/WEB-INF/web.xml
首先是直接在url里加上/help.docx,下载得到文档,内容如下:
鉴于是java,于是去找Java的源码泄露。参照这位师傅的总结博客(ctf/web源码泄露及利用办法【总结中】_Sp4rkW的博客-CSDN博客_web源码泄露)https://blog.csdn.net/wy_97/article/details/78165051
本题用到的是WEB-INF/web.xml和/WEB-INF/classes/泄露
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-INF/web.xml得到文件但是失败了,查看源码发现有个地方是要求POST方式传入
(不知道是不是因为这里,如果理解有误还请其他师傅指正)
所以在Download页面试了试,传参如下,成功下载了
0x03构造payload
看看web.xml,这几行里有flag相关
<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>
首先试了试直接访问根目录下的/Flag,然而并没有什么用。
但是!!这里的<servlet-class>是不是很眼熟!
/WEB-INF/classes/:含了站点所有用到的 class 文件,包括 servlet class 和非servlet class
所以我们只需要继续在Download页面用POST传入“filename=”+这一串路径(com.wm.ctf.FlagController),把路径中的“."换成”/"(个人觉得是因为java和php访问路径的格式不一样),并且在前面加上/WEB-INF/classes/,在末尾加上文件后缀(.class)就可以得到payload啦
完整payload:
filename=/WEB-INF/classes/com.wm.ctf.FlagController.class
需要注意的是,直接在页面中传参会报错,得不到回显,所以抓包查看
高亮的这一段是不是很可疑!所以丢去base64解码一下,flag就出来了~~