CTF攻防世界小白刷题自学笔记13

1.fileinclude,难度:1,方向:Web

题目来源:宜兴网信办

题目描述:无

给一下题目链接:攻防世界Web方向新手模式第16题。

打开一看给了很多提示,什么language在index.php的第九行,flag在flag.php中,但事情显然不会这么简单,果然无论是输入flag.php还是index.php都是没有用的。

遇事不决,按F12打开开发者工具,果然暗藏了一段PHP语句,

好吧,我又遇到知识盲区了,现在我又打开大佬的writeup来摆烂了,同时借助GPT来分析。

代码分析

  1. 错误显示设置:

    php

    if( !ini_get('display_errors') ) { ini_set('display_errors', 'On'); } error_reporting(E_ALL);

    • 这部分代码首先检查 PHP 配置中是否打开了错误显示。如果没有,则将其打开。接着设置错误报告级别为 E_ALL,意味着将报告所有类型的错误。
  2. 处理 Cookie:

    php

    $lan = $_COOKIE['language']; if(!$lan) { @setcookie("language","english"); @include("english.php"); } else { @include($lan.".php"); }

    • 该代码获取名为 language 的 Cookie 值。如果该值不存在,则会设置默认语言为 english 并包含 english.php 文件。
    • 如果 Cookie 已存在,则会根据 Cookie 的值包含对应的语言文件(例如 spanish.phpfrench.php 等等,具体取决于该 Cookie 的值)。
  3. 读取和输出文件内容:

    php

    $x=file_get_contents('index.php'); echo $x;

    • 这部分代码使用 file_get_contents 函数读取当前目录下的 index.php 文件的内容,并将其内容输出到页面。

潜在问题

  1. 文件包含漏洞:

    • 该代码存在潜在的文件包含漏洞 ,尤其是在 @include($lan.".php"); 行。如果 $lan 的值不是经过严格验证的,攻击者可能会利用此针对文件包含的漏洞来包含任意文件,甚至可能导致代码执行。
    • 例如,如果攻击者能够设置 Cookie 值为 ../../../../../etc/passwd(假设是个类 Unix 系统),就可能导致服务器包含一个敏感文件,进而泄露信息。
  2. 安全性问题:

    • 在使用 include 时不应该直接使用来自用户输入的数据,应该对输入进行验证和过滤,防止包含恶意文件。
    • 小心使用 @ 符号,它会抑制错误信息的输出,可能会掩盖潜在的问题,增加调试难度。
  3. 不安全的错误显示:

    • 虽然在某些情况下显示错误有助于调试,但在生产环境中开启错误显示可能会泄露敏感信息。

说人话就是利用语句中的cookie竟然敢随便接收数据,好好构造一番然后利用下方的包含语句来让flag.php文件内容显示。

php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取。

大佬原话:

在这里,read=convert.base64-encode 意味着将文件内容进行 Base64 编码,从而使文件内容变成可读的字符串。而 resource=flag 指定了要读取的文件为名为 flag 的文件(这里假设存在这个文件)。

因此,在这种情况下,如果攻击者能够成功将 cookie 的值设置为 php://filter/read=convert.base64-encode/resource=flag,那么当代码执行到 $_COOKIE['language'] 这行时,将会读取(方式:php://filter) flag 文件的内容,并对其进行 Base64 编码后输出到页面上。

这种攻击方式称为 "PHP 命令注入",并且它能够导致严重的安全问题,因此在编写代码时要进行必要的输入校验和过滤,以避免此类攻击。

说人话:构造以下的cookie

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

这样php语句

@include($lan.".php");

实际上执行的是:

php

@include("php://filter/read=convert.base64-encode/resource=flag.php");

解决过程

使用软件 Burp 对发出去的数据包进行抓取,burpsuite抓包详细操作在笔记8CTF攻防世界小白刷题自学笔记8-CSDN博客,安装详细操作在笔记5CTF攻防世界小白刷题自学笔记5-CSDN博客

解密得到 flag

利用hackbar的解码功能得到flag。hackbar的安装和使用请参考我的笔记6第二题CTF攻防世界小白刷题自学笔记6-CSDN博客

相关推荐
落羽凉笙2 分钟前
Python基础(4)| 玩转循环结构:for、while与嵌套循环全解析(附源码)
android·开发语言·python
hkNaruto2 分钟前
【AI】AI学习笔记:关于嵌入模型的切片大小,实际的业务系统中如何选择
人工智能·笔记·学习
ytttr8735 分钟前
MATLAB的流体动力学与热传导模拟仿真实现
开发语言·matlab
山上三树7 分钟前
详细介绍 C 语言中的 #define 宏定义
c语言·开发语言·算法
测试游记16 分钟前
基于 FastGPT 的 LangChain.js + RAG 系统实现
开发语言·前端·javascript·langchain·ecmascript
小罗和阿泽19 分钟前
java 【多线程基础 三】
java·开发语言
ulias21219 分钟前
AVL树的实现
开发语言·数据结构·c++·windows
想你依然心痛21 分钟前
从x86到ARM的HPC之旅:鲲鹏开发工具链(编译器+数学库+MPI)上手与实战
java·开发语言·arm开发·鲲鹏·昇腾
967724 分钟前
python基础自学
开发语言·windows·python
我的golang之路果然有问题24 分钟前
积累的 java 找工作资源
java·笔记