文件包含与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:\phpStudy\WWW\robots.txt

在这里插入图片描述

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

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伪协议事实上就是支持的协议与封装协议(12种)

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

测试代码

路径为:E:\phpStudy\WWW\include.php

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

目标文件

robots.txt
路径为:E:\phpStudy\WWW\robots.txt

<?php phpinfo();?>

robots.zip
路径为:E:\phpStudy\WWW\robots.zip
内容为:robots.txt

1.php
路径为:E:\phpStudy\WWW\1.php

<?php echo('hello word!');?>

flag.txt
路径为:E:\flag.txt

flag{test123}

常用协议

1、目录遍历获取flag

在这里插入图片描述

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

在这里插入图片描述
也可以写入shell获取服务器权限

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?> 

在这里插入图片描述
接下来就是连接后门就OK了

(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

在这里插入图片描述
获取到的内容是base64加密的,解码即可获取1.php源码

3、file://

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

file:// 协议在双off的情况下也可以正常使用;
allow_url_fopen :off/on
allow_url_include:off/on
在这里插入图片描述
需要获取文件绝对路径

4、data://

allow_url_fopen:on
allow_url_include:on
在这里插入图片描述
可以写入后门,获取权限执行任意命令
在这里插入图片描述

5、zip://

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

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

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值