BUGKU-WEB-文件包含

解题思路

  • 你说啥我就干啥:点击一下试试

  • 你会想到PHP伪协议这方面去嘛,你有这方面的知识储备吗?

  • 看到?file=XXX.php,那不就是典型的文件包含吗?

  • 这里需要用的一个伪协议php://filter:是一种元封装器, 设计用于数据流打开时的筛选过滤应用。
    可以使用php://filter获取指定文件源码:

  • ?file=php://filter/resource=xxx.php

发现啥也没有显示,这是因为:

通常获取源代码时,伪协议将xxx.php当文件执行,使得很多信息往往不能直接显示在浏览器页面上,通常使用base64编码后再显示

?file=php://filter/convert.base64-encode/resource=index.php

convert.base64-encode:是一个过滤器,看到encode可以知道这是一个加密的过滤,那自然就有convert.base64-decode,解密了。简单来说就是:对数据流进行编码,通常用来读取文件源码。

这样做的好处就是如果不进行编码,文件包含后就不会有输出结果,而是当做php文件执行了,而通过编码后则可以读取文件源码。

这里对资源文件show.php进行加密了,所以显示:

aW5kZXgucGhw

加上==后进行base64解密就可以复现:(index.php)

现内容就是index.php,说明show.php没有隐藏信息。

所以同理,对index.php使用伪协议执行一下:

http://114.67.175.224:15954/?file=php://filter/convert.base64-encode/resource=index.php

可以看到一串很长的东西,但注意最后的==,必须下意识去解密看看:

77u/PGh0bWw+DQogICAgPHRpdGxlPkJ1Z2t1LXdlYjwvdGl0bGU+DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2M2ZjMwYWZiMDJkYmU2YTU5ODMzODZjNWQzZTA0MTJjfQ0KPz4NCjwvaHRtbD4NCg==

php 复制代码
<html>
    <title>Bugku-web</title>
    
<?php
	error_reporting(0);
	if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
	$file=$_GET['file'];
	if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
		echo "Oh no!";
		exit();
	}
	include($file); 
//flag:flag{c6f30afb02dbe6a5983386c5d3e0412c}
?>
</html>

可以看到注释有flag了

PS:

参考其他WP发现都使用了一个read=,这是啥?

可以看到,说是这个参数可以不选,在PHP伪协议中,read是一个用于读取文件内容的操作符。它可以与伪协议中的其他操作符结合使用,用于读取文件的特定部分或指定偏移量的内容。

使用read操作符时,你需要指定一个文件路径和一个长度参数。read操作符将返回指定长度的文件内容。

?file=php://filter/read=convert.base64-encode/resource=index.php

1

稍微解释下这个做法:

php://filter/ 是一种访问本地文件的协议

/read=convert.base64-encode/ 表示读取的方式是 base64 编码后

resource=index.php 表示目标文件为index.php。

问什么要进行 base64 编码呢?如果不进行 base64 编码传入,index.php 就会直接执行,我们就看不到文件中的内容了。

得到Flag

原文链接:https://blog.csdn.net/qq_36292543/article/details/136155292

相关推荐
齊家治國平天下2 分钟前
AAOS 电源管理深度解析:休眠/唤醒/功耗优化
android·车载系统·aaos·aosp·电源管理·休眠唤醒·carpowermanager
吃糖的小孩25 分钟前
从只读页面到可控真实探针:我如何给 Owner Console 加手动诊断
前端
谷无姜25 分钟前
为什么你的性能优化无效?可能是"木桶效应"在作祟
前端·性能优化
Xzaveir27 分钟前
企业号码展示不可观测怎么办:状态机、拨测事件与异常回放
android·人工智能
雾非雾28 分钟前
《基于具身交互智能数字人技术:如何打造AI数字人宣讲平台"红厅智播”》
前端
2501_9160074737 分钟前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview
Revolution6138 分钟前
一段 JavaScript 代码执行时,到底发生了什么
前端·javascript
智能起源39 分钟前
关于元素层级过多,导致压祯的问题(使用winform或者WPF应用的webview组件嵌套网页时,动效卡顿问题)
前端
黄林晴1 小时前
Nearby Connections 重大变更:不再自动开启 Wi-Fi / 蓝牙,适配指南
android