发布时间:2025-12-09 13:43:38 浏览次数:4
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; }