剖析php大马,WebShell 剖析与变形

在测试中经常说到要传马 , 这里的马就是指 WebShell . 一般马被分为小马和大马 , 按功能的强弱划分 . 最常用的 WebShell 就是一句话木马 . 这里从 PHP的WebShell 入手 , 来看一下这些 WebShell 是如何执行 , 如何变形的

文章内容可能比较多 , 但是耐心看完后你定会有收获

最基本的WebShell结构

下面是非常经典的一句话木马

其实每个 WebShell 都具备这个结构 , 即

1. 数据的传递( 通过 HTTP方法 实现 )

2. 数据的执行( 通过eval() , assert() 等函数实现 )

总结的逻辑为 : WebShell 通过HTTP方法接收攻击者的信息指令 , 然后调用PHP中可以执行代码的函数来执行

数据传递 && 绕过检测

在传递数据上 , 最常用的做法是

1. $_GET

2. $_POST

3. $_SERVER

4. $_COOKIE

通过上面这些HTTP方法可以直接获取控制端的数据 , 但是如果这类关键词直接出现的话 , 很容易会被检测到 , 下面有一些可能的绕过方法

利用应用本身所在框架的输入封装来得到传递的数据

采取某种变通的方式来绕过检测 , 比如通过 ${"_G" . "ET"} 这类特殊写法 , 但是这类变换依旧可以被检测到 , 比如跟踪 $( . 当然这种跟踪又可以被 $/*xxx*/ 这种方式绕过 . 总之这是一个斗智斗勇的过程

使用其他的数据获取方式来获取数据 , 比如使用 $_REQUEST , $GLOBALS['_GET'] , $_FILE

人为构造语言缺陷或者应用漏洞 . 这种攻击方式是不易被察觉的 . 比如伪造管理员 Session 等

数据执行 && 绕过检测

在数据执行上 , 通常使用的函数方法如下

1. eval()

2. create_function

3. exec()

4. preg_replace

5. ... ...

上面这些函数关键词是敏感的 , 很多自动化的webshell检测脚本都能识别它们 . 所以必须对它们加以改造

通过 $a{} 这种方式来执行函数 . 当然现在大部分扫描器都已经内置了 $. 这种跟踪规则 . 不过可以通过 $a/*a*/{} 来绕过它们 . 这又是一个斗智斗勇的过程

尝试使用不在跟踪规则黑名单中的函数 , 或者使用极其罕见的函数

WAF

作为一名安全研究人员 , WAF是常常被提到的 . 这是一种防御机制 . 我下面将要提到的各种WebShell的变形就是为了绕过它的 . 如果你的WebShell太明显 , 那么就会被 WAF 抓住

通过对 WebShell 进行伪装变形 , 使其绕过 WAF 的检测 , 同时又保留其原来的功能 . 这就是我们常说的 免杀 , 过狗 , 过盾

要想绕过 WAF , 那么就需要知道 WAF 是如何工作的

黑名单匹配检测

WAF中存在一个有很多 WebShell 样本的特征库 , 用于代码是否存在相应特征 . 同时 WAF 又有一套禁用规则 , 会禁用那些比较危险 , 容易利用的函数关键字**

机器学习检测

通过机器学习的方式检测 WebShell 近几年已经开始发展 , 但是还不够成熟

总之 , 选择的 WAF 大多还是基于 黑名单匹配检测 的 , 所以理论上都存在被绕过的可能

下面就进入到本文的重点 : WebShell 的变形技术

本文以 PHP 为例 , 讲解那些常用的绕过方法

目前的防护软件会对 能够执行命令的函数 和 能够执行代码的函数 额外的敏感 , 比如下列函数

1. eval()

2. assert()

3. system()

4. popen()

5. shell_exec()

6. ... ...

想比较简单的 eval($_POST[cmd]) 肯定会被现在的WAF查杀 . 所以变形技术的本质在于 : 隐藏敏感函数

巧用$GPC

$GPC , 即通过 $_GET , $_POST , $_COOKIE 获取数据

利用 $_GLOBALS

@eval($GLOBALS['_POST']['cmd']); , 很多防护软件都只会检查$_POST , 像比如$GLOBALS 可以绕过检测

利用 $_FILES

@eval($_FILES[cmd]); , 这个同 $GLOBALS , 很多防护软件没有对 $_FILES 进行检测

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值