考点:WEB-INF 任意文件读取,Java 敏感路径
打开题目,随便输入个测试:


密码错误,那就回去再点help,会发现有个报错:

我们用的是GET方法访问,**而这是 Java 异常,**这说明两件事:①后端确实是 Java (Tomcat);②GET这条路走不通。
既然如此,那就用POST方法访问。
抓包,将GET改为POST:

很多乱码:

我们能看到有个参数名叫filename,能往里面传参数,对 Java 来说,最高效的 "第一读" 就是 WEB-INF/web.xml,因为它是部署描述符,相当于整站的 "总路由表 + 零件清单" :里面登记了每一个 Servlet(后端类)的类全名 和它对应的网址。读这一个文件,就等于拿到了全站地图,接下来按图索骥即可。

在Java Web 应用里,编译后的代码(.class 文件)有两个固定存放位置:
WEB-INF/classes/:放没有打包成 jar 的.class;WEB-INF/lib/:放打包成 jar 的第三方库(jar 里装的也是一堆 .class)。
当Tomcat 启动时,它的类加载器(ClassLoader)只会去这两个地方找类 :先扫 WEB-INF/classes/,再扫 WEB-INF/lib/*.jar。所以一个类 com.wm.ctf.FlagController,Tomcat 找它时,默认就是去 WEB-INF/classes/com/wm/ctf/FlagController.class 这个位置找。
为什么最后要加 .class?
因为 Java 的编译产物就叫这个后缀。
- 程序员写的源码是
FlagController.java(文本,人能读); - 用
javac编译后,生成的是FlagController.class(字节码,给 JVM 执行的二进制); - 运行在服务器上的、Tomcat 真正加载的,是编译后的
.class,不是.java源码(源码一般不部署到服务器)。
直接访问,看到一串base64编码:

解码后就看到flag了
