Struts2漏洞总结

Struts2漏洞总结Struts2漏洞总结

大家好,又见面了,我是你们的朋友全栈君。

13年的网站,技术不成熟,坑坑洼洼,现在看当时的代码简直不忍直视。

14年Struts2报出Struts2的漏洞(2.0.0<=version<=2.3.15)

17年3月这次的S-045漏洞,被入侵者植入了后门程序,

1. Struts2的重定向漏洞

根据Apache给出的漏洞修复方案,只是升级了jar包版本2.3.16

升级完成后所有页面访问都出现了404,如下bug:

There is no Action mapped for namespace [/] and action name [XX!XX] associated with context path….

         解决办法:当时好像使用了Dynamic Method Invocation 动态方法调用,然后Struts.xml文件都修改了通配符和占位符匹配。

2. Struts2 OGNL的高危漏洞S-045

Struts使用的Jakarta解析文件上传请求包不当,当远程攻击者构造恶意的Content-Type,可能导致远程命令执行。

针对此问题做出如下修改:

  (1)根据Apache给出的漏洞修复方案,升级Struts2相关jar到2.3.32

 (2)关于上传文件部分做出如下验证

<1>上传文件非空验证;

<2>上传文件格式验证;

<3>上传文件验证MimeType;

<4>文件是否可被修改高宽或裁剪(本次项目上传完文件为图片)

<5>文件保存路径重命名。

验证MimeType如下:

public enum FileType {
	JPEG("FFD8FF"), PNG("89504E47"), GIF("47494638"), TIFF("49492A00"), BMP(
			"424d"), DWG("41433130"), PSD("38425053"), XML("3C3F786D6C"), HTML(
			"68746C3E"), PDF("25044462D312E"), ZIP("504B0304"), RAR("52617221"), WAV(
			"57415645"), AVI("41564920");

	private String value = "";

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

	private FileType(String value) {
		this.value = value;
	}
}

/**
	 * 验证图片的合法性
	 * @param file
	 * @return
	 * @throws IOException
	 */
	public static boolean isInMimeType(String fileUrl) throws IOException{
		boolean flag = false;
		String mtype = getMimeType(fileUrl);
		MimeType[] ts = MimeType.values();
		for (MimeType mt : ts) {
			if(mt.getValue().equals(mtype)){
				flag = true;
				break;
			}
		}
		return flag;
	}
	
	/**
	 * 获取图片MIME
	 * @param fileUrl
	 * @return
	 * @throws java.io.IOException
	 */
	public static String getMimeType(String fileUrl) throws java.io.IOException  {  
	     FileNameMap fileNameMap = URLConnection.getFileNameMap();  
	     String type = fileNameMap.getContentTypeFor(fileUrl);  
	     return type;  
	}



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161705.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 洗水管理系统_洗衣店信息管理系统课设

    洗水管理系统_洗衣店信息管理系统课设技术:Java、JSP等摘要:随着人们对生活物质的追求,人们对穿着有了更加深刻的体会以及认识,很多高档的服装可以给人们带来气质方面的展现和心情的愉悦。然后,对于高档服装的清洗也成为了实际性的问题,为此很多人们选择送去洗衣店去清洗,其目的是既清洗的干净,而且还方便。这就给洗衣店带来非常大的管理压力,尤其是记录用户的收费信息等。本次系统设计之初就考虑到这一点来进行需求调查的,系统主要的模块由用户登录模块,注册模块,办卡管理,充值管理,寄存衣服办理,报表统计管理等基本实现功能模块,系统主要采取的是B/S开发模式

    2025年6月18日
    0
  • BOOL ModifyStyleEx( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );[通俗易懂]

    BOOL ModifyStyleEx( DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0 );[通俗易懂]BOOLModifyStyleEx(DWORDdwRemove,DWORDdwAdd,UINTnFlags=0);

    2022年7月19日
    13
  • 尺度空间家具_空间尺度分析

    尺度空间家具_空间尺度分析尺度空间的基本思想:在视觉信息(图像信息)处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得不同尺度下视觉处理信息,然后综合这些信息以深入地挖掘图像的本质特征。尺度空间方法将传统的单尺度视觉信息处理技术纳入尺度不断变化的动态构架中,因此更容易获得图像的本质特征。尺度空间生成的目的是模拟图像数据的多尺度特征。尺度空间理论是通过对原始图像进行尺度变换,获得图像多尺度下的尺度空间表示

    2022年8月31日
    0
  • linux内核 recvfrom,Linux系统调用– recv/recvfrom 函数详解

    linux内核 recvfrom,Linux系统调用– recv/recvfrom 函数详解Linux系统调用–recv/recvfrom函数详解功能描述:从套接字上接收一个消息。对于recvfrom,可同时应用于面向连接的和无连接的套接字。recv一般只用在面向连接的套接字,几乎等同于recvfrom,只要将recvfrom的第五个参数设置NULL。如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套接字,多余的字节会丢弃。假如套接字上没有消息可以读取,除了套接字已被设置为非阻…

    2022年7月23日
    10
  • JVM基础和调优[通俗易懂]

    JVM基础和调优[通俗易懂]CMS和G1回收器,G1的并发标记周期,为什么要JVM调优?减少GC,特别是FullGC对象优先在堆的Eden区分配大对象直接进入老年代长期存活的对象将直接进入老年代.当Eden区没有足够的空间进行分配时,

    2022年6月9日
    30
  • Centos7安装MySQL详细步骤

    Centos7安装MySQL详细步骤Centos7安装MySQL详细步骤首先在虚拟机中安装一个Centos7(VM虚拟机安装Centos7)1.1MySQL安装1.1.1下载wget命令yum-yinstallwget1.1.2在线下载mysql安装包wgethttps://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm1.1.3安装MySQLrpm-ivhmysql57-community-release-el7-8.noar

    2022年6月13日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号