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

ctf Mark loves cat (超详细记录)

分析:首先根据问题名称看不出明显的考点方向,先看了一下源代码,没有flag相关内容

我后面就去尝试sql注入方向,但是试了几个参数发现得到的回显都是一致的,全是主页,显然是做了错误重定向,那我就怀疑这里不是sql注入了

也没有发现隐藏的接口

然后简单拼接一下index.php,探测出是一个php站点

然后做一下目录扫描

先用御剑扫了一下,扫到不少200的,但是他这里做了错误重定向,扫出来的那些去访问还是主页

使用dirserach 单独扫描php后缀没结果,全量扫描才扫描出了一个git目录,所以本题应该是git源码泄露相关

往后就比较有意思了,用githack把对应的泄露git路径的源码pull下来,之后就是代码审计。

Tips:这个githack下载之后还是需要做一些配置的,建议百度一下

扫描之后会生成对应域名的文件夹,里面是pull的源码

代码的问题是变量覆盖

这里最难的语法点是$$符号的含义,明白了这个就能解决问题了,这也是变量覆盖的原因

在PHP中,$$x = $y; 这种语法结构使用了两个美元符号($$),这被称为可变变量(variable variables)。它允许你将一个变量的值作为另一个变量的名称。

具体来说,$$x = $y; 这行代码做了以下几件事:

  1. 首先,它解析了变量$x的值。假设$x的值是字符串"foo",那么$$x就等价于$foo
  2. 然后,它将$y的值赋给这个由$x的值确定的变量名(在这个例子中是$foo)。换句话说,如果$y的值是"bar",那么执行这行代码后,$foo的值就会是"bar"

看到这你就明白了,问题就出在这里,两个$符号会导致用户传递的参数会变为一个新的变量,也就是用户可以决定服务端创建的参数名称,那么我就可以去构造一个服务端已有的参数从而造成变量覆盖。

这题变量覆盖的方法有好几种,我来解释个简单的

要想输出flag,可以通过get方法提交参数,只要不满足条件的if条件,不exit退出,即可输出flag,所以就是要绕过条件判断,

或者exit退出,在退出之前输出flag,也就是想办法让exit里面的参数变成$flag即可

分析思路图如下:

poc: ?yds=flag

拿到flag

flag{9810ce7c-c9e8-4dbe-90e2-de8f241ef3f9}


http://www.kler.cn/news/304139.html

相关文章:

  • Redis缓存和Mysql数据一致性问题
  • Mybatis接受查询结果的情况
  • 使用 @NotEmpty、@NotBlank、@NotNull 注解进行参数校验
  • 多线程爬虫接入代理IP:高效数据抓取的秘诀
  • 工具包(Commons-io)工具包(hutool)
  • flink中disableOperatorChaining() 的详解
  • R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用
  • 理解大型语言模型(LLM)中的隐藏层
  • 【Hot100】LeetCode—198. 打家劫舍
  • 解决缺少genconfig
  • Rust 变量基础知识
  • Linux:命令行参数
  • DX-5009N 10G交换机 SFP接口+猫棒 代替运营商光猫 【注册状态O5但是无法PPPoe拨号踩坑——交换机VLAN配置】
  • Leetcode面试经典150题-69.X的平方根
  • AI教你学Python 第4天:函数和模块
  • 【HTML】可展开的顶层菜单栏
  • 拳皇97确反笔记
  • Go语言现代web开发08 if和switch分支语句
  • Spring Boot Admin集成与自定义监控告警
  • 【C++ 高频面试题】指针和引用、关于内存泄漏和野指针问题
  • 云服务器中的MinIO 配置 HTTPS 过程(图文)
  • 基于微信小程序+Java+SSM+Vue+MySQL的药店管理系统
  • Iceberg与SparkSQL查询操作整合
  • JS设计模式之适配器模式:接口天然的“翻译官”
  • 【物联网技术大作业】设计一个智能家居的应用场景
  • [项目][WebServer][项目介绍及知识铺垫][下]详细讲解
  • Java项目: 基于SpringBoot+mybatis+maven美发门店管理系统(含源码+数据库+毕业论文)
  • 【HTTP】URL的基本概念和构成
  • Unity Lua方向的面试真题详解
  • 阿里巴巴商品详情API返回值:电商精准营销的关键