【WEB】[RoarCTF 2019]Easy Java

考点: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了

相关推荐
西峰u1 小时前
电商项目测试报告
java·项目测试报告
软件黑马王子1 小时前
19.资源加载模块:主要作用和基本原理
开发语言·前端框架·c#
lemon_sjdk1 小时前
各种Binding(1)
java·javafx·绑定·源码解析
李少兄1 小时前
记一次 IDEA 打开 Vue 项目后目录“闪现即消失“ 问题排查
java·vue.js·intellij-idea
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之安全配置基础及函数式风格对比
java·安全·spring
小荷才露尖尖角,早有蜻蜓立上头1 小时前
class java.util.LinkedHashMap cannot be cast to xxx
java·spring boot
陈皮波比茶1 小时前
计算机二级MySQL笔记
java·数据库
木井巳1 小时前
【BFS/DFS 解决 FloodFill 算法】衣橱整理
java·算法·leetcode·深度优先·广度优先·宽度优先
zzzll11111 小时前
LangChain 1.3 新特性详解与实战指南
java·数据库·langchain