アップロードラボ射撃場完全クリアランス
パス-1
まず、新しい php Webshell ファイルを作成します
ここでシェルファイル rabb1t.php を書きました。
内容はこんな感じ
次に、サフィックスを img に変更し、このファイルを選択してアップロードし、burpsuit を使用してパケットをキャプチャします。
赤いボックス内のサフィックスを img から に戻します。
アップロードが成功したら、Ant Sword を使用してシェルに接続します (アップロードが失敗する理由は、射撃場にアップロード ディレクトリがないことが考えられます。手動で作成できますが、アクセス許可を最高に調整することを忘れないでください) 777)
パスは IP アドレスに /upload/rabb1t.php を加えたものです。
パス-2
2 番目の質問は最初の質問と似ていますが、区別するためにシェルの名前を rabb2t.php に変更しました。
アップロード時にパケットをキャプチャするために、ボックス内のコンテンツを図に示す画像形式に変更します。
あとはアントソードを使って接続するだけです。
パス-3
3 番目の質問では、php のサフィックスがブラックリストに追加されますが、php の後に数字を追加すると、これを回避できます。
ファイル名を直接変更することも、配布パッケージの赤いボックス内のファイル名を変更することもできます。
このシェルが侵入すると、名前が変更され、対応するファイルが見つかります。
Ant Sword を使用してシェルを取得できます
入力すると、シェルファイルが表示されます。
パス-4
質問 4 では多くの接尾辞が禁止されています
したがって、現時点では、.htaccess を使用してファイル解析をバイパスするように書き換える必要があります。
.htaccess という新しいファイルを作成し、その中に次の内容を書き込みます。
次に、このファイルをアップロードします
アップロードする前にシェルのサフィックスを画像形式 (img または png) に変更しています。.htaccess ファイルはこれを Webshell に再解析します。
アリの剣を使って接続できます
パス-5
5 番目の質問は前の質問と似ていますが、接尾辞の大文字と小文字を変更することで回避できます。
アップロードすると名前が変わります
パス6
6 番目のレベルでは、一般的なサフィックスと大文字と小文字の混合のバイパスが禁止されています。
サフィックスとスペースを使用してバイパスできます。
パス-7
7 番目のレベルでは、解析可能なすべてのサフィックスのアップロードが禁止されています。このブラックリストでは、ファイル名の末尾のドットをフィルタリングするために deldot() は使用されていません。バイパスするには、shell の後に . を使用します (名前を付けるときの最後の文字)
。ファイルは . 自動的に無視されます)
パス8
Webshell の後に ::$DATA を使用してバイパスします
パス-9
9 番目のレベルでは、.jpg|.png|.gif 接尾辞が付いたファイルのアップロードのみが許可されます。
このレベルのブラックリストでは、最終的なアップロード パスはファイル名を使用して直接結合され、ファイル名のみが保存されます。
ファイル名 = deldot(ファイル名)
この操作では、ファイル名の末尾のドットが削除され、ブラックリストをバイパスするためのサフィックスが作成されます。
追加知識: deldot() 関数は後ろから前へ検出し、最後に最初の点を検出すると検出を続けますが、スペースに遭遇すると検出を停止します。
rabb9t.php をアップロードし、サフィックスを bp に変更し、いくつかのスペースを追加します (つまり、ファイル名は rabb9t.php です。)
パス-10
この質問は、スクリプトのサフィックスを削除し、ソース コード内の PHP で解析できるすべてのサフィックスを空のサフィックスに置き換えます。
したがって、私たちの方法では二重書き込みを使用してバイパスします
パス-11
このレベルのコードを見ると、「jpg」、「png」、「gif」形式のファイルのアップロードのみを許可するホワイトリストであることがわかります。ただし、アップロード パスは制御でき、%00 を使用して切り詰めることができます。
切り捨て条件: PHP バージョンが 5.3.4 未満で、このバージョンより大きい場合は修正されました。
パス-12
前のレベルと同様に php の後の %00 を切り詰めますが、前のレベルは get ヘッダーに書き込まれており、今回はペイロードに書き込まれているため、エンコードとトランスコーディングを実行する必要があります。%00 と入力してから、
エンコードして送信
アントソードを使用して接続できます
パス-13
このレベルでは、写真 + PHP コードを使用して、アップロード用の写真コードを作成します。もちろん、写真を解析したい場合は、この脆弱性が必要です。彼はすでに Web サイトに脆弱性があると言っていることがわかります。cmd
を使用してイメージ コードを生成できます。コマンド ステートメントは次のとおりです: copy 14.jpg /b + 14.php /a webshell.jpg。図に示すように、この生成されたコードをアップロードします。
アップロード後にイメージの名前が変更されるため、アップロード後に以下のペイロードのイメージ名をコピーできます。
構築された URL は include.php?file=upload/9720230725025046.jpg です。
次に、Ant Swordを使用して接続します
2 番目の方法は、画像コードを作成することです。burp を直接使用してパケットをキャプチャし、画像の後に php コードを追加できます。先ほど、画像
13 とシェル ファイルを組み合わせて、新しい rabb13t 画像コードを作成しました。
今回は直接画像 13 を使用してアップロードしてキャプチャします。パッケージ、画像の後にコード文を追加します
以前と同じペイロードを、今回の写真に置き換えて
も成功する可能性があります。
パス-14
(私の射撃場は docker で構築されていたため、いくつかの問題が発生したため、docker ソースを変更して新しい射撃場を構築しました。このバージョンの 15 レベルは、元のバージョンの 14 レベルです。) getimagesize 関数
この関数の意味は、ターゲット ファイルの 16 進数を読み取り、最初のいくつかの文字列が画像の要件を満たしているかどうかを確認することです。
したがって、このレベルでもレベル 14 と同じ方法を使用して PHP コードで画像アップロードを生成し、含まれている抜け穴を使用してこのレベルを勝ち取ります。
前のレベルで生成された画像コードを直接使用します。これは前のレベルと同じです。
前のレベルの 2 番目の方法をもう一度試してみましょう
。うまくいきます。
パス-15
15 番目のレベルは前の 2 つのレベルと同じで、コードを含む画像をアップロードするだけです。
2番目の方法も使用できます
パス-16
このレベルでは、アップロードされた画像のサフィックス名とコンテンツ タイプが決定され、imagecreatefromgif を使用してそれが GIF 画像であるかどうかが決定されました。最後に、二次レンダリングが実行されましたが、バックエンドの二次レンダリングでは、レンダリングされたイメージで何も起こりませんでした。Hex の場所を変更し、文を追加し、ファイル インクルードの脆弱性を介して文を実行し、Ant Sword を使用して接続します
二次レンダリング: バックエンドはファイルのコンテンツの
ベース名(パス[,サフィックス])を書き換えます。サフィックスが指定されていない場合は、サフィックス名が返されます。サフィックスが指定されている場合は、指定されたサフィックス名は返されません。
strrchr(string,char) 関数は、別の文字列内の文字列を検索します。 内の最後に出現する位置を検索し、その位置から文字列の末尾までのすべての文字を返します。
imagecreatefromgif(): キャンバスを作成し、GIF ファイルまたは URL から画像をロード
します。 imagecreatefromjpeg(): キャンバスを作成し、JPEG ファイルまたは URL から画像をロードします。
imagecreatefrompng(): キャンバスを作成し、から画像をロードします。 PNG ファイルまたは URL アドレス
ここで別の場所を見つける方法はわかりませんが、変更された場所を避けるために、映画内でさらにいくつかの場所を試すことができます。これは、前のレベルの 2 番目の方法と同じです。次の場所に直接文を追加してみます
。コード:
ここでは gif のみアップロードでき、その他はアップロードできないようですが、
ここでは gif をダウンロードしてアップロードします。
ここでは、Ant Sword を使用して接続しようとしましたが、ディスプレイが空だったので、この画像にアクセスして
ソース コードを開いて確認しました。最後の行に追加したのですが、コードが消えてしまったためです。最後の部分は「The 2 番目のレンダリングが変更されました。
最初の段落の後に Trojan という文を追加してみましょう。」
アップロード後、写真を開いて見てみると、トロイの木馬の文が書かれていたので、Ant Swordで接続してみたところ、
成功しました。
パス-17
レベル 17 では、ソースコードを確認する必要があります。
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$ext_arr = array('jpg','png','gif');
$file_name = $_FILES['upload_file']['name'];
$temp_file = $_FILES['upload_file']['tmp_name'];
$file_ext = substr($file_name,strrpos($file_name,".")+1); // 截取上传文件的后缀(不包括点)
$upload_file = UPLOAD_PATH . '/' . $file_name;
if(move_uploaded_file($temp_file, $upload_file)){
// 将上传的文件移动到新位置
if(in_array($file_ext,$ext_arr)){
// 这里是进行文件后缀的判断
$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
rename($upload_file, $img_path);
$is_upload = true;
}else{
$msg = "只允许上传.jpg|.png|.gif类型文件!";
unlink($upload_file); // 删除文件
}
}else{
$msg = '上传出错!';
}
}
上記の 2 番目の if と 3 番目の if の位置を見て、アップロードされたファイルを新しい場所に移動してから、そのファイルが画像であるかどうかを判断し、移動した画像を削除しない場合、ロジックは厳密ではありません。むやみに画像をアップロードしてアクセスすると、ファイルにアクセスされて削除できなくなる可能性がありますが、ファイルは一時的に保存することができます。
したがって、最初に Web シェルをアップロードし、burp を使用してパケットをキャプチャします