news 2026/7/25 20:58:16

【CTF-WEB-PHP】PHP回调函数漏洞解题思路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【CTF-WEB-PHP】PHP回调函数漏洞解题思路

题目

我们有一个简单的 PHP 脚本,负责处理用户输入,并通过回调函数对数组进行操作,然而,这个脚本并未对输入进行严格的过滤。你是否能发现某些细节并利用它来深入了解更多信息?

解题过程

1. 初始访问

  • 请求网址http://challenge.qsnctf.com:34142/
  • 目的:查看页面内容,了解靶场结构
  • 结果:获取到页面展示的PHP代码

2. 代码分析

<?phpfunctionexecuteCallback($callback){$someArray=[0,1,2,3];returnarray_map($callback,$someArray);}if(isset($_GET['callback'])){$evilCallback=$_GET['callback'];$newArray=executeCallback($evilCallback);}?>
executeCallback函数详细解释

函数定义

functionexecuteCallback($callback)
  • 参数$callback- 接收一个回调函数(可以是函数名字符串、匿名函数或可调用对象)
  • 返回值:返回一个新数组,包含回调函数处理后的结果

执行流程

  1. 数组初始化$someArray = [0, 1, 2, 3];- 创建包含4个整数的数组
  2. 回调执行return array_map($callback, $someArray);使用array_map函数将回调应用到数组每个元素

array_map函数作用

  • array_map($callback, $array)是PHP内置函数,用于将回调函数应用到数组的每个元素
  • 它会遍历数组中的每个元素,将元素值作为参数传递给回调函数
  • 返回一个新数组,包含回调函数处理每个元素后的结果
  • 原数组保持不变

回调函数执行机制

  • 对于数组[0, 1, 2, 3],回调函数会被执行4次
  • 每次执行时,数组元素值会作为参数传入回调函数
  • 执行过程:
    $callback(0); $callback(1); $callback(2); $callback(3);

漏洞产生原因

  • 函数直接将外部传入的$callback参数作为回调执行,没有任何验证
  • PHP支持将内置函数名(如phpinfosystem)作为字符串传递给回调函数
  • $callback是用户可控的GET参数时,攻击者可以注入恶意函数名

与漏洞利用的关联

  • 尽管函数返回结果被赋值给$newArray,但对于有副作用的函数(如phpinfo()会直接输出内容,system()会执行系统命令),不需要获取返回值就能产生危害
  • 数组[0, 1, 2, 3]决定了回调函数的执行次数,但对于无参数函数(如phpinfo()),执行次数不影响最终结果
  • 即使$newArray没有被输出,phpinfo()等函数仍会直接向浏览器输出内容

关键漏洞点

  • $newArray = executeCallback($evilCallback);- 将用户可控的$evilCallback传入函数

  • return array_map($callback, $someArray);- 直接执行不可信的回调函数

  • 缺少对回调函数的白名单验证或类型检查

  • 发现漏洞:callbackGET参数直接作为回调函数传入executeCallback执行

  • PHP回调函数支持内置函数名,可直接注入内置函数

3. 尝试系统命令

  • 请求网址http://challenge.qsnctf.com:34142/?callback=system('ls')
  • 目的:尝试执行系统命令查看目录文件
  • 结果:连接被中止(服务器可能对系统命令做了防护)

4. 执行phpinfo函数

  • 请求网址http://challenge.qsnctf.com:34142/?callback=phpinfo
  • 目的:获取服务器环境变量和配置信息
  • 结果:成功执行,返回phpinfo()输出

5. 查找flag

  • 在phpinfo输出的Environment部分找到FLAG变量
  • flag值qsnctf{e386fff2cee0455bb7f0a2027712f47d}

漏洞原理

PHP回调函数漏洞:当用户可控参数直接作为回调函数执行时,可注入内置函数(如phpinfosystem等),从而获取服务器敏感信息或执行系统命令。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/25 20:56:18

基于YOLOv12的血液细胞检测系统开发与实践

1. 项目概述这个项目实现了一个基于YOLOv12深度学习框架的血液细胞检测系统&#xff0c;能够自动识别和分类红细胞、白细胞和血小板三种主要血细胞类型。系统采用Python开发&#xff0c;包含完整的模型训练代码、预训练权重、用户界面以及登录注册功能&#xff0c;可以直接部署…

作者头像 李华
网站建设 2026/7/25 20:55:58

如何轻松使用文件指纹技术:秒传链接提取脚本实用高效指南

如何轻松使用文件指纹技术&#xff1a;秒传链接提取脚本实用高效指南 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 还在为百度网盘分享链接频繁失效而烦恼…

作者头像 李华
网站建设 2026/7/25 20:52:28

AWS IAM 最小权限实战体系:从组策略到 OIDC 到 Permission Boundary

构建可扩展的权限管理体系:新人 5 分钟开通、权限变更可审计、零长期密钥。本文覆盖组策略设计、OIDC 免密 CI/CD、Permission Boundary 防越权三层防御。 前言 AWS 账号被攻破的头号原因不是外部入侵,而是内部权限管理混乱:AK/SK 泄露到代码仓库、过于宽泛的 *:* 权限、离…

作者头像 李华
网站建设 2026/7/25 20:51:09

高边驱动与低边驱动芯片详解【最新辨析】【详细总结】【已重构】

文章目录 前言 高边驱动与低边驱动芯片详解 一、核心概念与术语 1.1 驱动拓扑定义 1.2 关键术语 二、高边驱动 (High-Side Driver, HSD) 2.1 拓扑结构与特性 2.2 引脚定义(PowerSSO-16) 2.3 故障检测原理 2.4 关键区分:打开时开路 vs 短路到VCC 2.4 标准接线图 2.6 双ADC检测…

作者头像 李华
网站建设 2026/7/25 20:48:35

海投、精准投递和关系渠道怎么配合?|蒸汽求职分享

**摘要&#xff1a;**海投、精准投递和关系渠道解决的问题并不相同。留学生需要用一定数量的匹配申请了解市场&#xff0c;用针对性材料争取重点岗位&#xff0c;再通过职业交流理解团队需求、获得反馈和发现机会&#xff0c;并根据实际转化数据持续调整投入。 留学生求职时&am…

作者头像 李华