[RoarCTF 2019]Easy Java

混江龙づ霸主 提交于 2020-04-04 02:48:57

愿逝者安息,愿生者奋发,愿祖国昌盛 ——2020.4.4

java web的题目近年来也是层出不穷,拿这个题学习一下:

题目一览

一个登录界面,以为是注入,后来知道登录进去也没用:

有个help点进去:

这要是php的话……

考点:目录泄露

对于Java web来说,也有像php.ini这类配置文件可以被泄露,下面系统学习一下:https://www.cnblogs.com/yesec/p/12232045.html

介绍:WEB-INF是Java的WEB应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。 WEB-INF主要包含以下文件或目录:

  1. /WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
  2. /WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
  3. /WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
  4. /WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
  5. /WEB-INF/database.properties:数据库配置文件

一种典型的思路:

如果可以找到`web.xml`文件,进而得到所需class文件的路径。找到并反编译class文件,就可以获得源码。

所以这个题的?filename=就是让你来读这些敏感文件的,这里有个坑,要改成POST才能读取成功。

和我的开发爸爸探讨后,我觉得应该是一个迷惑行为,并不是xxx?a=1就一定是GET请求,更何况还报错了。

改成POST后,成功执行,虽然这个docx没用:

那么接下来来读WEB-INF/web.xml:

可以看到:

<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>

如果我们URL传入/Flag,就会执行这个servlet类,我们访问一下:

出现了类名:

看一下之前提到的:

所以构造:filename=WEB-INF/classes/com/wm/ctf/FlagController.class,在/Download下POST提交:

果然下载到了class文件:

用jd-gui反编译一下:

把那一串Base64解码后获得flag:

这道题如果熟悉Jave Web架构的话不是什么难题,还是要多下功夫。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!