【攻防世界】CTF 网络安全学习180天 之 fileinclude NO.GFSJ1007


作者:冰耿
作者其他详细专栏
CTF系统学习专栏https://blog.csdn.net/bing_geng/category_12496105.html
Python爬虫学习专栏https://blog.csdn.net/bing_geng/category_12494819.html

*前言: 如果有疑问或者错误欢迎在评论区或私信交流!!

一. 题目界面

进入链接如下所示,大概意思是语言的页面没有定义
在这里插入图片描述
然后查看源代码,发现源代码中有隐藏的代码,里面是一段php代码段,下面来详细解释这段代码的意思
在这里插入图片描述

二. 本人思路

  1. 首页的隐藏php源代码含义
    这段 PHP 代码是一个简单的文件包含和语言设置的示例。
<!--?php
if( !ini_get('display_errors') ) {
  ini_set('display_errors', 'On');
  }
//这段代码检查 display_errors 配置项是否已经打开,如果没有,则尝试设置为打开。display_errors 用于控制是否在页面上显示 PHP 错误。

error_reporting(E_ALL);
//设置 PHP 错误报告级别为显示所有错误。

$lan = $_COOKIE['language'];
//从用户的 Cookie 中获取名为 language 的值,并将其赋给变量 $lan

if(!$lan)
{
	@setcookie("language","english");
	@include("english.php");
}
//如果 $lan 为空(即用户没有选择语言),则设置一个名为 language 的 Cookie 值为 "english",然后尝试包含 english.php 文件。

else
{
	@include($lan.".php");
}
//如果 $lan 不为空,尝试包含与 $lan 变量值对应的语言文件,文件名为 $lan . ".php"

$x=file_get_contents('index.php');
//使用 file_get_contents 函数获取 index.php 文件的内容,并将其赋给变量 $x

echo $x;
//将变量 $x 的内容输出到页面上
?-->

根据提供的 PHP 代码,当 language Cookie 的值为 “flag” 时,代码会尝试包含 flag.php 文件。如果 flag.php 存在并且可读,那么它的内容将被获取并存储在变量 $x 中。接着,代码会继续执行 file_get_contents(‘index.php’),获取并输出 index.php 文件的内容。因此,如果 flag.php 存在且可读,最终的输出将包括 flag.php 的内容和 index.php 的内容。但是把cookie设置为flag后,能响应,但什么都没有返回。下面是怎么在浏览器设置cookie 让language=flag,在F12 控制台输入下面的命令回车即可

// 设置 Cookie
function setCookie(name, value, days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

// 调用示例
setCookie("language", "chinese", 7);  // 设置名为 "language" 的 Cookie,值为 "chinese",过期时间为 7
  1. php://filter/read=convert.base64-encode/resource=flag
    是 PHP 中的一种协议封装(Wrapper),用于读取指定文件并进行 Base64 编码。它是一种利用 PHP 的过滤器(Filter)功能的方法。
php://filter/: 这是 PHP 的流过滤器协议,允许对数据流进行过滤。
read=convert.base64-encode: 这是过滤器的设置,指定了要应用的过滤器类型,其中 convert.base64-encode 表示将数据转换为 Base64 编码。
resource=flag: 这是指定要读取的文件路径或资源,其中 flag 是文件的名称。

所以,整个命令的作用是读取名为 flag 的文件内容,然后将其以 Base64 编码的形式输出。这种技术常常被用于绕过一些安全限制,通过读取敏感文件并进行编码,然后将编码后的结果传递给攻击者。
其他类似命令
例如读取文件:php://filter/read=convert.base64-encode/resource=index.php

读取上级目录文件:php://filter/read=convert.base64-encode/resource=…/…/…/a.txt

读取其他的文件:php://filter/read=convert.base64-encode/resource=F:\b.txt

所以设置cookie,把language设置成php://filter/read=convert.base64-encode/resource=flag,即可得到flag(要拿去base64解密)

三. 总结

  1. 考查了对cookie的设置使用,对php的进一步深入学习
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值