白帽子講Web安全(第 14 章 PHP 安全)

2021-10-23 17:13:47 字數 1399 閱讀 4219

嚴格來說,檔案包含漏洞是「**注入」的一種。在「注入攻擊」一章中,曾經提到過「**注入」這種攻擊,其原理就是注入一段使用者能夠控制的指令碼或**,並讓伺服器端執行。「**注入」的典型代表就是檔案包含( file inclusion )。檔案包含可能會出現在 jsp、php、asp 等語言中,常見的導致檔案包含的函式如下。

檔案包含是 php 的一種常見用法,主要由 4 個函式完成:

當使用這 4 個函式包含乙個新的檔案時,該檔案將作為 php **執行,php 核心並不會在意該被包含的檔案是什麼型別。所以如果被保護的是 txt 檔案、檔案、遠端 url ,也都將作為 php **執行。

要想成功利用檔案包含漏洞,需要滿足下面兩個條件:

include() 等函式通過動態變數的方式引用需要包含的檔案;

使用者能夠控制該動態變數。

能夠開啟幷包含本地檔案的漏洞,被稱為本地檔案包含漏洞(local file inclusion ,簡稱 lfi )。

如果 php 的配置選項allow_url_include為 on 的話,則 include/require 函式是可以載入遠端檔案的,這種漏洞被稱為遠端檔案包含漏洞( remote file inclusion , 簡稱 rfi )。

本地檔案包含漏洞,其實也是有機會執行 php **的,這取決於一些條件。

遠端檔案包含漏洞之所以能夠執行命令,就是因為攻擊者能夠自定義被包含的檔案內容,因此本地檔案包含漏洞想要執行命令,也需要找到乙個攻擊者能夠控制內容的本地檔案。

經過不懈的研究,安全研究者總結出了一下幾種常見的技巧,用於本地檔案包含後執行 php **。

包含使用者上傳的檔案。

包含 data:// 或 php://input 等偽協議。

包含 session 檔案。

包含日誌檔案,比如 web server 的 access log 。

包含 /proc/self/environ 檔案。

包含上傳的臨時檔案 ( rfc1867 )。

包含其他應用建立的檔案,比如資料庫檔案、快取檔案、應用日誌等,需要具體情況具體分析。

包含使用者上傳的檔案很好理解,這也是最簡單的一種方法。使用者上傳的檔案內容中如果包含了 php **,那麼這些**被 include() 載入後將會執行。

但包含使用者上傳檔案能否攻擊成功,取決於檔案上傳功能的設計,比如要求知道使用者上傳後檔案所在的物理路徑,有時這個路徑很難猜到。

php 建立的上傳臨時檔案,往往處於 php 允許訪問的目錄範圍內。包含這個臨時檔案的方法,其理論意義大於實際意義。

php 會為上傳檔案建立臨時檔案,其目錄在 php.ini 的upload_tmp_dir中定義。但該值預設為空,此時在 linux 下會使用/tmp 目錄,在 windows 下會使用 c:\windows\temp 目前。

白帽子講Web安全(第 18 章 安全運營)

俗話說,安全是 三分技術,七分管理 安全對於企業來說,結果才是最重要的。安全方案設計完成後,即使看起來再美好,也需要經受實踐的檢驗。網際網路公司如何規劃自己的安全藍圖呢?從戰略層面上來說,aberdeen group 提到了三句話 find and fix,defend and defer,secu...

白帽子講Web安全(第 10 章 訪問控制)

許可權控制,或者說訪問控制,廣泛應用於各個系統中。抽象的說,都是某個主體 subject 對某個客體 object 需要實施某種操作 operation 而系統對這種操作的限制就是許可權控制。在乙個安全系統中,確定主體的身份是 認證 解決的問題 而客體是一種資源,是主體發起的請求的物件。在主體對客體...

《白帽子講Web安全》 學習筆記

最近加入新公司後,公司的官網突然被google標記為了不安全的詐騙 一時間我們資訊科技部門成為了眾矢之的,雖然老官網並不是我們開發的 因為開發老官網的前輩們全都跑路了 我們花了很多時間做web安全掃瞄以及修復,在檢查和修復過程中,發現老系統的 的不可維護性 再次說明整潔 之道clean code的重...