pikachu 文件包含 文件下載 文件上傳

文件包含漏洞(File Inclusion)概述

文件包含,是一個功能。在各種開發語言中都提供了內置的文件包含函數,其可以使開發人員在一個代碼文件中直接包含(引入)另外一個代碼文件。 比如 在PHP中,提供了:
include(),include_once()
require(),require_once()
這些文件包含函數,這些函數在代碼設計中被經常使用到。
大多數情況下,文件包含函數中包含的代碼文件是固定的,因此也不會出現安全問題。 但是,有些時候,文件包含的代碼文件被寫成了一個變量,且這個變量可以由前端用戶傳進來,這種情況下,如果沒有做足夠的安全考慮,則可能會引發文件包含漏洞。 攻擊着會指定一個“意想不到”的文件讓包含函數去執行,從而造成惡意操作。 根據不同的配置環境,文件包含漏洞分爲如下兩種情況:
1.本地文件包含漏洞:僅能夠對服務器本地的文件進行包含,由於服務器上的文件並不是攻擊者所能夠控制的,因此該情況下,攻擊着更多的會包含一些 固定的系統配置文件,從而讀取系統敏感信息。很多時候本地文件包含漏洞會結合一些特殊的文件上傳漏洞,從而形成更大的威力。

 

隨便選擇一個進行測試 發現url有文件路徑

 


 

同時發現一串紅字提醒

先對php.ini中的allow_url_include 中的off 改給on

 

 

該服務器搭建在windows上用../../../../../Windows/win.ini到根目錄然後再進行對應固定配置文件

這樣就會把相應文件的內容暴露出來

 

 


查看後端源碼 發現後端沒有做驗證 用戶可以改其他的地址

2.遠程文件包含漏洞:能夠通過url地址對遠程的文件進行包含,這意味着攻擊者可以傳入任意的代碼。
因此,在web應用系統的功能設計上儘量不要讓前端用戶直接傳變量給包含函數,如果非要這麼做,也一定要做嚴格的白名單策略進行過濾。
通過“File Inclusion”對應的測試欄目,來進一步的瞭解該漏洞。
選擇一個選項進行測試

 

在遠端設置攻擊腳本

 

 

 輸入攻擊鏈接

 

目錄中出現了yijuhua.php,攻擊成功

 

 然後可以利用這個一句話木馬 進行測試輸入yijuhua.php?x=dir 也可以x=ipcconfig

不安全的文件下載

    概述

文件下載功能在很多web系統上都會出現,一般我們當點擊下載鏈接,便會向後臺發送一個下載請求,一般這個請求會包含一個需要下載的文件名稱,後臺在收到請求後 會開始執行下載代碼,將該文件名對應的文件response給瀏覽器,從而完成下載。 如果後臺在收到請求的文件名後,將其直接拼進下載文件的路徑中而不對其進行安全判斷的話,則可能會引發不安全的文件下載漏洞。
此時如果 攻擊者提交的不是一個程序預期的的文件名,而是一個精心構造的路徑(比如../../../etc/passwd),則很有可能會直接將該指定的文件下載下來。 從而導致後臺敏感信息(密碼文件、源代碼等)被下載。
所以,在設計文件下載功能時,如果下載的目標文件是由前端傳進來的,則一定要對傳進來的文件進行安全考慮。 切記:所有與前端交互的數據都是不安全的,不能掉以輕心!
你可以通過“Unsafe file download”對應的測試欄目,來進一步的瞭解該漏洞。

     在靶場的unsafe filedownload欄目可以看到  各種球星的圖片可供下載

   

 

  隨便點擊一個進行測試。

  可以修改這裏的文件名,來下載其他的文件

  

 

 

  在上一級目錄看到有down_nba.php這個文件,那我們就構造url     127.22.174.53/pikachu/vul/unsafedownload/execdownload.php?filename=../down_nba.php

     

    入侵成功,可以通過重複的../../../../../來跳轉到根目錄來進行猜測或者爆破下載任意的文件。

 文件上傳

文件上傳功能在web應用系統很常見,比如很多網站註冊的時候需要上傳頭像、上傳附件等等。當用戶點擊上傳按鈕後,後臺會對上傳的文件進行判斷 比如是否是指定的類型、後綴名、大小等等,然後將其按照設計的格式進行重命名後存儲在指定的目錄。 如果說後臺對上傳的文件沒有進行任何的安全判斷或者判斷條件不夠嚴謹,則攻擊着可能會上傳一些惡意的文件,比如一句話木馬,從而導致後臺服務器被webshell。 所以,在設計文件上傳功能時,一定要對傳進來的文件進行嚴格的安全考慮。比如:
--驗證文件類型、後綴名、大小;

防範文件上傳的辦法-

-驗證文件的上傳方式;
--對文件進行一定複雜的重命名;
--不要暴露文件上傳後的路徑;

 

客戶端check

client check和MIME type的1.php爲

 

 

嘗試上傳1.php,提示不符合要求。

 

將1.php重命名爲1.jpg,上傳,抓包,再將filename改爲1.php,上傳成功。並且返回路徑。

 

在burpsuite中將jpg改爲php

 

 

 

 

 

 

 

 

 成功執行

服務端check

php裏有一個$_file函數來獲取請求頭裏面的Content-Type 需要用抓包修改請求頭裏Content-Type的值來繞過驗證

 

 

 

 

成功繞過

 

 

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