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

  在實際***中,當我們發現有文件上傳的地方時,我們會儘可能地嘗試所有的辦法進行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,如下圖所示:
文件上傳-文件名長度繞過白名單限制

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章