bugku

bugku

一:web4

首先打开题目:

bugku

打开网址后按照要求点击f12查看源代码,得到

bugku

 

 

看到这些数据,可以知道这个需要解码。

但是全部复制粘贴却发现并没有什么用,再仔细看 ,最后一句把p1和p2加起来通过escape加密/UNescape解码可以得到

bugku

 

通 过得到的代码可以知道67d709b2b54aa2aa648cf6e87a7114f1把这串字符复制粘贴就能得到flag了。

bugku

 

二,flag在index里

首先打开后出现一串很熟悉的字符(php)然后根据习惯把这串字符复制放到链接后面bugku

 

得到bugku,没多大用,但是我们发现file,这里用到了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的信息在注释中,是得不到的。所以才有:

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

然后复制到链接里,得到的字符串base64解码得到index的源码:

<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就拿到了。