返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >攻防世界fileinclude题解
  • 278
分享到

攻防世界fileinclude题解

php网络安全 2023-09-03 14:09:13 278人浏览 薄情痞子
摘要

目录 解题思路 file_get_contents()函数 PHP伪协议 解题思路续 解题思路 先看题目   打开题目场景   我们看到用了file_get_contents()函数 这里我忘了这个函数是什么意思了

目录

解题思路

file_get_contents()函数

PHP伪协议

解题思路续


解题思路

  • 先看题目

 

  • 打开题目场景

 

  • 我们看到用了file_get_contents()函数

  • 这里我忘了这个函数是什么意思了,于是又去翻了翻文档

file_get_contents()函数

file_get_contents():

file_get_contents() 把整个文件读入一个字符串中。

该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。

语法:

file_get_contents(path,include_path,context,start,max_length)

参数描述
path必需。规定要读取的文件。
include_path可选。如果您还想在 include_path(在 PHP.ini 中)中搜索文件的话,请设置该参数为 '1'。
context可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。
start可选。规定在文件中开始读取的位置。该参数是 php 5.1 中新增的。
max_length可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。

提示:该函数是二进制安全的。(意思是二进制数据(如图像)和字符数据都可以使用此函数写入。)

  • 下面测试一下这个函数的用法

  • 我们创建两个文件

  • main.php和test.txt

  • 文件路径: test-environment/first

  • 两个文件内容如下:

#main.php:
#test.txtThis is a String.Hello World;
  • 我们访问main.php文件

 

  • 文件里面的内容被当作一个字符串返回

  • 至此我们明白了file_get_contents()函数的基本作用

  • 言归正传,我们到这里就明白了,源码中的意思:需要file2返回的值为 "hello ctf"

  • 而这个file2的值是我们可以控制的一个参数,因此我们只需要让 file2="hello ctf"即可

  • 我们看到代码开头部分有个flag.php 文件,猜测大概率flag就在这里面

  • 因此我们需要对该文件做一个读取,在这里我们需要用到 php伪协议

PHP伪协议

PHP有很多内置 URL风格的封装协议,这类协议与fopen()、 copy()、 file_exists()和filesize()的文件系统函数所提供的功能类似。

在文件包含漏洞这里,我们便可以利用这些伪协议对文件进行一些相关的操作从而达到我们的目的

常用的伪协议如下:

  • php://filter 读取文件源码

  • php://input 任意代码执行

  • data://text/plain 任意代码执行

  • zip:// 配合文件上传开启后门

php://filter

  • 介绍:php://filter 协议可以对打开的数据流进行筛选和过滤,常用于读取文件源码

    (allow_url_include和allow_url_fopen都不做要求)

  • 注意:使用文件包含函数包含文件时,文件中的代码会被执行,如果想要读取文件源码,可以使用base64对文件内容进行编码,编码后的文 件内容不会被执行,而是展示在页面中,我们将页面中的内容使用base64解码,就可以获取文件的源码了

  • 用法:

    ?page=php://filter/read=convert.base64-encode/resource={要读取的文件名}
  • 各个参数详解:

名称描述
resource=<要过滤的数据流>这个参数是必须的,它指定了你要筛选过滤的数据流
read=<读链的筛选列表>可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
write=<写链的筛选列表>可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
任何没有以read=和write=做前缀的,都会视情况应用于读写链
  • 测试:

    • 测试地址:D:\phpstudy_pro\WWW\test-environment\second

    • 我们创建一个文件:demo.php

    • 写入以下内容:

    • #此文件用来测试
    • 在创建一个文件:test.php

    • 写入以下内容:

    • 接下来我们启动phpstudy去访问test.php文件,并传入参数?file=demo.php

    • 按照正常的逻辑demo.php的内容会被解析

    •  

    • 我们发现事实却是是如此,但是如果我们不想demo.php被解析,而是想要获取它的源码怎么办,这个时候我们就需要用file://filter伪协议了

    • 我们构造以下payload:

    • ?file=php://filter/read=convert.base64-encode/resource=demo.php
    • 得到目标文件的源码的base64编码,我们拿去解码看看是不是和源码一致

    •  

    • 答案是正确,至此,我们对php://filter有了一定的了解

     

