zoukankan      html  css  js  c++  java
  • zabbix注入过程分析

    Zabbix jsrpc.php sql 注入过程分析

        漏洞公开详情(https://support.zabbix.com/browse/ZBX-11023)中提示在insertDB() 中的insert方式存在SQL注入漏洞,如下图:

        

        我们来逐步分析下

        直接定位到cprofile:flush()函数所在的文件cprofile.php,代码如下。

        

        在inserDB方法中。直接将self::$insert里的数组进行拆分遍历后放入了insert 语句中进行拼接。我们学过那么多的sql注入课程后,很快就能判断,如果在$insert值可控,那么我们就能在此处构造出sql注入

        

        我们搜索下,调用了flush静态方法的有哪些文件:

        

        看看page_footer.php这个文件吧。

        

        现在要想进入到CProfile::flush()函数,还必须满足前提条件是CProfile::isModified()函数为真,再次回到CProfile.php文件,经过仔细分析,我们可以看到,当CProfile.php中的self::$insert 不为空,才可以正确走向我们预定的流程中,CProfile.php中的CProfile::update函数会将self::$insert进行赋值,搜索源码后,很多地方调用了CProfile::update,为此我们只要挑出可以被guest权限访问的即可。在Include/classes/screens/CScreenBase.php中如下代码

        

    的calculateTime 函数中有调用。并且没有对$options进行过滤。对此我们需要顺藤摸瓜,构造出相应的参数来进行注入 。

        

        

        接着,我们回到jsrpc.php可以看到如何调用到CScreenBase

        在

        

    中调用了CScreenBuilder::getScreen函数

        

        当CScreenBuilder 中 

        接着

        

        最终,我们可以构造出一条完成的调用链

        如下所示:

        Jsrpc.php->CScreenBuild.php : getScreen -> CScreenHistory -> CScreenBase

        当我们的参数可以使得程序按我们所需的流程进行走下去的话,必定会产生注入。

        理解了上述过程然后开始下面的实验

        按照上述注入分析,构造出注入语句以及参数。

  • 相关阅读:
    【BZOJ2879】【NOI2012】美食节(费用流)
    HN2018省队集训
    【HDU5421】Victor and String(回文树)
    【BZOJ2878】【NOI2012】迷失游乐园(动态规划)
    【BZOJ5338】[TJOI2018]异或(主席树)
    【BZOJ2432】【NOI2011】兔农(数论,矩阵快速幂)
    【BZOJ2436】【NOI2011】NOI嘉年华(动态规划)
    【BZOJ2437】【NOI2011】兔兔与蛋蛋(博弈论,二分图匹配)
    【BZOJ2109/2535】【NOI2010】航空管制(贪心)
    【BZOJ1565】【NOI2009】植物大战僵尸(网络流)
  • 原文地址:https://www.cnblogs.com/cp-miao/p/5791590.html
Copyright © 2011-2022 走看看