風炫安全web安全學習第三十三節課 文件包含漏洞基礎以及利用僞協議進行攻擊

風炫安全web安全學習第三十三節課 文件包含漏洞基礎以及利用僞協議進行攻擊php

文件包含漏洞

參考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/git

分類

LFI(Local File Inclusion)

本地文件包含漏洞,顧名思義,指的是能打開幷包含本地文件的漏洞。大部分狀況下遇到的文件包含漏洞都是LFI。簡單的測試用例如前所示。github

RFI(Remote File Inclusion)

遠程文件包含漏洞。是指可以包含遠程服務器上的文件並執行。因爲遠程服務器的文件是咱們可控的,所以漏洞一旦存在危害性會很大。
但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

img

include() 若是出錯的話,只會提出警告,會繼續執行後續語句。函數

img

require_once() 和 include_once() 功能與require() 和 include() 相似。但若是一個文件已經被包含過了,則 require_once() 和 include_once() 則不會再包含它,以免函數重定義或變量重賦值等問題。web安全

php僞協議

php://input

利用條件:

  1. allow_url_include = On。
  2. 對allow_url_fopen不作要求。

姿式:

index.php?file=php://input

POST:
<? phpinfo();?>

img

php://filter

利用條件:無甚

姿式:

index.php?file=php://filter/read=convert.base64-encode/resource=index.php

經過指定末尾的文件,能夠讀取經base64加密後的文件源碼,以後再base64解碼一下就行。雖然不能直接獲取到shell等,但能讀取敏感文件危害也是挺大的。
img

>>> 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安全學習第三十三節課-文件包含漏洞基/

相關文章
相關標籤/搜索