次のテキストを日本語に翻訳します:
cisp-pte のファイルアップロードの問題を 1 つ選んで、アップロードされたファイルのパスを推測するために爆破を行う必要があります。
問題を開くと、以下の画面が表示されます。
ファイルアップロードの部分のコードが示されています。
$filename = $files["name"];
$randnum = rand(1, 99999);
$fullpath = '/' . md5($filename.$randnum).".".substr($filename,strripos($filename,'.') + 1);
コードからわかるように、アップロードされたファイル名は md5 で暗号化されます。暗号化方法は、現在のアップロードされたファイル名に 1 から 99999 のランダムな数を加え、その後に。ファイルの拡張子が続きます。
試しにファイルをアップロードしてみましょう。アップロードされたファイルは eval などのキーワードをフィルタリングしますが、大文字を使用して回避することができます。content-type は画像形式に変更する必要があります。
アップロードに成功した後、アップロード後のファイルのパスを見ることができません。
アップロードされたコードに基づいて、まず画像をアップロードし、アップロードされた画像を md5 で暗号化します。md5 (1.php1).php となります。画像をアップロードした後、アップロードされたファイルのパスがわからないため、アップロード後のファイル名を推測する必要があります。推測には md5 (1.php1).php の方法を使用します。
以下は具体的な手順です:
- パケットを intruder に配置し、x-forwarded-for パラメータに 127.0.0.1 を設定し、パラメータ 1 をトラバースします。
- 次に、ペイロードオプションを設定します。
Payload type: Numbers
From: 1
To: 200
Step: 1
1 から 99999 の範囲で 1 から 200 をトラバースします。
さらに、2 つの値を設定する必要があります。ペイロード処理では、各値をトラバースする際に、1.php の接頭辞を追加し、その内容(1.php [1-200])を md5 で暗号化します。
- アップロードに成功すると、サイズと長さが同じになります。この時点ではアップロード後のファイル名がわかりません。なぜなら、1.php [1-200] の md5 値は同じだからです。したがって、もう一度爆破を行い、この時は直接ファイル名をリクエストします。/md5 (1.php [1-200]) としてアクセスできるものが正しいファイル名です。
- アップロード後のファイル名を推測し、md5 で暗号化された内容に直接アクセスします。
ペイロードの設定は、ファイルのアップロードと同じです。
200 のステータスコードで区別することで、アップロードされたファイル名が以下の図のようにわかります。
アップロードに成功したら、蚁剣で接続します。
追加情報:2023 年 7 月 21 日
上記の方法は、ファイルのアップロード部分でやや冗長な手順です。ここでは、より簡単な解決策を提供します。
- パケットをキャプチャします。
ペイロードを設定し、パケットを送信します。ここでは他のペイロードを設定する必要はありません。null ペイロードは、リクエストを繰り返し送信することを意味します。
- 次に、パスを爆破します。
任意のパスをリクエストし、.php を残します。
ペイロードの設定は次のようになります:
2000 のペイロードで複数のファイルをアップロードできます。