5.攻防世界 fileinclude

进入题目页面如下

提示flag在flag.php

ctrl+u,查看源码

给出了一段PHP代码,进行代码审计

php 复制代码
<?php
// 检查是否开启了错误显示功能
if( !ini_get('display_errors') ) {
    // 如果没有开启,则将错误显示功能设置为开启状态
    ini_set('display_errors', 'On');
}

// 设置错误报告级别为显示所有类型的错误
error_reporting(E_ALL);

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

// 检查 $lan 是否为空
if(!$lan) {
    // 如果为空,设置一个名为 'language' 的 Cookie,值为 'english'
    @setcookie("language","english");
    // 包含名为 'english.php' 的文件
    @include("english.php");
} else {
    // 如果不为空,将 $lan 的值加上 '.php' 后缀后,包含对应的文件
    @include($lan.".php");
}

// 读取当前文件 'index.php' 的内容,并将其赋值给变量 $x
$x = file_get_contents('index.php');

// 输出变量 $x 的内容,即显示当前文件的源代码
echo $x;
文件包含漏洞

代码中使用 include 函数包含文件,而 $lan 变量的值直接取自用户的 Cookie。可以通过修改 Cookie 中的 language 值,来包含任意文件,从而导致文件包含漏洞。

代码没有对 $lan 变量的值进行任何验证和过滤,可以构造特殊的文件名来绕过正常的文件包含逻辑,执行恶意代码或获取敏感信息。

修改 Cookie 中的 language 值为 flag。当请求该页面时,服务器会尝试包含 flag.php 文件,从而将 flag 的内容输出到页面上

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

利用 PHP 伪协议来绕过常规的文件包含限制并获取敏感文件

使用 php://filter 伪协议对文件内容进行 Base64 编码后输出,避免因文件内容格式问题(如二进制文件)导致显示异常,同时绕过部分简单的过滤机制。

read=convert.base64-encode

php://filter 伪协议的一个过滤器,指定了读取文件内容时要进行的操作。convert.base64-encode 表示将文件内容进行 Base64 编码,文件内容就会以 Base64 字符串的形式输出,方便在网页上显示和后续解码。

resourcephp://filter 伪协议中用于指定要操作的文件资源的参数

用burp suite抓包,修改cookie

得到base64编码的flag可以利用下面这个在线工具解码

Base64解码 Base64编码 UTF8 GB2312 UTF16 GBK 二进制 十六进制 解密 - The X 在线工具

最终得到flag

cyberpeace{94027b50fe68bcb6ff13855e5cb60024}

相关推荐
数据与人工智能律师8 分钟前
数字迷雾中的安全锚点:解码匿名化与假名化的法律边界与商业价值
大数据·网络·人工智能·云计算·区块链
先知后行。17 分钟前
网络协议HTTP、TCP(草稿)
网络·网络协议
xzkyd outpaper23 分钟前
QUIC协议如何在UDP基础上解决网络切换问题
网络·计算机网络·udp·quic
终焉暴龙王31 分钟前
CTFHub web进阶 php Bypass disable_function通关攻略
开发语言·安全·web安全·php
碳酸的唐1 小时前
Inception网络架构:深度学习视觉模型的里程碑
网络·深度学习·架构
Jewel Q1 小时前
VRRP技术
网络·智能路由器
van叶~2 小时前
Linux网络-------1.socket编程基础---(TCP-socket)
linux·网络·tcp/ip
百川2 小时前
Apache文件解析漏洞
web安全·apache
两圆相切3 小时前
ICMPv4报文类型详解表
网络·智能路由器
zhezhi5013 小时前
OSPF多区域介绍
网络·ospf多区域