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如下:

代码语言:javascript
复制
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 = &#34;&#34;;

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;  
}</code></pre></div></div><p>发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161705.html原文链接:https://javaforall.cn</p>