cliente reciente llamado a decir antes de la existencia de un proyecto Struts2 S2-016 lagunas , Fijemos actualizar tan pronto como sea posible . Sin embargo boca voló por los puntales exploits (PASS: be60) se pusieron a prueba , y por supuesto la existencia de esta vulnerabilidad ( código de vulnerabilidad de ejecución remota S2-016 ).
Sitio oficial describe como sigue :
http://struts.apache.org/release/2.3.x/docs/s2-016.html
¿Cómo resolverlo ?
-
De acuerdo a la página oficial dijo que la actualización a 2.3.15 en el futuro , por lo que puede ser producido un error desconocido , debido a que la versión anterior es 2.1.6.
-
Procesada en la versión original , modificar el código fuente .
Aquí para hablar de soluciones : (puntales versión 2.1.6)
-
En primer lugar, descargar el struts2 2.1.6 código fuente (struts-2.1.6-all.zip) y deshacer las maletas
-
Entonces IDE para crear una java de proyectos y \ \ src \ núcleo src \ principales \ puntales-2.1.6 java archivo más a Kaoru src directorio
-
Modificar org \ apache \ struts2 \ despachador \ asignador \ DefaultActionMapper.java este archivo handleSpecialParameters método , añada el siguiente código rojo en el método :
<span style="font-size:14px;">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
<span style="color:#ff0000;"> <span style="color:#000000;">if (key.endsWith(".x") || key.endsWith(".y")) {</span>
</span>
key = key.substring(0, key.length() - 2);
}
<span style="color:#ff0000;">// 增加对action、redirect、redirectAction参数的过滤
if ((key.contains("action:")) || (key.contains("redirect:")) || (key.contains("redirectAction:"))) {
return;
}
</span>
// 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;
}
}
}
}
</span>
Esto solucionará S2-016 y S2-17 vulnerabilidades .
4. Modificar la finalización del proyecto será exportado en frasco de paquete , este tiempo debe tenerse en cuenta que , debido a esta clase no ha encontrado algunas referencias , cruz roja , por lo que este paquete fallará , necesidad de XWork-core-2.1.6. tarro y servlet-api.jar dos tarro paquetes a unirse al proyecto , en este momento de la desaparición de la cruz roja , a continuación, exportar el tarro de paquete .
DefaultActionMapper.java rojo derivado cruz tarro paquete como este :
DefaultActionMapper.java añadió frasco después de que el paquete es tal que ninguna cruz roja :
5. botón secundario tarro de paquete utilizando la herramienta Extract para abrir el frasco de paquete , la caja roja seleccionado 7 archivo de copia este archivo para reemplazar los siete proyectos .
6. Para resolver este vulnerabilidad a la completa , utilizando puntales explota sin S2-016 y S2-017 vulnerabilidades.
7. Modificar bien después struts2-Core-2.1.6 (Pass: 0182) archivos.