滲透測試入門知識-文件上傳漏洞原理到實戰

文件包含漏洞原理
程序開發人員一般會把重複使用的函數寫到單個文件中,需要使用某個函數時直接調用此文件,而無需再次編寫,這種文件調用的過程一般被稱爲文件包含。通過函數包含文件時,由於沒有對包含的文件名進行有效的過濾處理,被攻擊者利用從而導致了包含了Web根目錄以外的文件進來,就會導致文件信息的泄露甚至注入了惡意代碼。

分類

  本地文件包含
       被包含的文件在本地服務器中。
  遠程文件包含
       被包含的文件在第三方服務器中。

文件包含函數

       a、include():只有代碼執行到該函數時纔會包含文件進來,發生錯誤時只給出
       一個警告並繼續向下執行。
       b、include_once():和include()功能相同,區別在於當重複調用同一文件時,程
       序只調用一次。
      c、require():只要程序執行就包含文件進來,發生錯誤時會輸出錯誤結果並終止
      運行。
      d、require_once():和require()功能相同,區別在於當重複調用同一文件時,程序
      只調用一次。

存在的風險
讀取文件、寫入文件。

實戰

      攻擊目標
            系統:Ubuntu16.04
            IP:192.168.1.11
            環境:Apache2+PHP7.2+mysql5.7
            應用:DVWA

讀取文件
原網頁
使用…/…/…/…/…/…/etc/shadow讀取本地賬戶信息
讀取本地賬戶信息
2、寫入文件
使用input寫入文件
在這裏插入圖片描述
如何防禦

   1、嚴格檢查變量是否已經初始化。

   2、嚴格判斷包含中的參數是否外部可控。

   3、基於白名單的包含文件驗證,驗證被包含的文件是否在白名單中。

   4、儘量不要使用動態包含,可以在需要包含的頁面固定寫好,如:include("func.php")。

   5、對所有輸入提交可能包含的文件地址,包括服務器本地文件及遠程文件,
   進行嚴格的檢查,參數中不允許出現../之類的目錄跳轉符。

   6、可以通過調用str_replace()函數實現相關敏感字符的過濾,
   一定程度上防禦了遠程文件包含。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章