風炫安全web安全學習第三十三節課 文件包含漏洞基礎以及利用僞協議進行攻擊php
參考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/git
本地文件包含漏洞,顧名思義,指的是能打開幷包含本地文件的漏洞。大部分狀況下遇到的文件包含漏洞都是LFI。簡單的測試用例如前所示。github
遠程文件包含漏洞。是指可以包含遠程服務器上的文件並執行。因爲遠程服務器的文件是咱們可控的,所以漏洞一旦存在危害性會很大。
但RFI的利用條件較爲苛刻,須要php.ini中進行配置web
兩個配置選項均須要爲On,才能遠程包含文件成功。shell
在php.ini中,allow_url_fopen默認一直是On,而allow_url_include從php5.2以後就默認爲Off。安全
php中引起文件包含漏洞的一般是如下四個函數:服務器
1. include() 2. include_once() 3. require() 4. require_once()
reuqire() 若是在包含的過程當中有錯,好比文件不存在等,則會直接退出,不執行後續語句。ide
include() 若是出錯的話,只會提出警告,會繼續執行後續語句。函數
require_once() 和 include_once() 功能與require() 和 include() 相似。但若是一個文件已經被包含過了,則 require_once() 和 include_once() 則不會再包含它,以免函數重定義或變量重賦值等問題。web安全
利用條件:
姿式:
index.php?file=php://input POST: <? phpinfo();?>
利用條件:無甚
姿式:
index.php?file=php://filter/read=convert.base64-encode/resource=index.php
經過指定末尾的文件,能夠讀取經base64加密後的文件源碼,以後再base64解碼一下就行。雖然不能直接獲取到shell等,但能讀取敏感文件危害也是挺大的。
>>> import base64 >>> base64.b64decode("PD9waHAgDQoJJGZpbGUgPSAkX0dFVFsnZmlsZSddOw0KCWluY2x1ZGUgJGZpbGU7DQo/Pg==") b"<?php \r\n\t$file = $_GET['file'];\r\n\tinclude $file;\r\n?>"
其餘姿式:
index.php?file=php://filter/convert.base64-encode/resource=index.php
效果跟前面同樣,少了read等關鍵字。在繞過一些waf時也許有用。
參考:
http://blog.evalshell.com/2020/12/20/風炫安全web安全學習第三十三節課-文件包含漏洞基/