php://input

  • 利用php中流的概念,将原本的include的文件流重定向到了用户可控制的输入流中命令执行

  • (allow_url_include:on,allow_url_fopen不做要求)

  • 用法

    • ?page=php://input
    • 然后用post请求输入想要执行的代码

  • 测试:

    • 测试环境和前面一样,可以往上翻看看,但是这次我们只用test.php一个文件即可,不需要包含demo.php文件,因为我们输入什么就会执行什么

    •  

    • 正常情况下会返回,但是我这里不知道为什么hackbar点击execute没有反应,于是我改变方法抓包试试

    •  

    • 我直接把post请求体写在了这里,放包试试

    •  

       

    • 成功!!!

    • 后来找到hackbar为什么post请求提交不上去的原因了,因为参数必须写成键值对的形式才可以,如key=value

data://text/plain

  • 协议格式: data:资源类型;编码,内容

  • php版本大于等于5.2,allow_url_include和allow_url_fopen都为on的状态

  • data://协议通过执行资源类型,使后面的内容当做文件内容来执行,从而造成任意代码执行

  • 用法如下:

    • ?url=data://text/plain,
    • 和input有点像,但是又不太一样

zip://

  • ziip://协议用来读取压缩包中的文件,可以配合文件上传开启后门,获取WEBshell

    将shell.txt压缩成zip,再将后缀名改为jpg上传至服务器,再通过zip伪协议访问压缩包里的文件,从而链接木马

  • 用法:

    • ?url=zip://shell.jpg

解题思路续

  • 经过上面的知识补充,我们对伪协议有了进一步的认识

  • 那么我们重归此题,我们此时便可以构造下面的payload

    • ?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input

     

    • burp抓包

    •  

    • 将post请求体内容改为 hello ctf,放包

    •  

    • 得到flag,base64解码即可

  • 现在提供另一种方法

  • 就是用data://协议流

  • payload:

    • ?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=data://text/plain;base64,aGVsbG8gY3Rm

     

  • data伪协议,base64编码传输,也可达成目的

  • 至此完成,flag为

    • PD9waHAKZWNobyAiV1JPTkcgV0FZISI7Ci8vICRmbGFnID0gY3liZXJwZWFjZXs0Y2Y3N2ZhYWZiYjNmZDRkMjlkMDM2YmRiYjM5NzcwN30=​
    • cyberpeace{4cf77faafbb3fd4d29d036bdbb397707}

    •  

来源地址:https://blog.csdn.net/henghengzhao_/article/details/127328881

--结束END--

本文标题: 攻防世界fileinclude题解

