ファイルアップロード部分のまとめ

14564 ワード

title:ファイルアップロードまとめdate:2017-11-18 15:17:12 tags:WEB
emmmmmm前にクラスで環境を分けて、私達のグループはちょうど作ったファイルをアップロードします.当時考察したのは、ファイルヘッド検証の巻線とapache解析の脆弱性です.そこでいくつかの関連している総括をします.
ファイルのアップロード・ホールは非常に一般的で分かりやすいホールです.
現在のファイルアップロードのチェックは、クライアントのjavascriptチェック(つまり、ウェブページの前のセクションjavascriptスクリプトチェックアップロードファイルの拡張子の名前で、この時はデータパケットを送信していません.burpなどの修正によって直接バイパスできます.)サーバー側のチェック(一般的な拡張子の白黒リストチェック、ファイルヘッドチェック、contentt-typeフィールドチェックを含む)wafデバイスのチェックです.
基礎
フィルタなし
 
 move_upload_file($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
 ?>
直接moveを使うupload_file関数はアップロードされた一時ファイルを新しいファイルにコピーします.新しい場所に移動すると理解できます.中古のwebセキュリティがまだ普及していない時期には、ファイルアップロードの脆弱性がまだ多くあります.ファイルフォーマットを制限していないか、サーバー側にフィルタを設置していない場合があります.
ブラックリストフィルタ
	  
$BlackList = array('asp','php','jsp','php5','asa','aspx');//     
if (isset($_POST["submit"])){  
    $name = $_FILES['file']['name']; //       
    echo $name;  
    $extension = substr(strrchr($name,"."),1);//       
    $boo = false;  
      
    foreach ($BlackList as $key=>$value){  
        if ($value==$extension){//           
            $boo=true;  
            break;//            
        }  
    }  
      
    if(!$boo){//      ,           
        $size=$_FILES['file']['size'];//        
        $tmp=$_FILES['file']['tmp_name'];//      
        move_uploaded_file($tmp,$name);//               
        echo "      !
path:"
.$name; }else { echo " !!"; } } ?> // csdn
ブラックリストには'asp'、'php'、'jsp'、'php 5'、'asa'だけが含まれています.'aspx'はファイル名pHPの大きさで巻線したり、ブラックリストにない拡張ファイルで攻撃したり、ファイル名の後に加えたりします.
phpバージョンが5.3.4以下かphpのmagic_quot tesgpcはOFF状態で、書き込みを%00でカットして迂回することができます(1.php%00.jpg検証時の拡張子はjpgです.書き込み時に最終的に切断されたのは1.phpです.)
ホワイトリストでフィルタリングするのはブラックリストの制限よりもっと完全です.
ファイルヘッダ関数と迂回方法
一部のサーバーはいくつかの関数でファイルのヘッダを確認して、ファイルが画像ファイルであるかを判断します.
 
 print_r(getimagesize('1.gif'));
 ?>
getimagesize()関数は画像サイズを取得するために使用されます.有効な画像でないとfalseに戻りエラーが発生します.このうち、ファイルタイプの判断を担当する関数はphp_です.getimagetypeは、ファイルフローの最初の数バイト(ファイルヘッダ)から判断されます.


  if (exif_imagetype("image.gif") != IMAGETYPE_GIF) {
echo "The picture is not a gif";
}

?>
exifmagetype()は、画像の最初のバイトを読み込み、署名を確認し、他のexif関数の呼び出しを避けるために、サポートされていないファイルタイプや$uSERVER[HTTP_ACCEPT]は、ブラウザが指定された画像を表示できるかどうかを確認するために使用します.
迂回方法:phpコードの前に1行のGIF 98を加えるだけで、詐欺をすることができます.または16進のエディタでリガの写真のファイルヘッダを保存します.写真のExifを改竄し、phpスクリプトを追加します.(例えばGIMを通して写真を新規作成します)そして誰かが問題をするのを見て、copyで命令します.
 copy 1.jpg+2.php test.jpg
1.jpgと2.phpをtest.jpgに統合します.
apache解析の脆弱性の原理
apache解析ファイルのルールは、認識されていない拡張子に出会うと、認識されている拡張子に出会うまで後から前へ解析され、認識されていない場合はソースコードが露出されます.
     
(1)   apache conf        ————
AddHandler php5-script.php           .php      x.php.jpg   php   。
(2)   apache conf        ————
AddType application/x=httpd-php.jpg       .jpg,    php    。
解析の脆弱性はapacheとphpのバージョンに関係なく、オペレータの誤った配置AddHandlerであり、apacheを結合して、拡張されたファイルの特性から生じる脆弱性を前方に解析する.
多くの人がapache解析の脆弱性は低いバージョンのapacheにしか存在しないと思っていますが、実際にはapache解析の脆弱性はapache 1.xと2.xの両方にあります.2.xサーバ解析規則の中にapache情報を配置するだけで、phpが解析できるようになります.
当时のグループが环境テストをしたとき、アップロードされた木马ファイルのソースコードが直接爆発しました.x.php.jpgは実行されていませんでした.インターネットで原因を調べてサーバーの解析規則を変えました.出題環境は正常です.
etc/mime.typesでは、phpタイプは注釈されているので、つまりapache自体は「認識」phpではありません.
サーバー解析ファイルにfilesmatchがあります.PHP拡張を指定したファイルがphpモジュールを呼び出して実行します.
で/etc/apache 2/mods-enabeled/php 5 confで
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
  SetHandler application/x-httpd-php
FilesMatch>
<FilesMatch ".+\.phps$">
  SetHandler application/x-httpd-php-source
  # Deny access to raw php sources by default
  # To re-enable it's recommended to enable access to the files
  # only in specific virtual host or directory
  Order Deny,Allow
  Deny from all
FilesMatch>
 # Deny access to files without filename (e.g. '.php')
 <FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
  Order Deny,Allow
  Deny from all
FilesMatch>

# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
<IfModule mod_userdir.c>
  
      php_admin_flag engine Off
  Directory>
IfModule>
最初の行は正則で表現します.ファイルの末尾がphp/php 3/php 4/php 5/pht/phptml/phpsであれば、ファイルをphp_に渡します.moduleで処理して、結果をapacheに戻してからapacheからブラウザに送ります.このようにしてapacheで上記のファイルを解析しました.正則の$を正の値に変更すると、「.+.ph(p[345]??」.appheを再起動してプロファイルを有効にし、ブラウザでa.php.jpg(または他の識別できない拡張子)などのファイルにアクセスすると、これらのファイルはいずれもphpとして実行されます.ブラウザで見たのはファイル実行結果です.
また、apacheとphpをそれぞれインストールする場合、およびいくつかの集積環境(lamp)において、運営者自身がapach情報を配置したり、集積環境において解析文を与えていると、phpが解析できるようになります.
#AddHandler type-map var
AddHandler php5-script .php 
では、phpファイルは解析されます.したがって、AddHandler php 5-script.phpを注釈しても、この脆弱性は存在しない.