-
-
[原创]利用php新特性过静态查杀
-
发表于:
2020-3-1 13:03
3831
-
由于前两天发在了我的博客上,因此马可能已经被杀了,重要的是思路而已。
最近在研究webshell免杀,抽出心得的一个新颖的点。原因是突然想到既然php7.1不能利用可变函数的assert,那就利用php7的新特性来绕过查杀正则,最终绕过某盾和“某d0g”。
实验环境在7.1.9,所有马儿在php7以下的环境均不能使用。
D盾规则库(最新):20191227
某d0g(apache版本)因为可能会因为用其产品测试,导致侵权行为,为了防止被举报所以就不放图了。
首先以下代码
直接误报了。
因此,直接传参到eval里面是不现实的。
所以接下来我们要利用函数,配合php新特性来绕过它。
而对于某d0g,只要以下代码
就会让其误报。
因此在写免杀马的时候,post中的变量,不要出现在eval中的字符串中。就像上面b
一样,尽管他在eval
中是以变量的形式出现的。
有了这个基础就可以进入正题了
php手册-php7.0.x新特性
php7增加了返回值类型声明的支持,在定义函数时增加一个 :类型
便可以了。
例如:
就是函数返回值类型要为int。否则会强制转换或者显示语法错误。
如果未更新此特性的查杀软件,就会不认识此函数,导致被绕过。
例如:
可以用查杀软件测试一下。
发现没有被检测到。
可以使用。
由于日常使用中存在大量同时使用三元表达式和 isset()
的情况, 添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL
, 它就会返回自身的值,否则返回它的第二个操作数
简单来说:
如果运用 ??
符号,查杀软件不会理解着个处理过程 ,可能就会导致绕过。
就像以下代码就可以绕过某d0g
再利用函数调用一下
可以发现已经过了D盾
测试一下可用性
接下来看看7.1的特性吧
php手册-php7.0.x新特性
比7.1的特性多了个 ?
函数返回值若不是给定类型,则为空。
使用同样的代码:
不出意外
过了D盾
这里选用中括号 []类型
的列表来演示。
这样,就把数组的值分别赋给了$c
,$d
.$c='a';$d='b';
这样,就可以用这个少用的特性,来绕过静态查杀
首先写一个最简单的:
然后就过了某d0g。自行测试。
之后就可以配合函数。就像这样:
查杀一下
测试可用性
这个很绕,看一下例子也许就会明白了。
eg:
稍微改改就能过某d0g(自行测试):
试试D盾
报了一级
再次借助自定义函数。
成功过D,测试可用性。
官方说明:
这个在小于7.1版本中,负的偏移量返回空字串。
eg:
7.1.x中返回 s
,但是以前的版本中 返回 string(0) ""
思路:
我们可以这个拆分字符串,使规则识别不出来。最后再配合php的可变变量:
这样就可以过某d0g了。但是对于D盾来说,会识别拼接字符,和可变变量。报一级可疑文件
,不得不说这点做的确实很好。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-3-1 13:04
被孑狱天编辑
,原因: