檔案上傳漏洞總結
漏洞簡介
檔案上傳漏洞是由於程式設計師未對上傳的檔案進行嚴格的驗證和過濾,而導致的使用者可以越過其本身許可權向伺服器上上傳可執行的動態指令碼檔案。這裡上傳的檔案可以是木馬,病毒,惡意指令碼或者webshell等。這種攻擊方式是最為直接有效的,“檔案上傳”本身沒有問題,有問題的是檔案上傳後,伺服器怎麼處理、解釋檔案。如果伺服器的邏輯做的不夠安全,則會導致嚴重的後果。
漏洞危害
如果網站存在檔案上傳漏洞,攻擊者可以藉此上傳webshell,並且成功執行,則會導致伺服器淪陷。
利用方式
檔案上傳漏洞,顧名思義,只有存在上傳點的網站可能出現這個漏洞。這個利用條件聽起來嚴苛,但是正常網站,為了滿足使用者的需求,都會設定上傳位置。最常見的上傳點就是使用者後臺自己上傳頭像;其次,就是網站後臺為了滿足需求而設定的檔案上傳點;再然後,tomcat預設登入頁面在被攻擊者破解之後,同樣存在檔案上傳點。
因為檔案上傳漏洞危害較大,且繞過方式極多,故利用方式也多樣,這裡不多贅述。
繞過方式
1.前端驗證繞過。
這是最簡單的一種繞過方式,因為有的網站會將上傳的驗證放在前端,進行一個js的驗證。對於這種驗證,我們可以先將指令碼改為允許上傳的字尾,在通過了前段驗證後,再在抓包進行修改,這樣就可以完成繞過目的。
2.只驗證content-type
這種驗證,是驗證了資料包中的content-type,也就是上傳檔案的型別。
最簡單的一種繞過方式是在上傳指令碼前修改指令碼字尾,改為允許上傳的字尾,然後抓包將字尾改回。
這種做法的簡單之處在於,網站會根據上傳檔案的字尾自己生成content-type,這樣我們只需要修改字尾,不需要去管content-type屬性。
3.黑名單繞過
這是一種比較常見的網站防禦手段,通過將所有可能的指令碼字尾都設定為黑名單,以此來防止你上傳可能會危害到網站的指令碼檔案。而且因為驗證是後端進行的,所以前端抓包修改檔案屬性顯然不行繞過。
這裡可以使用陌生的,但是會被網站解析的字尾名進行,比如 .phtml .php3 .php5 這些字尾都會被當做php解析。
4.配合解析漏洞進行繞過
在網站防禦嚴格,陌生字尾也在黑名單內的情況,我們可以利用符合網站中介軟體的解析漏洞配合檔案上傳漏洞進行繞過。
例如:apache解析漏洞,apache解析檔案的規則是從右到左判斷解析,如果字尾名為不可識別檔案解析,就再往左判斷。配合這個解析漏洞,我們可以通過在檔案字尾後面再隨便加一個不存在的字尾。後端驗證的時候,因為字尾不再黑名單中,所以可以通過,又因為這個不存在的字尾不會被解析,所以我們正確的指令碼就被成功上傳並且可以執行了。
5.大小寫繞過
有的網站黑名單可能不包含大寫字尾,這裡我們就可以將字尾進行大寫,以繞過黑名單,完成檔案上傳。
6.點繞過/空格繞過
windows特性會將檔案末尾的點和空格過濾,不會影響檔案的正常解析,而點和空格又可以幫助我們繞過黑名單過濾,所以在網站使用黑名單,並且又為windows系統的情況下,我們可以使用點繞過或者空格繞過。
7.::$DATA繞過
這個繞過是利用windows下NTFS檔案系統的一個特性,即NTFS檔案系統的儲存資料流的一個屬性DATA。當我們訪問a.asp::DATA時,就是請求a.asp本身的資料,如果a.asp還包含了其他的資料流,比如a.asp:lake2.asp,請求a.asp:lake2.asp::$DATA,則是請求a.asp中的流資料lake2.asp的流資料內容。
簡單來說,就是如果網站沒有過濾$DATA字串,我們可以利用這個字串繞過黑名單。
8.雙寫繞過
網站可能會通過黑名單來判斷檔案字尾,並且將其轉換為空,如果這個轉換至進行一次的話,我們可以使用單詞雙寫來進行繞過。
例如:.php寫成.pphphp
9.00截斷
簡單來說,00截斷的原理,就是網站會把00後面的資料過濾,但是在上傳的時候,我們又可以通過00截斷繞過黑名單或者白名單。
www.xxx.com/qq.php%00.jpg => www.xxx.com/qq.php
PS:繞過還有很多種,上面寫的九種都是我在靶場或者實際情況中嘗試成功的,後面如果對其他繞過手段有了更深層的瞭解,會再繼續補充。