banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

cisp-pteのファイルアップロードの問題

来一题 cisp-pte 中的ファイルアップロードの問題で、アップロードファイルのパスを推測するためにブルートフォース攻撃を行う必要があります。

問題を開くと、以下の画面が表示されます。

image

ファイルアップロードの部分のコードが示されています。

$filename = $files["name"];
$randnum = rand(1, 99999);
$fullpath = '/' . md5($filename.$randnum).".".substr($filename,strripos($filename,'.') + 1); 

コードからわかるように、アップロードされたファイル名は md5 で暗号化され、暗号化方法は現在のアップロードされたファイル名に 1 から 99999 のランダムな数値を追加し、その後に。とファイルの拡張子が続きます。

ファイルをアップロードしてみましょう。アップロードされたファイルは eval などのキーワードをフィルタリングしますが、大文字を使用することで回避できます。また、content-type を画像形式に変更する必要があります。

image

アップロードが成功した後、アップロード後のパスを表示することができません。

アップロードされたコードに基づいて、まず画像をアップロードし、アップロードされた画像を md5 で暗号化します。md5 (1.php1).php となります。画像をアップロードした後、アップロードされたファイルのパスがわからないため、アップロード後のファイル名を推測する必要があります。推測には md5 (1.php1).php の方法が使用されます。
以下は具体的な手順です:

  1. パケットを intruder に配置し、x-forwarded-for パラメータに 127.0.0.1 を設定し、パラメータ 1 を遍歴します。

image

  1. 次に、ペイロードオプションを設定します。

Payload type: Numbers

From: 1
To: 200
Step: 1

image

1 から 99999 の範囲で 1 から 200 を遍歴します。

さらに、2 つの値を設定する必要があります。ペイロード処理では、各値を遍歴する際に、1.php の接頭辞を追加し、その内容(1.php [1-200])を md5 で暗号化します。

image

  1. アップロードが成功すると、サイズと長さが同じになります。この時点ではアップロード後のファイル名がわかりません。なぜなら、1.php [1-200] の md5 値は同じだからです。したがって、もう一度ブルートフォース攻撃を行い、この場合は直接ファイル名をリクエストします。/md5 (1.php [1-200]) とします。アクセスできるものが正しいファイル名です。

image

  1. アップロード後のファイル名を推測し、md5 で暗号化された内容に直接アクセスします。

image

ペイロードの設定はファイルのアップロードと同じです。

image

200 のステータスコードで区別することで、アップロードされたファイル名は以下の図に示すようになります。

image

アップロードが成功したら、蚁剣を使用して接続します。

image


追記:2023-07-21

上記の方法では、ファイルのアップロード部分が少し冗長です。ここでは、この手順を簡略化する方法を示します。

  1. パケットキャプチャ

image

ペイロードを設定し、パケットを送信するだけで、他のペイロードを設定する必要はありません。null ペイロードは、リクエストを繰り返し送信することを意味します。

image

  1. その後、パスをブルートフォース攻撃します。

任意のパスをリクエストし、.php を残します。

image

ペイロードの設定は以下の通りです:

image

image

2000 個のペイロードで複数のファイルをアップロードできます。

image

image

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。