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博客

相关推荐
朱容君1 分钟前
Linux系统编程多线程之读写锁讲解
linux·开发语言
杰仔正在努力5 分钟前
python成长技能之枚举类
开发语言·python
Eiceblue12 分钟前
通过Python 调整Excel行高、列宽
开发语言·vscode·python·pycharm·excel
Jam-Young21 分钟前
Python中的面向对象编程,类,对象,封装,继承,多态
开发语言·python
myloveasuka22 分钟前
类与对象(1)
开发语言·c++
江梦寻32 分钟前
思科模拟器路由器配置实验
开发语言·网络·网络协议·学习·计算机网络
代码小鑫33 分钟前
A034-基于Spring Boot的供应商管理系统的设计与实现
java·开发语言·spring boot·后端·spring·毕业设计
奋飞安全1 小时前
初试js反混淆
开发语言·javascript·ecmascript
guoruijun_2012_41 小时前
fastadmin多个表crud连表操作步骤
android·java·开发语言
浪里个浪的10241 小时前
【C语言】计算3x3矩阵每行的最大值并存入第四列
c语言·开发语言·矩阵