允許用戶上傳任意文件可能會讓攻擊者注入危險內容或惡意代碼,并在服務器上運行
任意文件上傳漏洞原理
由于文件上傳功能實現代碼沒有嚴格限制用戶上傳的文件后綴以及文件類型,導致允許攻擊者向某個可通過 Web 訪問的目錄上傳任意PHP文件,并能夠將這些文件傳遞給 PHP 解釋器,就可以在遠程服務器上執行任意PHP腳本。
任意文件上傳漏洞實例
以下代碼會處理上傳的文件,并將它們移到 Web 根目錄下的一個目錄中。
攻擊者可以將任意的PHP源文件上傳到該程序中,并隨后從服務器中請求這些文件,會在遠程服務器上執行惡意文件。
1.<?
2.if(isset($_POST["form"])){
3. $uploadfile = "upfiles/".$_FILES['upfile']['name'];
4. move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile);//沒有檢查文件類型就直接上傳
5. print_r($_FILES);
6. die();
7. }
8.?>
即使程序將上傳的文件存儲在一個無法通過 Web 訪問的目錄中,攻擊者仍然有可能通過向服務器環境引入惡意內容來發動其他攻擊。 如果程序容易出現文件包含漏洞,那么攻擊者就可能上傳帶惡意內容的文件,并利用另一種漏洞促使程序讀取或執行該文件,形成“二次攻擊”。
任意文件上傳漏洞解決方案
##檢查是否判斷了上傳文件類型及后綴
##定義上傳文件類型白名單,即只允許上傳的文件類型
##文件上傳目錄禁止腳本解析
下一篇:淺析路徑遍歷漏洞