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

[SUCTF 2018]annonymous1

知识点:

        匿名函数创建其实有自己的名字(%00lambda_%d)

进入页面开始代码审计.

<?php  
  
// 使用 create_function 创建一个匿名函数,该函数调用 die() 函数并执行 `cat flag.php` 命令(在服务器上执行,如果PHP环境配置不当的话)。  
// 注意:`cat flag.php` 尝试读取名为 flag.php 的文件内容,这通常用于CTF(Capture The Flag)竞赛中,文件包含“flag”(即比赛的解决标志)。  
// 但直接在PHP中执行系统命令(如 `cat`)是危险的,特别是当命令来源不可控时。  
$MY = create_function("","die(`cat flag.php`);");  
  
// 生成一个随机的32字节字符串,并使用bin2hex函数将其转换为十六进制表示,用作函数名的前缀。  
$hash = bin2hex(openssl_random_pseudo_bytes(32));  
  
// 使用 eval() 函数动态地创建一个新函数,函数名为 "SUCTF_" 加上之前生成的随机哈希值。  
// 这个新函数全局调用之前创建的 $MY 匿名函数,即执行 `die(`cat flag.php`);`。  
// 使用 eval() 是非常危险的,因为它会执行任何传递给它的PHP代码。  
eval("function SUCTF_$hash(){"  
    ."global \$MY;" // 声明使用全局变量 $MY  
    ."\$MY();" // 调用 $MY 匿名函数  
    ."}");  
  
// 检查 $_GET['func_name'] 是否被设置。  
// 如果设置了,则尝试调用对应的函数。这里存在一个严重的安全问题,因为它允许远程用户通过URL参数调用任意函数。  
if(isset($_GET['func_name'])){  
    $_GET["func_name"](); // 直接调用通过URL参数指定的函数  
    die(); // 调用后终止脚本  
}  
  
// 如果没有通过URL传递func_name参数,则显示当前文件的源代码。  
show_source(__FILE__);

知识点: 当在调用执行 create_function() 创建匿名函数的时候,其实创建的函数是有名字的

格式为:%00lambda_%d ,而%d则是一个计数器会递增,用来记录create_function()这个函数执行了多少次.

所以我们可以通过调用那个匿名函数(%d=1)来实现cat flag.php的操作.

开始构造payload:

http://1168ccea-8b4f-4672-8b5d-81ce3115b007.node5.buuoj.cn:81/?func_name=%00lambda_1

开始注入.

获得flag.

当然还没有结束 ,尝试了几次%d=1后这个payload才失效,然后就尝试%d=2又成功了,之后经过我多次的尝试当%d递增到9后他又回到了%d=1,而且每次%d的变动都是经过了几次的重复才会递增,

这说明这个服务器可能是一个多进程模式,每次请求都会有一个新的php环境(有限),所以%d会递增(存在规律).

 


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

相关文章:

  • 【Python】爬虫通过验证码
  • 本地编译ChatNio的问题解决
  • 移门缓冲支架的作用与优势
  • srs http-flv处理过程
  • MIT 6.S081 Lab1: Xv6 and Unix utilities翻译
  • linux,自定义Yum仓库、网络Yum仓库、DNS服务基础
  • 移动UI:成就勋章页面该如何设计,用例子说明。
  • 大数据决策分析平台建设方案(56页PPT)
  • SpringBoot2:请求处理原理分析-RESTFUL风格接口
  • 交换机自动化备份配置(H3C_无人值守)
  • 前端小白操作指南:如何删除项目中 pre-commit 的提交限制?
  • 【机器人工具箱Robotics Toolbox开发笔记(十五)】六自由度机器人笛卡尔空间轨迹规划仿真实例
  • 过去十年中,深度学习领域经历了许多重要的算法创新和突破。以下是一些关键的深度学习算法,按照时间顺序排列:
  • ChatGPT在医疗行业的应用前景与挑战探析
  • GraphRAG入门:基本概念、应用场景及学习方法
  • 2024国赛数学建模A题B题C题D题E题思路资料模型
  • yolov5 +gui界面+单目测距 实现对图片视频摄像头的测距
  • AI基础 L1 Introduction to Artificial Intelligence
  • Prometheus + Grafana + nVisual 实现运维监控全面可视化
  • 【区块链 + 物联网】基于电子标签的区块链溯源系统 | FISCO BCOS应用案例
  • QT Android开发之Android端usb调试模式设置与问题解决
  • 分类算法可视化方法
  • 【机器学习】表示学习的基本概念和方法以及编解码结构的基本概念
  • C++设计模式之:单例模式singleton
  • HTTP 一、基础知识
  • iOS18 beta版本怎么回退至iOS17正式版本?