自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP漏洞全解(九)-文件上傳漏洞

系統(tǒng) Linux
本文主要介紹針對PHP網(wǎng)站文件上傳漏洞。由于文件上傳功能實(shí)現(xiàn)代碼沒有嚴(yán)格限制用戶上傳的文件后綴以及文件類型,導(dǎo)致允許攻擊者向某個(gè)可通過 Web 訪問的目錄上傳任意PHP文件,并能夠?qū)⑦@些文件傳遞給 PHP解釋器,就可以在遠(yuǎn)程服務(wù)器上執(zhí)行任意PHP腳本,即文件上傳漏洞。

一套web應(yīng)用程序,一般都會提供文件上傳的功能,方便來訪者上傳一些文件。

下面是一個(gè)簡單的文件上傳表單

  1. <form action="upload.php" method="post" enctype="multipart/form-data" name="form1"> 
  2. <input type="file" name="file1" /><br /> 
  3. <input type="submit" value="上傳文件" /> 
  4. <input type="hidden" name="MAX_FILE_SIZE" value="1024" /> 
  5. form> 

php的配置文件php.ini,其中選項(xiàng)upload_max_filesize指定允許上傳的文件大小,默認(rèn)是2M

$_FILES數(shù)組變量

PHP使用變量$_FILES來上傳文件,$_FILES是一個(gè)數(shù)組。如果上傳test.txt,那么$_FILES數(shù)組的內(nèi)容為:

  1. $FILES 
  2. Array 
  3. [file] => Array 
  4. [name] => test.txt //文件名稱 
  5. [type] => text/plain //MIME類型 
  6. [tmp_name] => /tmp/php5D.tmp //臨時(shí)文件 
  7. [error] => 0 //錯(cuò)誤信息 
  8. [size] => 536 //文件大小,單位字節(jié) 

如果上傳文件按鈕的name屬性值為file

  1. <input type="file" name="file" /> 

那么使用$_FILES['file']['name']來獲得客戶端上傳文件名稱,不包含路徑。使用$_FILES['file']['tmp_name']來獲得服務(wù)端保存上傳文件的臨時(shí)文件路徑

存放上傳文件的文件夾

PHP不會直接將上傳文件放到網(wǎng)站根目錄中,而是保存為一個(gè)臨時(shí)文件,名稱就是$_FILES['file']['tmp_name']的值,開發(fā)者必須把這個(gè)臨時(shí)文件復(fù)制到存放的網(wǎng)站文件夾中。

$_FILES['file']['tmp_name']的值是由PHP設(shè)置的,與文件原始名稱不一樣,開發(fā)者必須使用$_FILES['file']['name']來取得上傳文件的原始名稱。

上傳文件時(shí)的錯(cuò)誤信息

$_FILES['file']['error']變量用來保存上傳文件時(shí)的錯(cuò)誤信息,它的值如下:

錯(cuò)誤信息 數(shù)值 說 明
UPLOAD_ERR_OK 0 沒有錯(cuò)誤
UPLOAD_ERR_INI_SIZE 1 上傳文件的大小超過php.ini的設(shè)置
UPLOAD_ERR_FROM_SIZE 2 上傳文件的大小超過HTML表單中MAX_FILE_SIZE的值
UPLOAD_ERR_PARTIAL 3 只上傳部分的文件
UPLOAD_ERR_NO_FILE 4 沒有文件上傳

文件上傳漏洞

如果提供給網(wǎng)站訪問者上傳圖片的功能,那必須小心訪問者上傳的實(shí)際可能不是圖片,而是可以指定的PHP程序。如果存放圖片的目錄是一個(gè)開放的文件夾,則入侵者就可以遠(yuǎn)程執(zhí)行上傳的PHP文件來進(jìn)行攻擊。

下面是一個(gè)簡單的文件上傳例子:

  1. php 
  2. // 設(shè)置上傳文件的目錄 
  3. $uploaddir = "D:/www/images/"
  4. // 檢查file是否存在 
  5. if (isset($_FILES['file1'])) 
  6. // 要放在網(wǎng)站目錄中的完整路徑,包含文件名 
  7. $uploadfile = $uploaddir . $_FILES['file1']['name']; 
  8. // 將服務(wù)器存放的路徑,移動到真實(shí)文件名 
  9. move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile); 
  10. ?> 
  11. …… 
  12. <form method="post" enctype="multipart/form-data" name="form1"> 
  13. <input type="file" name="file1" /><br /> 
  14. <input type="submit" value="上傳文件" /> 
  15. <input type="hidden" name="MAX_FILE_SIZE" value="1024" /> 
  16. form> 

這個(gè)例子沒有檢驗(yàn)文件后綴,可以上傳任意文件,很明顯的上傳漏洞

責(zé)任編輯:xikder 來源: DoDo's Blog
相關(guān)推薦

2012-04-12 15:42:35

2012-04-12 13:36:59

2012-04-12 15:06:44

2012-04-12 15:59:09

2012-04-12 15:27:44

2012-04-12 14:45:13

2012-04-12 11:28:04

2013-07-03 11:28:47

2013-10-31 13:19:06

2009-12-09 09:49:40

2010-09-16 15:17:33

2013-03-25 11:51:42

php漏洞代碼審計(jì)php

2013-04-27 17:03:57

2009-11-22 15:28:35

2009-07-06 17:47:44

2011-04-13 17:28:21

2009-08-15 10:19:01

漏洞利用php expEXP程序

2015-02-04 14:50:29

2017-09-19 15:01:06

PHP漏洞滲透測試

2018-02-02 14:29:25

PHP漏洞服務(wù)器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號