Struts2 漏洞分析环境搭建


为了不再混水摸鱼,开始补习安全基础,开始学Java安全(ง •̀_•́)ง,从最经典的Struts2漏洞开始,本篇是环境搭建过程。

1、测试环境

macOS Catalina 版本 10.15.6
Java version "1.8.0_261"
IDEA 2020.2
tomcat 9.0.39

2、创建项目

2.1 Maven

通过Maven创建项目,如下图的顺序,注意勾选Create from archetype,选择webapp。

-w1376

下一步就是选择项目文件夹
-w1376

然后groupidartifactid都可以自定义,之后Finish。

-w1376

然后会自动下载所需的jar包等文件进行构建,只需要静静等待几分钟就好了。
然后此时创建好的项目如图所示。

-w1512

接下来分别添加并配置Maven的pom.xml,Tomcat的web.xml,Struts2的struts.xml

在main目录下创建一个java文件夹,里面放置我们自定义的java类文件.
-w406

在里面我们创建自定义的Java Package。
-w406

然后在其中创建一个名为LoginAction的Java类,内容为:

package com.lanvnal.s2001.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{
    private String username = null;
    private String password = null;

    public String getUsername() {
        return this.username;
    }

    public String getPassword() {
        return this.password;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String execute() throws Exception {
        if ((this.username.isEmpty()) || (this.password.isEmpty())) {
            return "error";
        }
        if ((this.username.equalsIgnoreCase("admin"))
                && (this.password.equals("admin"))) {
            return "success";
        }
        return "error";
    }
}

刚开始添加了代码之后可能会有报错,这是因为没有引入该包

-w674

可以先不用管,去配置一下pom.xml就好了。
接下来修改pom.xml,添加如下内容:(添加到<dependencies>这一对标签中)

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.0.8</version>
</dependency>

添加这个配置之后,点击界面上出现了maven更新小按钮Maven会自动将对应版本的Jar包下载导入,不需要手工配置了。
-w368

再修改web.xml,在这里主要是配置struts2的过滤器。

<web-app>
  <display-name>S2-001 Example</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

然后,在 webapp 目录下创建&修改两个文件 —— index.jsp&welcome.jsp,内容如下。

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>S2-001</title>
</head>
<body>
<h2>S2-001 Demo</h2>
<p>link: <a href="https://cwiki.apache.org/confluence/display/WW/S2-001">https://cwiki.apache.org/confluence/display/WW/S2-001</a></p>
<s:form action="login">
    <s:textfield name="username" label="username" />
    <s:textfield name="password" label="password" />
    <s:submit></s:submit>
</s:form>
</body>
</html>

welcome.jsp

<%--
  Created by IntelliJ IDEA.
  User: lanvnal
  Date: 2020/12/11
  Time: 12:32 上午
  To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>S2-001</title>
</head>
<body>
<p>Hello <s:property value="username"></s:property></p>
</body>
</html>

然后在 main 文件夹下创建一个 resources 文件夹,内部添加一个 struts.xml,内容为:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="S2-001" extends="struts-default">
        <action name="login" class="com.mengsec.s2001.action.LoginAction">
            <result name="success">welcome.jsp</result>
            <result name="error">index.jsp</result>
        </action>
    </package>
</struts>

这里遇到了个小问题,就是添加 struts.xml 文件时新建文件模板里没有对应的配置:
-w1005

解决方案就是在首选项 => plugins => 搜索struts2 然后安装就好了
-w1109

-w824

此时项目目录如下:
-w401

接下来配置Tomcat服务器,在Mac上的话,直接 brew install tomcat 即可安装tomcat9,安装的路径为/usr/local/Cellar/tomcat/9.0.39

To have launchd start tomcat now and restart at login:
brew services start tomcat
Or, if you don’t want/need a background service you can just run:
catalina run

如果想要后台启动服务,使用:brew services start tomcat
不需要的话直接:catalina run

2.2 添加服务器

添加一个本地的Tomcat服务器。具体步骤如下图
-w1426

这个路径参考前面安装时提到的安装目录
-w1507

端口根据自身环境修改,我改成了8008.
然后右下角的提示,可以点击fix或者点击Deployment,添加一个artifacts。

然后点击左上角的绿色三角就可以运行了。

2.3 测试环境

在username 的输入框输入:%{1+1}

如图,环境搭建成功!


文章作者: LANVNAL
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LANVNAL !
  目录