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

相关推荐
andyweike4 小时前
php笔记
开发语言·笔记·php
EatFan5 小时前
Spring Boot 4 落地观察:从 yudao-cloud、matecloud、JPower 看国产脚手架的升级路线与迁移清单
java·spring boot·后端·spring cloud·微服务·后端开发·jdk 21
Maiko Star5 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
Circ.5 小时前
Python 调试 Litellm 本地大模型接口:模型列表与对话接口实操踩坑记录
开发语言·python
现任明教教主~7 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
Zhou1411367 小时前
SpringSecurity_02_授权与高级功能
开发语言·python
一条破秋裤8 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
布吉岛的石头8 小时前
Java 程序员第 49 阶段5:BERT 预训练目标 MLM+NSP 的工程含义
java·人工智能·深度学习·bert·transformer
码匠许师傅8 小时前
【C++三方组件】cpp-httplib:一个头文件起 HTTP 服务
开发语言·c++·http