问题描述:该问题是由于Struts2框架,主要是2.2之前版本漏洞所造成的,漏洞会引起数据泄露和容易被黑客攻击。
解决思路1:可以对现有工程进行maven版本更新,升级到2.3,但是版本升级一般费时费力
解决思路2:下载当前工程使用的Struts2版本源码,修改DefaultActionMapper中handleSpecialParameters方法
因为本项目版本依赖复杂,版本升级难度较大,所以这里采用了解决思路2;
首先,去下载Struts2源码:https://download.csdn.net/download/qq_38281963/10814789
然后,去修改DefaultActionMapper.java文件中handleSpecialParameters方法:
public void handleSpecialParameters(HttpServletRequest request,ActionMapping mapping) {
// handle special parameter prefixes.
Set<String> uniqueParameters = new HashSet<String>();
Map parameterMap = request.getParameterMap();
for (Iterator iterator = parameterMap.keySet().iterator(); iterator
.hasNext();) {
String key = (String) iterator.next();
// Strip off the image button location info, if found
if (key.endsWith(".x") || key.endsWith(".y")) {
key = key.substring(0, key.length() - 2);
}
//we can insert 'action','redirect','redirectAction' filter
if ((key.contains("action:")) || (key.contains("redirect:")) || (key.contains("redirectAction:"))) {
return;
}
// Ensure a parameter doesn't get processed twice
if (!uniqueParameters.contains(key)) {
ParameterAction parameterAction = (ParameterAction) prefixTrie
.get(key);
if (parameterAction != null) {
parameterAction.execute(key, mapping);
uniqueParameters.add(key);
break;
}
}
}
}
修改完毕后,导出jar包,替换掉原来版本中的DefaultActionMapper.class即可
到这里漏洞就解决完成,使用struts漏洞利用工具无S2-016漏洞