欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

web——flag在index里(80)——Bugku

程序员文章站 2022-07-16 16:41:29
...

0×00 靶场链接

http://123.206.87.240:8005/post/

0×01 题目描述

web——flag在index里(80)——Bugku

0×02 解题过程

看到click me?no当然就要选择点击


web——flag在index里(80)——Bugku

点开后是test5字样

这道题的名字叫flag在index里,点开的页面url处是?file=show.php

我们要想办法显示出index.php,这里包含了一个知识点叫做文件包含和PHP伪协议,我们要找到index.php文件就必须要解除文件包含,于是使用php中的filter()函数

web——flag在index里(80)——Bugku

我们需要读文件,就是需要read()函数,但是读文件的话是直接运行的意思,所以我们需要把文件转化成base64编码,这样才能得到源代码文件,从而找到源代码中的flag。

步骤为:读文件(调用read参数)->以base64的方式返回(convert.base64-encode)->读取文件的方式(resource=index.php)

http://123.206.87.240:8005/post/index.php?file=php://filter/read/convert.base64-encode/resource=index.php

web——flag在index里(80)——Bugku

末尾是两个等号属于Base64编码,解码

web——flag在index里(80)——Bugku

<html>
    <title>Bugku-ctf</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{edulcni_elif_lacol_si_siht}
?>
</html>

得到flag

0×03 知识点

现在具体说说file=php://filter/read=convert.base64-encode/resource=index.php的含义

首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。

通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。

而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。

如果不进行base64编码传入,就会直接执行,而flag的信息在注释中,是得不到的。

我们再看一下源码中 存在对 ../ tp data input 的过滤,其实这都是php://协议中的其他方法,都可以结合文件包含漏洞执行