本文主要介紹針對php**檔案上傳漏洞。由於檔案上傳功能實現**沒有嚴格限制使用者上傳的檔案字尾以及檔案型別,導致允許攻擊者向某個可通過 web 訪問的目錄上傳任意php檔案,並能夠將這些檔案傳遞給 php直譯器,就可以在遠端伺服器上執行任意php指令碼,即檔案上傳漏洞。
一套web應用程式,一般都會提供檔案上傳的功能,方便來訪者上傳一些檔案。
下面是乙個簡單的檔案上傳表單
<php的配置檔案php.ini,其中選項upload_max_filesize指定允許上傳的檔案大小,預設是2mform
action="upload.php"
method="post"
enctype="multipart/form-data"
name="form1"
>
<
input
type="file"
name="file1"
/>
<
br/>
<
input
type="submit"
value="上傳檔案"
/>
<
input
type="hidden"
name="max_file_size"
value="1024"
/>
form
>
$_files陣列變數
php使用變數$_files來上傳檔案,$_files是乙個陣列。如果上傳test.txt,那麼$_files陣列的內容為:
$files如果上傳檔案按鈕的name屬性值為filearray }
<那麼使用$_files['file']['name']來獲得客戶端上傳檔名稱,不包含路徑。使用$_files['file']['tmp_name']來獲得服務端儲存上傳檔案的臨時檔案路徑input
type="file"
name="file"
/>
存放上傳檔案的資料夾
php不會直接將上傳檔案放到**根目錄中,而是儲存為乙個臨時檔案,名稱就是$_files['file']['tmp_name']的值,開發者必須把這個臨時檔案複製到存放的**資料夾中。
$_files['file']['tmp_name']的值是由php設定的,與檔案原始名稱不一樣,開發者必須使用$_files['file']['name']來取得上傳檔案的原始名稱。
上傳檔案時的錯誤資訊
$_files['file']['error']變數用來儲存上傳檔案時的錯誤資訊,它的值如下:
錯誤資訊
數值說 明
upload_err_ok
0沒有錯誤
upload_err_ini_size
1上傳檔案的大小超過php.ini的設定
upload_err_from_size
2上傳檔案的大小超過html表單中max_file_size的值
upload_err_partial
3只上傳部分的檔案
upload_err_no_file
4沒有檔案上傳
檔案上傳漏洞
如果提供給**訪問者上傳的功能,那必須小心訪問者上傳的實際可能不是,而是可以指定的php程式。如果存放的目錄是乙個開放的資料夾,則入侵者就可以遠端執行上傳的php檔案來進行攻擊。
下面是乙個簡單的檔案上傳例子:
php這個例子沒有檢驗檔案字尾,可以上傳任意檔案,很明顯的上傳漏洞// 設定上傳檔案的目錄
$uploaddir = "d:/www/images/";
// 檢查file是否存在
if (isset($_files['file1']))
?>
…… <
form
method="post"
enctype="multipart/form-data"
name="form1"
>
<
input
type="file"
name="file1"
/>
<
br/>
<
input
type="submit"
value="上傳檔案"
/>
<
input
type="hidden"
name="max_file_size"
value="1024"
/>
form
>
PHP漏洞全解 九 檔案上傳漏洞
本文主要介紹針對php 檔案上傳漏洞。由於檔案上傳功能實現 沒有嚴格限制使用者上傳的檔案字尾以及檔案型別,導致允許攻擊者向某個可通過 web 訪問的目錄上傳任意php檔案,並能夠將這些檔案傳遞給 php直譯器,就可以在遠端伺服器上執行任意php指令碼,即檔案上傳漏洞。一套web應用程式,一般都會提供...
PHP漏洞全解 九 檔案上傳漏洞
一套web應用程式,一般都會提供檔案上傳的功能,方便來訪者上傳一些檔案。下面是乙個簡單的檔案上傳表單 form action upload.php method post enctype multipart form data name form1 input type file name file...
PHP漏洞全解
server php self 變數的值為當前頁面名稱 例 get.php中上述的表單 那麼我們提交 mysql close conn 使用post,不要使用get 傳遞表單字段時,一定要是用post,不要使用get,處理變數也不要直接使用 request http響應拆分 http請求的格式 1 ...