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

[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会递增(存在规律).

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • FFmpeg源码:avcodec_descriptor_get函数分析
  • 三维重建实战:3D Gaussian Splatting
  • 数学建模强化宝典(14)Fisher 最优分割法
  • 鲁棒优化 形象讲解 和库存管理鲁棒优化、生产线调度鲁棒优化、电力市场鲁棒优化、 物流优化鲁棒优化
  • 每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积
  • 小散想在a股量化交易,怎么解决下单api问题
  • golang panic
  • 828华为云征文|部署RedisStack+可视化操作
  • springboot websocket 服务端
  • 计算机毕业设计Spark+PyTorch知识图谱房源推荐系统 房价预测系统 房源数据分析 房源可视化 房源大数据大屏 大数据毕业设计 机器学习
  • 借助ChatGPT高效撰写优质论文的7大要素
  • 使用SQL语句查询MySQL数据表
  • ArcGIS出图格网小数位数设置
  • 仕考网:事业编考试考什么?
  • git or vscode-电脑电源断或者蓝屏-重启运行项目git报错-git : bad signnature 300000
  • [笔记] php常见简单功能及函数
  • 2017-09-12 前端日报
  • Android框架之Volley
  • egg(89)--egg之redis的发布和订阅
  • passportjs 源码分析
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • TypeScript迭代器
  • vue脚手架vue-cli
  • 利用DataURL技术在网页上显示图片
  • 七牛云假注销小指南
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 实战|智能家居行业移动应用性能分析
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • python最赚钱的4个方向,你最心动的是哪个?
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #每天一道面试题# 什么是MySQL的回表查询
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (苍穹外卖)day03菜品管理
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (六)Flink 窗口计算
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)WLAN定义和基本架构转
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • . NET自动找可写目录
  • ./configure,make,make install的作用(转)
  • .bashrc在哪里,alias妙用
  • .gitignore
  • .NET : 在VS2008中计算代码度量值
  • .Net Core 生成管理员权限的应用程序
  • .NET MVC之AOP
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @property python知乎_Python3基础之:property
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术