攻防世界web第三题file_include

php 复制代码
<?php
highlight_file(__FILE__);
    include("./check.php");
    if(isset($_GET['filename'])){
        $filename  = $_GET['filename'];
        include($filename);
    }
?>

这是题目

惯例:

代码审查:

1.可以看到include("./check.php");猜测是同级目录下有一个check.php文件用于过滤之类的

  1. if(isset($_GET['filename'])){ $filename = $_GET['filename']; include($filename); }

判断url中是否有参数名为filename的值,如果不为空,则将其赋值给$filename变量,猜测利用这一点把check.php执行出来。

测试:

发送请求构造url:http://61.147.171.105:63401/?filename=check.php

提交无反应

这时再考虑伪协议用base64编码读取

构造url: http://61.147.171.105:63401/?filename=php://filter/read=convert.base64-encode/resource=./check.php

再次提交,显示dont hack!

到这里,可以证明我们的思路基本正确,关键信息大概率在check.php文件中,我们再考虑如何绕过读取真正的信息。

猜测是由于编码格式的问题,我们换最常用的utf-8和utf-16编码格式读

构造url: http://61.147.171.105:63401/?filename=php://filter/convert.iconv.utf8.utf16/resource=./check.php

提交得到

根据输出的内容可以看到是过滤"be,encode"等字段,到这里,说明我们已经能成功访问check.php了。而这里并没有flag,那我们猜测还有另一个flag.php文件,测试一下

构造url:

http://61.147.171.105:63401/?filename=php://filter/convert.iconv.utf8.utf16/resource=./flag.php

提交得到

成功拿到flag

总结:1.要能读懂代码

2.要会PHP:filter协议

知识点:

1.php://filter

PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

参考这个:这个

2.$_GET变量
G E T 是 P H P 中的一个预定义超全局变量,专门用于收集通过 H T T P G E T 方法传递的参数 1 。这个变量允许开发者轻松地从 U R L 查询字符串中提取信息,使得在不同页面之间传递数据变得简单高效。由于其特殊性质, _GET 是PHP中的一个预定义 超全局变量 ,专门用于收集通过HTTP GET方法传递的参数1。这个变量允许开发者轻松地从URL查询字符串中提取信息,使得在不同页面之间传递数据变得简单高效。由于其特殊性质, GET是PHP中的一个预定义超全局变量,专门用于收集通过HTTPGET方法传递的参数1。这个变量允许开发者轻松地从URL查询字符串中提取信息,使得在不同页面之间传递数据变得简单高效。由于其特殊性质,_GET在整个脚本执行期间都可用,无需显式声明,这大大简化了Web应用程序中数据处理的过程。

3.isset函数

4.include 和 require 是PHP中用于在当前文件中包含(或插入)另一个文件内容的两个语句。它们的主要目的是代码复用,通过包含(或引用)外部文件的方式,使得PHP代码更加模块化和易于管理。然而,尽管它们的目标相似,但在处理包含文件失败时的行为上有所不同,相当于Java中的import。

include:当使用include语句时,如果指定的文件不存在或路径错误,PHP会发出一个警告(E_WARNING),但脚本会继续执行。这意呀着,如果你的页面依赖于被包含文件中的内容(比如函数定义、类定义或变量初始化),而该文件未被成功包含,那么页面可能会显示不完整或功能异常,但用户仍然可以看到页面。

相关推荐
careybobo38 分钟前
海康摄像头通过Web插件进行预览播放和控制
前端
杉之2 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
喝拿铁写前端2 小时前
字段聚类,到底有什么用?——从系统混乱到结构认知的第一步
前端
再学一点就睡2 小时前
大文件上传之切片上传以及开发全流程之前端篇
前端·javascript
木木黄木木3 小时前
html5炫酷图片悬停效果实现详解
前端·html·html5
请来次降维打击!!!4 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
難釋懷4 小时前
JavaScript基础-移动端常见特效
开发语言·前端·javascript
自动花钱机5 小时前
WebUI问题总结
前端·javascript·bootstrap·css3·html5
拉不动的猪5 小时前
简单回顾下pc端与mobile端的适配问题
前端·javascript·面试
拉不动的猪5 小时前
刷刷题49(react中几个常见的性能优化问题)
前端·react.js·面试