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

CTF中文件包含

php伪协议的分类

伪协议是文件包含的基础,理解伪协议的原理才能更好的利用文件包含漏洞。

php://input

php://input代表可以访问请求的原始数据,简单来说POST请求的情况下,php://input可以获取到post的数据。

使用条件:include( )、include_once( )、file_get_contents( )

比较特殊的一点,enctype=”multipart/form-data”的时候 php://input 是无效的。

用法举例:

  • 使用file_get_contents函数的伪协议包含有个经典的例子;
  • 可以使用fputs文件输入流直接服务器某一存在的目录下写入文件。

php://output

php://output 是一个只写的数据流,允许你以print和echo一样的方式写入到输出缓冲区。

php://filter(重点)

php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用,也就是作为一种过滤器,可以使用在数据流产生的地方。

在php文档中,标准的定义是这样的:

类似的过滤器还有string.rot13、string.strip_tags、zlib.deflate和zlib.inflate等等,目前只要知道convert.base64-encode就好了。

URL 中包含点的常见形式

?file = xxx 或者 ?file = xxx.php

allow_url_fopen和allow_url_include

在测试了包含点存在包含漏洞以后,并不是都可以使用filter伪协议包含出源码的,因为allow_url_fopen和allow_url_include会影响到fopen和include等函数对于伪协议的支持。

allow_url_include影响php://input的使用,若不打开则无法使用。

当allow_url_fopen打开时,可以包含任意url。

例如只打开allow_url_include时,只能包含远程文件和使用php://input

举个例子

题目链接:http://level3.tasteless.eu/

题目直接给出了源码:

根据提示,用php://input 伪协议读取php.ini

找到SERVER["DOCUMENT_ROOT"],也就是网站的根目录,可以找到当前脚本的目录,如下:

还可以看到一些文件包含的配置:

  • rfi是关闭的,也就是allow_url_fopen为Off;
  • allow_url_include开启,可以使用php://input伪协议来列出当前目录下的文件。

绕过 waf 的方法

字典绕过

在一些CTF中会对一些伪协议的关键词进行过滤,如read、resource等等,下面总结了几条绕过方法,在实战中作为字典来跑。

?f=php://filter/convert.base64-encode/resource=login.php(过滤了操作名read)
?f=php://filter/read=convert.base64-encode/resource=1.jpg/resource=./show.php(正则 /resource=*.jpg/i)
?f=data:text/plain,<?php phpinfo()?>
?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

这里说一下第二条,这是2018 ISCC中的一道题目的绕过方法。

这里用正则匹配了resource=,我们就可以用重写的方法来绕过正则。

截断包含

截断

这里技巧现在应该是用的比较少了,因为利用截断要满足下面的两个条件:

  • php版本小于5.3.4
  • magic_quotes_gpc为off

./ 截断

点号和路径截断以及./截断,也就是填充大量的./使url长度超过最大值,来达到截断的目的。

具体可以看下面的文章:

https://blog.csdn.net/zvall/article/details/8951925 

zip协议和phar协议

在实战过程中,若发现存在文件上传但是没有办法直接上传php文件,可以传zip压缩文件,我们就利用这两个协议,将php文件打包成zip文件来包含里面的php脚本。

phar://、zip://,都可以看到在phpinfo中有相应的描述。

例如脚本文件为1.php,打包成1.zip,然后再改名为1.jpg,上传之后包含1.jpg中的php文件即可。

zip://..(当前脚本的绝对路径).../1.jpg#1.php
phar://...(当前脚本的绝对路径).../1.jpg/1(分割不加后缀名)
http://www.lryc.cn/news/451364.html

相关文章:

  • 20.指针相关知识点1
  • PFC和LLC的本质和为什么要用PFC和LLC电路原因
  • 自定义认证过滤器和自定义授权过滤器
  • 单节点集群的设置及数据写入
  • 【Linux学习】【Ubuntu入门】1-2 新建虚拟机ubuntu环境
  • 自动驾驶系列—自动驾驶MCU架构全方位解析:从单核到多核的选型指南与应用实例
  • 基于单片机多功能称重系统设计
  • PWA(Progressive web APPs,渐进式 Web 应用): manifest.json、 Service Worker
  • 【学习笔记】手写 Tomcat 八
  • 24年九月份生活随笔
  • [含文档+PPT+源码等]精品大数据项目-基于Django实现的高校图书馆智能推送系统的设计与实现
  • Leecode刷题之路第七天之整数反转
  • SpringBoot项目 | 瑞吉外卖 | 短信发送验证码功能改为免费的邮箱发送验证码功能 | 代码实现
  • Windows暂停更新
  • alpine安装docker踩坑记
  • 使用openpyxl轻松操控Excel文件
  • 指定PDF或图片多个识别区域,识别区域文字,并批量对PDF或图片文件改名
  • Web3中的跨链技术:实现无缝连接的挑战
  • 词袋(Bag of Words, BoW)
  • HTTP Status 404 - /brand-demo/selectAllServlet错误解决原因-Servlet/JavaWeb/IDEA
  • 宁夏众智科技OA办公系统存在SQL注入漏洞
  • Spring邮件发送:配置与发送邮件详细步骤?
  • iPhone/iPad技巧:如何解锁锁定的 iPhone 或 iPad
  • 无源码实现免登录功能
  • 大数据毕业设计选题推荐-民族服饰数据分析系统-Python数据可视化-Hive-Hadoop-Spark
  • 疾风大模型气象,基于气象数据打造可视化平台
  • PHP安装后Apache无法运行的问题
  • [论文精读]Multi-Channel Graph Neural Network for Entity Alignment
  • Study-Oracle-10-ORALCE19C-RAC集群搭建(一)
  • 1.8 物理层下的传输媒体