文件包含、PHP伪协议

  • A+
所属分类:安全闲碎

】、文章源自【字节脉搏社区】-字节脉搏实验室

作者-墨子辰

扫描下方二维码进入社区

文件包含、PHP伪协议

一、PHP中造成文件包含的四个函数

1、include() 、require()

当使用include()函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。

当使用require()函数包含文件时,只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行


2、include_once() 功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次。

require_once()功能和require()相同,区别在于当重复调用同一文件时,程序只调用一次。


       当使用上述四个函数包含一个新文件时,该文件将作为 PHP 代码执行,php 内核并不在意该被包含的文件是什么类型。所以如果被包含的是 txt 文件、图片文件、远程 url、也都将作为 PHP 代码执行。

robots.txt 内容为:<?php phpinfo();?>

  路径为:E:phpStudyWWWrobots.txt

文件包含、PHP伪协议

文件包含、PHP伪协议

二、本地文件包含、远程文件包含的区别

1、本地文件包含 LFI(Local File Include)


2、远程文件包含 RFI(Remote File Include)(需要 php.ini 中 allow_url_include=on、allow_url_fopen = On)

在 php.ini 中,allow_url_fopen 默认一直是 On,而 allow_url_include 从 php5.2 之后就默认为 Off。

文件包含、PHP伪协议

文件包含、PHP伪协议

三、PHP伪协议

PHP伪协议事实上就是支持的协议与封装协议(12种)

文件包含、PHP伪协议

文件包含、PHP伪协议

测试代码

路径为:E:phpStudyWWWinclude.php

文件包含、PHP伪协议

文件包含、PHP伪协议

目标文件

robots.txt

路径为:E:phpStudyWWWrobots.txt

文件包含、PHP伪协议

文件包含、PHP伪协议

robots.zip

路径为:E:phpStudyWWWrobots.zip

内容为:robots.txt

文件包含、PHP伪协议

1.php

路径为:E:phpStudyWWW1.php

文件包含、PHP伪协议

文件包含、PHP伪协议

flag.txt

路径为:E:flag.txt

文件包含、PHP伪协议

文件包含、PHP伪协议

常用协议

1、目录遍历获取flag

文件包含、PHP伪协议

文件包含、PHP伪协议

2、php://input、php://filter

在CTF中经常使用的是php://filter和php://input


(1)php://input用于执行php代码。

PHP.ini:

allow_url_fopen :off/on

allow_url_include:on

文件包含、PHP伪协议

文件包含、PHP伪协议

也可以写入shell获取服务器权限

文件包含、PHP伪协议

文件包含、PHP伪协议

文件包含、PHP伪协议

接下来就是连接后门就OK了

文件包含、PHP伪协议

(2)php://filter用于读取源码

php://filter在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

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

文件包含、PHP伪协议

文件包含、PHP伪协议


获取到的内容是base64加密的,解码即可获取1.php源码

文件包含、PHP伪协议


3、file://

用于访问本地文件系统,在CTF中通常用来读取本地文件

file:// 协议在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

文件包含、PHP伪协议

文件包含、PHP伪协议


需要获取文件绝对路径

文件包含、PHP伪协议


4、data://

allow_url_fopen:on

allow_url_include:on

文件包含、PHP伪协议

文件包含、PHP伪协议

可以写入后门,获取权限执行任意命令

文件包含、PHP伪协议

文件包含、PHP伪协议

5、zip://


zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]


先将要执行的PHP代码写好文件名为robots.txt,将robots.txt进行zip压缩,压缩文件名为rob.zip,如果可以上传zip文件便直接上传,若不能便将rob.zip重命名为rob.jpg后在上传.


由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。

文件包含、PHP伪协议

文件包含、PHP伪协议

四、靶场练习题

1、LFI

?file=../../../etc/passwd

读取系统文件,确认存在文件包含。

文件包含、PHP伪协议

文件包含、PHP伪协议

使用data协议或者php://input协议判断是远程文件包含还是本地文件包含。

文件包含、PHP伪协议

文件包含、PHP伪协议

发现没有回显,基本确定是本地文件包含。


ctf中,我们可以直接去读取index.php或者flag.php

文件包含、PHP伪协议

文件包含、PHP伪协议

如果有任何过滤,index.php源码中能够看见,如果没有任何提示,我们就直接读取flag.php

文件包含、PHP伪协议

文件包含、PHP伪协议

文件包含、PHP伪协议

2、RFI

跟上面一样,我们使用php://input看看是远程还是本地包含。

文件包含、PHP伪协议

文件包含、PHP伪协议


如果是远程,我们可以直接Getshell


咱们用data://text/plain或者php://input都可以

文件包含、PHP伪协议

文件包含、PHP伪协议

文件包含、PHP伪协议

用蚁剑连接即可

文件包含、PHP伪协议

文件包含、PHP伪协议

文件包含、PHP伪协议


根目录发现两个flag文件,其中flag无法读取,readflag乱码。

这种情况,CTF中经常遇见,我们可以/readflag运气,然后获取flag

文件包含、PHP伪协议

文件包含、PHP伪协议

还有一种方式,也能读取flag

文件包含、PHP伪协议

文件包含、PHP伪协议

通过后门密码,调用system函数,运行readflag获取flag。

文件包含、PHP伪协议

通知!

公众号招募文章投稿小伙伴啦!只要你有技术有想法要分享给更多的朋友,就可以参与到我们的投稿计划当中哦~感兴趣的朋友公众号首页菜单栏点击【商务合作-我要投稿】即可。期待大家的参与~

文件包含、PHP伪协议

记得扫码

关注我们

本文始发于微信公众号(字节脉搏实验室):文件包含、PHP伪协议

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: