freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

深度分析Struts 2 任意文件上传漏洞 CVE-2023-50164
2024-01-23 09:35:33

这是一个文件上传的逻辑漏洞,造成了容易文件上传可以getshell。

0x00漏洞信息

影响范围
Struts 2.0.0-2.3.37
Strust 2.5.0-2.5.32
Strust 6.0.0-6.3.0
这个漏洞需要使用struts2 来实现上传action,如果实现的上传方法没有加任何的Filter过滤或者WAF这些,那么就很可能可以被利用。

0x01 环境搭建

如果根据网上不完全的教程去搭建环境,坑很多。
其中一种:在官网下载了6.3.0的strstu2包,再其中的struts-STRUTS_6_3_0\apps\showcase\src\main\java\org\apache\struts2\showcase项目里面去修改,建议熟悉框架的师傅直接这样做,不熟悉的可以用下面的第二种方式。
ActionSupport

表示它是一个Struts2的Action。
该Action包含了三个属性:upload表示上传的文件,fileFileName表示上传的文件名,fileContentType表示上传的文件类型。
1.写对应的FileUploadAction,对应的Action代码
image
这里按照FileUploadAction来写一个Action

public class Upload extends ActionSupport {
    private File upload;
    private String uploadFileName;
    private String uploadContentType;

    // Custom upload logic
    public String execute() throws Exception {
        if (uploadFileName != null) {
            try {
                // Specify the directory where files will be uploaded
                String uploadDirectory = System.getProperty("user.dir") + "/uploads/";

                // Create the destination file
                File destFile = new File(uploadDirectory, uploadFileName);

                // Copy the uploaded file to the destination
                FileUtils.copyFile(upload, destFile);

                // Add message to reflect the exact upload path on the frontend
                addActionMessage("File uploaded successfully to " + destFile.getAbsolutePath());

                return SUCCESS;
            } catch (Exception e) {
                addActionError(e.getMessage());
                e.printStackTrace();
                return ERROR;
            }
        } else {
            return INPUT;
        }
     }

    // Getters and setters
    public File getUpload() {
        return upload;
    }

    public void setUpload(File upload) {
        this.upload = upload;
    }

    public String getUploadFileName() {
        return uploadFileName;
    }

    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }

    public String getUploadContentType() {
        return uploadContentType;
    }

    public void setUploadContentType(String uploadContentType) {
        this.uploadContentType = uploadContentType;
    }

}

2.在/resource/struts-fileupload.xml里面添加上action对应到result的jsp界面代码
image

3.在webapp/WEB-INF/fileupload/DemoUpload.jsp里面写入访问action返回的前端和调用这些
image4.最后在web.xml上要注册写好,但是这里改动加上就会报错,不知道怎么改
image

一般s2框架需要有4个地方改动才能完成映射

新建一个项目,一步步配置,做好4步。
image

创建一个maven项目,然后在Modules里面新建一个web选择路径到我们创建的webapp目
image然后在resource这里创建一个struts的xml,这样目录就出来了,再去写上传Action的代码

实在不会的可以去下一

# xss # 安全漏洞 # 漏洞复现
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录