バイパスへの原則アップロード抜け穴検証MIMEタイプ
バイパス認証サーバ(MIMEタイプ検出)
MIMEとは何ですか
MIME(多目的インターネットメール拡張)多目的インターネットメール拡張タイプ。ファイルの拡張子がアクセスされたときに、ブラウザが自動的に開くように指定されたアプリケーションを使用します開くアプリケーションとファイル拡張子のいくつかのタイプを設定する方法です。いくつかは、いくつかのメディアはオープンをファイルとしてだけでなく、カスタムファイル名を指定するためにクライアントで使用されています。
应用在php中可以对很多文件的扩展名进行限制
MIMEの構成
各MIMEタイプは、2つの部分、例えば音声、オーディオ、画像及び他の画像のようなデータの大クラスの正面から成り、後で特定のタイプを定義します。
一般的なMIMEタイプ(ユニバーサル)
超文本标记语言文本 .html text/html
xml文档 .xml text/xml
XHTML文档 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文档 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG图像 .png image/png
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二进制数据 application/octet-stream
**这种漏洞一般在全局数组$_FILES这里**
通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的 input name,
第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。
$_FILES["file"]["name"] - 被上传文件的名称
$_FILES["file"]["type"] - 被上传文件的类型
$_FILES["file"]["size"] - 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
详细可参考:http://www.w3school.com.cn/php/php_file_upload.asp
解析コードのロジック
upload_sick機能によってアップロードされたファイルには、その後いくつかのチェックを最初のフロントエンドを取得するための要求を提出した後、配列を(定義された画像のアップロードの種類を指定)を定義し、かつます。
脆弱性が存在するため、$ _FILESため解析upload_sick機能()
このグローバルなアプローチは、コンテンツ・タイプ、コンテンツ・タイプのフロントエンドユーザが制御することができる取得するブラウザのHTTPヘッダを介してです。簡単にバイパスさ。
回避策
通常、標準的な絵、そのコンテンツタイプのキャプチャ動作をアップロードします。コンテンツタイプのデータパケットの要件を満たすために、目に見える通常のアップロード写真画像/ PNG(比較対象と)で、ファイルが対象とPHPのリターン間違ったファイルタイプではありません。