当前位置: 首页 > article >正文

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


http://www.kler.cn/a/394175.html

相关文章:

  • HarmonyOS的@State装饰器的底层实现
  • 微服务(二)
  • 相机光学(四十二)——sony的HDR技术
  • 【STM32F1】——无线收发模块RF200与串口通信
  • 性能优化、安全
  • AutoCad 无界面开发
  • Mybatis中批量插入foreach优化
  • Jmeter基础篇(22)服务器性能监测工具Nmon的使用
  • zookeeper之节点基本操作
  • Spark 读取 HDFS 文件时 RDD 分区数的确定原理与源码分析
  • ubuntu[无桌面]——使用FileZilla连接本地和虚拟机实现文件共享
  • AI数字人短视频生成--核心源头技术开发
  • StarRocks Summit Asia 2024 全部议程公布!
  • [pyspark] pyspark中如何修改列名字
  • 【机器学习】如何配置anaconda环境(无脑版)
  • 前端(2)——快速入门CSS
  • 证明在无三角形且最大度数为d的图中,随机染色下每个顶点的平均可用颜色数至少为d/3
  • 认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
  • 华为云分布式缓存服务(DCS)专家深度解析Valkey,助力openEuler峰会
  • zabbix搭建钉钉告警流程
  • 第21课-C++[set和map学习和使用]
  • 【matlab】数据类型01-数值型变量(整数、浮点数、复数、二进制和十六进制)
  • PostgreSQL 逻辑复制
  • 前端三大组件之CSS,三大选择器,游戏网页仿写
  • 编程之路,从0开始:知识补充篇
  • Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版