前言
一:什麼是文件包含漏洞?
服務器通過PHP的特性(函數)去包含任意文件時,由於要包含的這個文件來源過濾不嚴,從而可以去包含一個惡意文件,而我可以構造這個惡意文件來達到攻擊的目的。
漏洞產生的根本原因就是,在通過php的函數引入文件時,沒有對傳入的文件名經過合理的校驗,從而操作了預想 之外的文件(也就是惡意文件)。
二:是不是隻有php纔有文件包含漏洞?
當然不是的,只是文件包含漏洞比較常出現在PHP中,而且文件包含漏洞在PHP web Application中居多。當然了機會所有的腳本語言都會提供文件包含的功能,只是在JSP,ASP,ASP.NET中非常少見。
三:PHP常見的文件包含函數:
Include()、Require()、Include_once()、Require_once()
文件包含漏洞的類型
本地文件包含漏洞(LFI)
利用條件:
(1):allow_url_fopen=ON
(2):用戶可以控制變量
遠程文件包含漏洞(RFL)
利用條件:
(1):allow_url_fopen=ON
(2):allow_url_include=ON
(3):用戶可以控制變量
當然了,通過在Web中我們是無法知道allow_url_fopen和allow_url_include
開啓或者關閉的情況的,除非有phpinfo()
但是通過經驗得知本地文件包含通常是開啓的,也就是allow_url_fopen=On
的,通常遠程文件包含是關閉的,因爲從PHP5.2以後開始allow_url_include是默認關閉的,也就是Off,並且很少有人去修改他。
文件包含漏洞的利用方式
- php://input(接收POST過來的值)
利用條件:
allow_url_fopen = ON
allow_url_include = ON
php版本小於等於5.3.0
利用方式:
- php://filter
利用條件:
allow_url_fopen= ON
allow_url_include 不做要求
利用方式:
php://filter/read=convert.base64-encode/resource=./robots.txt
讀取經過base64加密後的文件源碼,將讀取出來的文件內容通過base64解碼即可。
- phar://
利用條件:
php版本大於等於5.3.0
利用方式:
將內容爲<?php phpinfo();?>的123.txt文件壓縮爲123.zip
phar://絕對路徑\123.zip\123.txt
- data:text/plain
利用條件:
allow_url_fopen=ON
allow_url_include=ON
php版本大於5.2
利用方式:
data:text/plain,<?php phpinfo();?>
data:text/plain,<?php system("whoami");?>
data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
這裏需要注意的是text/plain後面是;base64,後面接的base64加密後的內容 %2b 是加號 + 的URl編碼爲%20
- file://
利用條件:
對allow_url_fopen和allow_url_include不做要求
利用方式:
file://D:/phpStudy/PHPTutorial/WWW/BlueCMS v1.6 sp1/robots.txt
總結:
本人目前總結的就這麼多,如有不足,還請大家多多指教。