愿逝者安息,愿生者奋发,愿祖国昌盛 ——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主要包含以下文件或目录:
- /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.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架构的话不是什么难题,还是要多下功夫。
来源:https://www.cnblogs.com/keelongz/p/12630153.html