第一步-分析题目:

打开题目场景,如下图:

 

 这上面显示说,flag在这个/var/www/html/flag.php文件中。由此可知,这道题是文件包含题。

明确了目标,咱们在场景那个页面按下F12来看下源代码。

在做题之前咱们先了解了解COOKIE,可以把COOKIE理解为我们打开一个网站,我们属于客户端,打开一个网站就相当于我们给网站服务器发送了一个请求,然后服务器记录用户状态,颁发了一个COOKIE,然后我们更改这个COOKIE的值,再次请求。

下面直接看源代码中最重要的部分。

$lan = $_COOKIE['language'];

 这行代码说明COOKIE是可控的,$lan 由COOKIE传入;language后面的值才是COOKIE值,是我们要传入$lan 里面的内容;所以说我们把这个值给language才可以发送请求。

if(!$lan)
{
	@setcookie("language","english");
	@include("english.php");
}

!是反之的意思可以理解为不的意思,如果说咱们上传的COOKIE 不存在$lan,则这就说明我们的$lan包含在english.php文件中。

else
{
	@include($lan.".php");
}

 else反之如果说我们上传的COOKIE存在$lan,则$lan会自动拼接.php,并进行包含。

分析到这里就可以了。

第二步-工具:

用到的有Kali,burpsuite,火狐浏览器。

第三步-起飞:

先打开火狐进入到场景:

随后打开burpsuite并进入Proxy:

 

 去火狐刷新一下场景:

 

第二行send to repeater送去重放:

进入repeater重放功能:

接下来我们该构造 payload数据包了,在构造之前我们先了解了解php filter伪协议的规则,后面会用到。

php filter伪协议的规则:

php://filter/过滤器|过滤器/resource=待过滤的数据流

知道了规则后, 那我们就来构造payload数据包:

php://filter/convert.base64-encode/resource=/var/www/html/flag

 read读取,convert转换,base64,encode编码,

 resource=flag转换到flag中,就是说把flag.php文件转换为base64编码格式。

/var/www/html/flag意思是flag.php文件在var文件夹里面的www文件夹里面的html文件夹里面,可以看这篇博客最上面的第一张图片。

 因为$lan会自动拼接.php,并进行包含,所以我们不需要加.php后缀。

上传payload数据包: 

 

 点Send发送请求,拿到base64编码:

进行base64编码解码,拿到flag:

 

 补充:

 base64编码解码工具网上可以搜到的,是免费的。

Logo

一座年轻的奋斗人之城,一个温馨的开发者之家。在这里,代码改变人生,开发创造未来!

更多推荐