允許用戶上傳任意文件可能會(huì)讓攻擊者注入危險(xiǎn)內(nèi)容或惡意代碼,并在服務(wù)器上運(yùn)行
任意文件上傳漏洞原理
由于文件上傳功能實(shí)現(xiàn)代碼沒有嚴(yán)格限制用戶上傳的文件后綴以及文件類型,導(dǎo)致允許攻擊者向某個(gè)可通過 Web 訪問的目錄上傳任意PHP文件,并能夠?qū)⑦@些文件傳遞給 PHP 解釋器,就可以在遠(yuǎn)程服務(wù)器上執(zhí)行任意PHP腳本。
任意文件上傳漏洞實(shí)例
以下代碼會(huì)處理上傳的文件,并將它們移到 Web 根目錄下的一個(gè)目錄中。
攻擊者可以將任意的PHP源文件上傳到該程序中,并隨后從服務(wù)器中請(qǐng)求這些文件,會(huì)在遠(yuǎn)程服務(wù)器上執(zhí)行惡意文件。
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.?>
即使程序?qū)⑸蟼鞯奈募鎯?chǔ)在一個(gè)無法通過 Web 訪問的目錄中,攻擊者仍然有可能通過向服務(wù)器環(huán)境引入惡意內(nèi)容來發(fā)動(dòng)其他攻擊。 如果程序容易出現(xiàn)文件包含漏洞,那么攻擊者就可能上傳帶惡意內(nèi)容的文件,并利用另一種漏洞促使程序讀取或執(zhí)行該文件,形成“二次攻擊”。
任意文件上傳漏洞解決方案
##檢查是否判斷了上傳文件類型及后綴
##定義上傳文件類型白名單,即只允許上傳的文件類型
##文件上傳目錄禁止腳本解析
下一篇:淺析路徑遍歷漏洞