第一步-分析题目:
打开题目场景,如下图:
这上面显示说,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编码解码工具网上可以搜到的,是免费的。
最后如果想要了解更多,请关注我CSDN:m0_73734159