本文链接: https://lsjlt.com/news/392382.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 攻防世界fileinclude题解
    目录 解题思路 file_get_contents()函数 PHP伪协议 解题思路续 解题思路 先看题目   打开题目场景   我们看到用了file_get_contents()函数 这里我忘了这个函数是什么意思了...
    99+
    2023-09-03
    php 网络安全
  • 攻防世界(fileinclude)
    记录一道简单的文件包含题,攻防世界的fileinclude。 打开环境 页面给出了flag在flag.php中,明确了目标,看一下网页源码 主要部分 $lan=$_COOKIE['language'];        ==>        ...
    99+
    2023-09-14
    php 服务器 开发语言 web安全 安全
  • 攻防世界WEB练习-fileinclude
    前言 作者简介:不知名白帽,网络安全学习者。 博客主页:https://blog.csdn.net/m0_63127854type=blog 攻防世界专栏:https://blog.csdn.net/m0_63127854/cat...
    99+
    2023-09-20
    php 开发语言
  • 攻防世界--fileclude && fileinclude && inget && easytornado
    一、fileclude ...
    99+
    2023-10-03
    php 开发语言
  • Web安全攻防世界01 fileinclude(宜兴网信办)
    问题描述: 攻防世界文件包含入门题目,参考大佬们的WP有所补充,内容对小白友好~ 原因分析: 按照惯例,首先查看源代码ctrl+u: 整理一下大概是下面这个意思(代码0基础,可能有误,欢迎留言沟通与指正~) //规定 HTML 文档的...
    99+
    2023-09-09
    php web安全
  • 【攻防世界-Web】unserialize3解题思路
    目录 题目直接显示网页源码解题思路构造payload得到flag 题目直接显示网页源码 class xctf{public $flag = '111';public function __...
    99+
    2023-09-01
    php web安全
  • 攻防世界ctf web easyphp题解wp
    第一步,用科学计数法绕过 a=1e9 if(isset($a) && intval($a) > 6000000 && strlen($a) ...
    99+
    2023-09-17
    php 安全 web安全
  • 攻防世界Web_php_include详解
    两种思路: 第一种:文件包含 根据代码审计,对get类型参数进行循环过滤字符串'php://',所以考虑其他伪协议,伪协议包括: 【file://协议】 file:// 协议在双off的情况下也可以正常使用; allow_url_fo...
    99+
    2023-09-02
    php 开发语言
  • 攻防世界-warmup详解
    1、进入题目的场景 只有一个表情,没有其他的信息,因此我们进行查看源码,发现source.php  2、访问source.php可以看的出来是代码审计 因此我们需要对其代码进行了解 ...
    99+
    2023-08-31
    php 开发语言
  • simple_php (攻防世界)
    前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 进入网址 解题工具: 可以使用hackerbar 问题解析: 我们来分析一下代码  很明显是一段php代码 前三行可略过 和解题无关 ...
    99+
    2023-09-28
    php
  • 攻防世界unserialize3
    又来了我的攻防世界 原题:攻防世界         怎么说呢...先看一下题目吧  看到题目的时候我第一反应是无从下手,之前说过博主是个刚起步的新手而且对php不是特别了解...这真的是难度一的题嘛...不过!在查找了很多资料后我逐渐理解...
    99+
    2023-09-02
    php 开发语言
  • easyupload(攻防世界)
    文件上传,发现对文件的后缀名进行了过滤,php,phtml.php3等都不行 尝试.php. 绕过 (windows中会把后缀名最后的空格和. 省略,即上传.php.绕过后会变为.php) 又发现对上传文件的内容进行了验证,加入图片头。 ...
    99+
    2023-09-02
    php 开发语言
  • 攻防世界Web_php_include
    php文件包含题 启动场景 进行代码审计: 对get类型参数进行循环过滤字符串'php://',所以考虑其他伪协议,伪协议详见PHP伪协议详解_Snakin_ya的博客-CSDN博客 show_source() 函数 str_repla...
    99+
    2023-09-10
    php
  • baby_web (攻防世界)
    前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 进入网址   解题工具: 一个有F12的键盘 问题解析: 题目说想想初始页面是哪个 一般都是index.php 然后如题分析即可 科普时间叒到 HTTP状态码...
    99+
    2023-09-16
    php
  • 攻防世界-fileclude
    一   输入的变量是language,用COOKIE传参,输出的是x 19行 @include("english.php")可以看出此处存在文件包含。include函数用php://filter伪协议来绕过 flag后面不加.php,会...
    99+
    2023-09-12
    php 开发语言
  • 攻防世界---fileclude
    打开环境   查看代码,发现包含了flag.php,如果file1和file2不为空,file2被放入了file_get_contents函数中,并且file2的返回结果为hello ctf 则可以得到flag  3.由题可知我们应该获...
    99+
    2023-09-05
    php 开发语言
  • 攻防世界fileclude
    自学的困难,一个题10个没见过的知识点,唉,太难了... ----------------------------------------------------------------------------------下面是正文。 原题...
    99+
    2023-09-09
    php 开发语言
  • 攻防世界-unseping
    攻防世界-unseping [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iPc18GlQ-1666931905094)(data:image/png;base64,i...
    99+
    2023-09-05
    php 开发语言 python ctf
  • 攻防世界 web2
    这个题需要考察php的代码审计,需要具备一定的php知识 最后一段说这个就是思路 首先先看看代码中的几个函数 Strlen()函数   将返回字符串的长度 Strrev()函数     将字符串倒置并且返回 Substr()函...
    99+
    2023-09-08
    php web安全
  • 【攻防世界】easyphp
    废话不多说,打开环境就是一大段的php代码,对于我一个小白来说,还是难阿!只能一点点琢磨构造payload的思路,当然也是在网上参考了别人的wp。记录下来也为了加深自己的印象,有事没事都能翻一翻,温故而知新嘛。 ...
    99+
    2023-08-31
    开发语言 web安全 python php Powered by 金山文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作