檔案上傳漏洞詳解

2021-10-04 12:16:55 字數 3250 閱讀 5972

檔案上傳漏洞是指使用者上傳了乙個可執行的指令碼檔案,並通過此指令碼檔案獲得了執行伺服器端命令的能力。這種攻擊方式是最為直接和有效的。上傳的檔案可以是木馬,病毒,惡意指令碼等等。「檔案上傳」本身並沒有任何問題,但是檔案上傳後,伺服器怎麼處理、解釋檔案就成了乙個問題。如果伺服器的處理邏輯做得不夠安全,則會導致嚴重的後果。

常見的檔案上傳之後容易導致的安全問題:

利用上傳漏洞,通常需要結合web容器(iis、nginx、apache、tomcat)的解析漏洞來讓上傳的漏洞得到實現。

iis5.x/iis 6.0檔案解析漏洞

iis全稱是網際網路資訊服務,包括ftp/ftps、nntp、http/https、smtp等服務。iis是架設web伺服器用來提供網頁遊覽服務的,屬於系統環境。一般用asp.net開發軟體,然後靠iis對公網提供服務。

iis 6.0 在處理檔案時,出現過一些漏洞,比如當檔名為abc.asp;xx.jpg時,iis 6.0會將此檔案解析為abc.asp,引文檔名被分號截斷了,從而導致指令碼被執行。比如:

這會執行xyz.asp,而abc.jpg則被忽略了。

除此之外,iis 6.0 還出現過乙個漏洞,因為處理資料夾副檔名出錯,導致將/*.asp/目錄下的所有檔案都作為asp檔案進行解析。比如:

這裡的abc.jpg,會被當做asp檔案進行解析。

但是有一點就是,這些漏洞需要在伺服器的本地硬碟上確實存在才可以觸發,若只是通過web應用對映出來的url,則是無法觸發的。

apache檔案解析漏洞

apache解析檔案的規則時從右到左開始判斷,如果字尾名為不可識別檔案解析,則會繼續向左判斷,直至可以正確識別。

***.php.owf.zip 其中.owf和.zip檔案字尾apache不識別,直至判斷.php才會按照php解析檔案
而對於apache所識別的檔名的型別定義,儲存在apach的mime.types檔案中。

客戶端檢測

伺服器端檢測

黑名單過濾是一種不安全的方式,黑名單定義了一系列不安全的副檔名,伺服器端在接收檔案後,與黑名單副檔名對比,如果發現副檔名與黑名單裡的副檔名匹配,則認為檔案不合法。

白名單的過濾方式與黑名單恰恰相反,黑名單是定義不允許上傳的副檔名,而白名單則是定義允許上傳的副檔名,白名單擁有比黑名單更好的防禦機制。如:

$whitelist=array(rar』,jpg』,png,bmpy,gif,jpg;doc);
在獲取到副檔名後對whitelist陣列裡的副檔名迭代判斷,如果副檔名被命中,程式將認為檔案是合法的,否則不允許上傳。

mime型別用來設定某種副檔名檔案的開啟方式,當具有該副檔名的檔案被訪問時,瀏覽器會自動使用指定的應用程式來開啟。如gifmime為image/gif,css檔案mime型別為text/ess。

在檔案上傳時,程式通常允許使用者將檔案放到指定的目錄中,然而有些web開發人員為了讓**更「健壯」,通常會做乙個操作,如果指定的目錄存在,就將檔案寫入目錄中,不存在則先建立目錄,然後寫入。

在針對上傳檔案的檢查中,很多應用都是通過判斷檔名字尾的方法來驗證檔案的安全性的。但是在某些時候,如果攻擊者手動修改了上傳過程中的post包,在檔名後新增乙個%00位元組,則可以截斷某些函式對檔名的判斷。比如對於乙個字尾為***.php[\0].jpg的檔名,其中[\0]是十六進製制的0x00字元,對於伺服器端來說,此檔案因為0x00字元截斷的關係,最終會變成***.php。這樣就可以截斷某些函式對檔名的判斷。

還有一些時候,會通過判斷上傳檔案的檔案頭來驗證檔案的型別。通常通過前10個位元組,可以判斷出檔案的真實型別。

因此常見的攻擊技巧就是偽造乙個合法的檔案頭,將真實的php等指令碼**附在合法的開頭之後。

利用.htaccess檔案上傳利用

一般.htaccess可以用來留後門和針對黑名單繞過

在上傳**的根目錄下,上傳乙個.htaccess檔案即可。

建立乙個txt檔案,寫入

另存為.htaccess名稱,儲存型別為所有檔案,即可將png檔案解析為php檔案。

可以在.htaccess加入php解析規則,類似於把檔名包含1的解析成php檔案

123.png就會以php檔案執行

那麼在實際中,如何做到防範檔案上傳漏洞呢?

常見的幾種方法:

這是一道檔案上傳的題,我們先上傳一張看一下效果。

我們上傳的是乙個.png格式的,它提示必須上傳字尾為php的檔案,那我們通過直接改字尾的方式嘗試一下。

然而我們得到了這個,這是用黑名單記載了不允許上傳的型別,但是它需要上傳的是php字尾。

我們回到開始的報錯位置。

我們可以發現它是通過basename返回上傳的檔名,那麼我們想到了截斷上傳的方式。(basename() 函式返回路徑中的檔名部分 )

找到對應的/uploads/。在後面加上比如1.php。然後找到對應十六進製製碼的位置,加上0x00。

再上傳,就成功繞過了檢測,拿到flag。

檔案上傳漏洞詳解

檔案上傳功能漏洞筆記 檔案上傳漏洞之程式設計師未對上傳的檔案進行嚴格的上傳和過濾,導致使用者可以利用上傳功能向伺服器上傳木馬 病毒 惡意指令碼 webshell等。檔案上傳 本身沒有問題,有問題是檔案上傳後伺服器的處理和解析邏輯。製作指令碼檔案上傳至web伺服器 php aspx jscript a...

檔案上傳漏洞

php語言 form表單 tmp臨時目錄 file 判斷檔案資訊 臨時檔案放入想要放的位置 移動臨時檔案 1.伺服器配置不當 2.開源編輯器上傳漏洞 3.本地檔案上傳限制被繞過 4.過濾不嚴或被繞過 5.檔案解析漏洞導致檔案執行 6.檔案上傳路徑 1.前段解析指令碼語言 2.允許上傳指令碼檔案 3....

檔案上傳漏洞

什麼是檔案上傳 一些web應用程式中允許上傳,文字或者其他資源到指定的位置,檔案上傳漏洞就是利用這些可以上傳的地方將惡意 植入到伺服器中,再通過url去訪問以執行 webshell 以web 方式進行通訊的命令直譯器,也叫 後門。本質上講,webshell 就是乙個能夠執行指令碼命令的檔案,其形式可...