Web學習 PHP偽協議和檔案包含(部分)

2021-10-05 17:57:40 字數 2132 閱讀 7728

檔案包含函式

require()

require_once()

include()

include_once()

解析:

1.其實可以把require()和include()作為兩個大類,require_once()和include_once()是它們的變形。

include在包含的過程中如果出現錯誤,會報乙個警告,但是程式會繼續正常執行;而require函式出現錯誤時,會直接報錯並退出程式的執行。

兩者是整個程式是否完全執行的區別。

2.include_once(),require_once()這兩個函式,與前兩個的不同之處在於這兩個函式只包含一次。如果乙個檔案已經被包含過了,則require_once() 和 include_once() 則不會再包含它。

這兩個函式適用於在指令碼執行期間同乙個檔案有可能被包括超過一次的情況下。如果想要確保它只被包括一次,避免函式重新定義、變數重新賦值,可以採用這兩種函式。

檔案包含漏洞產生原因

檔案包含函式載入的引數沒有經過過濾或者嚴格的定義,可以被使用者控制,包含其他惡意檔案,導致了執行了非預期的**。

本地檔案包含漏洞(lfi-local)

需要能夠控制包含的檔案

1.無限制本地檔案包含漏洞

常見的敏感資訊路徑:

windows系統

c:\boot.ini // 檢視系統版本

c:\windows\system32\inetsrv\metabase.xml // iis配置檔案

c:\windows\repair\sam // 儲存windows系統初次安裝的密碼

c:\programfiles\mysql\my.ini // mysql配置

c:\programfiles\mysql\data\mysql\user.myd // mysql root密碼

c:\windows\php.ini // php 配置資訊

2.session檔案包含漏洞(session的儲存位置可以獲取)

3.有限制本地檔案包含漏洞繞過

遠端檔案包含漏洞(rfi-remote)

需要學會修改php.ini

兩個配置選項均需要為on,才能遠端包含檔案成功

allow_url_fopen = on

allow_url_include = on

1.無限制遠端檔案包含漏洞

2.有限制遠端檔案包含漏洞繞過

3.問號繞過/#號繞過(空格也可以繞過)

file:// — 訪問本地檔案系統

http:// — 訪問 http(s) **

ftp:// — 訪問 ftp(s) urls

php:// — 訪問各個輸入/輸出流(i/o streams)

zlib:// — 壓縮流

data:// — 資料(rfc 2397)

glob:// — 查詢匹配的檔案路徑模式

phar:// — php 歸檔

ssh2:// — secure shell 2

rar:// — rar

ogg:// — 音訊流

expect:// — 處理互動式的流

php.ini

allow_url_fopen 預設為 on

allow_url_include 預設為 off

php:// 輸入輸出流

php 提供了一些雜項輸入/輸出(io)流,允許訪問 php 的輸入輸出流、標準輸入輸出和錯誤描述符, 記憶體中、磁碟備份的臨時檔案流以及可以操作其他讀取寫入檔案資源的過濾器。

php://filter(本地磁碟檔案進行讀取)

一種元封裝器, 設計用於資料流開啟時的篩選過濾應用,對本地磁碟檔案進行讀寫。

條件:僅僅只能讀取,需要開啟 allow_url_fopen,但不需要開啟allow_url_include。

file://

用於訪問本地檔案系統,和php://filter類似都可以對本地檔案進行讀取。

php://input

php://input

可以訪問請求的原始資料的唯讀流,將post請求中的資料作為php**執行。

檔案包含與PHP偽協議實戰演練

1 include require 當使用include 函式包含檔案時,只有 執行到 include 函式時才將檔案包含進來,發生錯誤時只給出乙個警告,繼續向下執行。當使用require 函式包含檔案時,只要程式一執行就會立即呼叫檔案,發生錯誤的時候會輸出錯誤資訊,並且終止指令碼的執行 2 inc...

php檔案包含 偽協議 檔案上傳漏洞利用例項

1.上傳檔案過濾了字尾名和mime型別,files pic type 是由瀏覽器傳輸的檔案型別決定,但是mime content type 是由php 內建方法判斷檔案型別 2.任意檔案包含 f get f include once sys config.php include f 利用zip或ph...

利用檔案操作函式結合PHP偽協議RCE

獲得原始碼 http ip port read source 1 if isset get read source define data dir dirname file data md5 server remote addr if is dir data dir chdir data dir d...