fileinclude解题流程

本题是一个文件包含漏洞的题。

进入网站可以看到下面有它的源码,下面来分析一下

<?php
if( !ini_get('display_errors') ) {
  ini_set('display_errors', 'On'); // 设置错误信息显示
  }
error_reporting(E_ALL);
$lan = $_COOKIE['language']; // 获取报文的cookie值,cookie叫做language,并把值赋给lan
if(!$lan)// 如果lan不为0就执行下面的代码
{
	@setcookie("language","english");// 发送键值对为language=english的cookie
	@include("english.php");//包含文件english.php
}
else//反之,包含$lan.php的文件
{
	@include($lan.".php");
}
$x=file_get_contents('index.php');//获取index.php的内容,并赋值给x
echo $x;//输出index.php的内容
?>

所以,要想得到flag就需要找到flag.php文件,也就是满足第二个判定条件,而这里存在文件包含漏洞。

下面需要使用brupsuite进行抓包,看看包里是否含有cookie。

可以看到包中不含有cookie,这就需要我们自己设置cookie值。将包转发到repeater中,设置一个cookie。

cookie的名字为language

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

php://是PHP伪协议用于访问输入/输出流

php://filter用于读取源码,其有四个参数

参数描述
resource=<要过滤的数据流>必须项。它指定了你要筛选过滤的数据流。
read=<读链的过滤器>该参数可选。可以设定一个或多个过滤器名称,以 管道符(|)分隔。
write=<写链的筛选列表>该参数可选。可以设定一个或多个过滤器名称,以 管道符(|)分隔。
<;两个链的过滤器>任何没有以 read= 或 write= 作前缀的筛选器列表会视情况应用于读或写链。

convert.base64-encode/convert.base64-decode是转换过滤器属于read的参数,相当于base64_encode()和 base64_decode(),作用是base64 编码解码。

参考官方文件:PHP: php:// - Manual

 

添加好cookie就可以发送了

这一串就是经过base64编码过的flag,复制下来到decoder模块进行解密就能得到flag了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值