Advertisement
JohnGalt14

Zoho Desktop Central CVE-2021-44515 Detector

Dec 6th, 2021
3,317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.50 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.io.FileNotFoundException;
  3. import java.io.InputStream;
  4. import java.io.FileInputStream;
  5. import java.util.List;
  6. import java.util.Enumeration;
  7. import java.util.Properties;
  8. import java.io.Reader;
  9. import java.io.BufferedReader;
  10. import java.io.FileReader;
  11. import java.io.File;
  12. import java.util.ArrayList;
  13.  
  14. //
  15. // Decompiled by Procyon v0.5.36
  16. //
  17.  
  18. public class DetectVulnurability
  19. {
  20.     static final String basePath = "";
  21.     static final String jsonPath = "..\\logs\\SSID.props";
  22.     static String[] potentialFileList;
  23.     static String classpathDir;
  24.    
  25.     public static void main(final String[] args) {
  26.         Boolean compromised = Boolean.FALSE;
  27.         try {
  28.             System.out.println("Going to Check for IR232 in Desktop central service\n");
  29.             final Properties properties = readPropertiesFile("" + DetectVulnurability.classpathDir);
  30.             final Enumeration<String> enums = (Enumeration<String>)properties.propertyNames();
  31.             final List<String> list = new ArrayList<String>();
  32.             while (enums.hasMoreElements()) {
  33.                 final String key = enums.nextElement();
  34.                 final String value = properties.getProperty(key);
  35.                 list.add(value);
  36.             }
  37.             Boolean zipFound = Boolean.FALSE;
  38.             for (int i = 0; i < list.size(); ++i) {
  39.                 final String[] jarList = getFileList("..\\" + list.get(i));
  40.                 for (int j = 0; j < jarList.length; ++j) {
  41.                     if (jarList[j].endsWith(".zip")) {
  42.                         zipFound = Boolean.TRUE;
  43.                         compromised = Boolean.TRUE;
  44.                     }
  45.                 }
  46.             }
  47.             if (zipFound) {
  48.                 printAndWriteToLog("Check 1 : Fail : Zip deploy  Confirmed\n\n");
  49.             }
  50.             else {
  51.                 printAndWriteToLog("Check 1 : Safe : Zip Not present\n\n");
  52.             }
  53.             final File file = new File("..\\logs\\SSID.props");
  54.             try {
  55.                 if (file.exists()) {
  56.                     final BufferedReader br = new BufferedReader(new FileReader(file));
  57.                     String line;
  58.                     while ((line = br.readLine()) != null) {
  59.                         if (line.matches("RCEF=.*")) {
  60.                             if (line.contains("\"deletedCount\"\\:0") && zipFound) {
  61.                                 printAndWriteToLog("Check 2 : Fail : Zip was created and deletion failed. Attack Active\n\n");
  62.                                 compromised = Boolean.TRUE;
  63.                             }
  64.                             else if (line.matches("\"deletedCount\"\\:[0-9]+")) {
  65.                                 printAndWriteToLog("Check 2 : safe : Zip was created and Silent Fix deleted Zip\n\n");
  66.                             }
  67.                             if (!line.contains("\"attackStatus\"\\:\"active\"")) {
  68.                                 continue;
  69.                             }
  70.                             compromised = Boolean.TRUE;
  71.                         }
  72.                     }
  73.                 }
  74.                 else {
  75.                     compromised = Boolean.TRUE;
  76.                     printAndWriteToLog("Check 2 : Fail Silent Fix not executed\n\n");
  77.                 }
  78.                 if (getMaliciousFileCount(DetectVulnurability.potentialFileList) > 0) {
  79.                     printAndWriteToLog("Check 3 : Fail Potential backdoor found\n\n");
  80.                     compromised = Boolean.TRUE;
  81.                 }
  82.                 else {
  83.                     printAndWriteToLog("Check 3 : Safe No known backdoor found\n\n");
  84.                 }
  85.             }
  86.             catch (Exception e) {
  87.                 e.printStackTrace();
  88.             }
  89.         }
  90.         catch (Exception e2) {
  91.             e2.printStackTrace();
  92.         }
  93.         if (compromised) {
  94.             System.out.println("COMPROMISED. Contact Support");
  95.         }
  96.         else {
  97.             System.out.println("SAFE. Your setup is safe");
  98.         }
  99.     }
  100.    
  101.     private static int getMaliciousFileCount(final String[] fileList) {
  102.         int count = 0;
  103.         for (int i = 0; i < fileList.length; ++i) {
  104.             if (new File("" + fileList[i]).exists()) {
  105.                 ++count;
  106.             }
  107.         }
  108.         return count;
  109.     }
  110.    
  111.     private static String[] getFileList(final String path) {
  112.         String[] files = new String[0];
  113.         final File file = new File(path);
  114.         if (file.exists()) {
  115.             files = file.list();
  116.         }
  117.         return files;
  118.     }
  119.    
  120.     private static void printAndWriteToLog(final String input) {
  121.         System.out.print(input);
  122.     }
  123.    
  124.     private static Properties readPropertiesFile(final String fileName) throws IOException {
  125.         FileInputStream fis = null;
  126.         Properties prop = null;
  127.         try {
  128.             fis = new FileInputStream(fileName);
  129.             prop = new Properties();
  130.             prop.load(fis);
  131.         }
  132.         catch (FileNotFoundException fnfe) {
  133.             fnfe.printStackTrace();
  134.         }
  135.         catch (IOException ioe) {
  136.             ioe.printStackTrace();
  137.         }
  138.         finally {
  139.             fis.close();
  140.         }
  141.         return prop;
  142.     }
  143.    
  144.     static {
  145.         DetectVulnurability.potentialFileList = new String[] { "..\\webapps\\DesktopCentral\\html\\help_me.jsp", "..\\webapps\\DesktopCentral\\html\\help_me.html" };
  146.         DetectVulnurability.classpathDir = "..\\conf\\classpath.conf";
  147.     }
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement