1. 程式人生 > >文件上傳-文件名長度繞過白名單限制

文件上傳-文件名長度繞過白名單限制

文件上傳 操作系統特性 滲透測試 webshell

??在實際滲透中,當我們發現有文件上傳的地方時,我們會盡可能地嘗試所有的辦法進行webshell的上傳,只要能上傳webshell,就說明本次滲透至少成功了一般,後續就看獲得的webshell的權限情況進行下一步的操作。對於文件上傳漏洞的防護來說,主要分為以下兩類:白名單限制和黑名單限制,對於黑名單的限制,我們只需要尋找一些較為偏僻的可執行後綴、大小寫混寫以及相關操作系統的特性(如windows文件名後綴的最後會自動過濾空格以及.等)來進行繞過;對於白名單的限制來說,一般是結合解析漏洞、代碼函數漏洞(icov(80-EF截斷),造成00截斷的相關函數)以及相關操作系統特性(如windows10文件名長度總共為223包括後綴,win2012的為237,linux ubuntu0.16.04.1文件名長度252等)來進行繞過!下面我們將以ubuntu0.16.04.1操作系統作為演示情況!


簡單檢查是什麽限制

??首先我們輸入php後綴進行測試,發現提示錯誤的文件後綴,如下圖所示:
技術分享圖片
??接著我們輸入一個不存在的文件後綴進行測試,發現依舊提示是錯誤的後綴,如下圖所示,到此我們可以簡單認為本上傳點是白名單限制上傳,只允許特定後綴文件上傳!
技術分享圖片

根據限制類型進行嘗試

??通過上面我們知道是白名單限制,並且通過前期信息收集發現webserver為Nginx,操作系統為linux(ubuntu),通過Nginx解析漏洞無法進行上傳,所以我們使用構造超長文件名進行繞過本次的白名單限制上傳。
??由於很多時候我們不知道具體的操作系統,所以我們只能使用很長文件名進行測試(如果有報錯信息提示我們就可以慢慢構造出來,如果沒有報錯信息就只能慢慢嘗試(可以自己先搭建一些常見的系統【win03 win08 win12 ubuntu redhat等】進行測試文件名長度為多少來進行逐一測試))。

??首先進行嘗試超長字符,提示文件名過長,如下圖所示,然後我們進行逐個遞減,減到一個剛好能成功上傳的地方。
技術分享圖片
??通過最後得知,最長為252,如下圖所示:
技術分享圖片
??最後我們將jpg後綴前面的文件名末尾更換為.php來進行文件上傳,文件上傳成功,如下圖所示:
技術分享圖片
??最後我們通過訪問進行驗證是否可以正常解析該文件,從而獲取webshell,通過訪問可知,成功獲取webshell,如下圖所示:
技術分享圖片

關於其他文件解析及上傳參考此處

文件上傳-文件名長度繞過白名單限制