0


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 /var/www/html/index.php 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}

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

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

标签: php web安全

本文转载自: https://blog.csdn.net/weixin_42789937/article/details/127956777
版权归原作者 梅头脑_ 所有, 如有侵权,请联系我们删除。

“Web安全攻防世界01 fileinclude(宜兴网信办)”的评论:

还没有评论