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

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

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

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

  • 相关阅读:
    python 求取代码运行时间
    Python中的继承、抽象基类和接口
    Python安装和环境配置,让你轻松入门学习Python!
    python入门python的基本语法
    没有对象?程序员的浪漫,对象攻略(1)
    python实现邮件循环自动发件
    docker查看全部容器命令
    python speech模块的使用方法
    开宗立派宣言
    多个 (li) 标签如何获取获取选中的里面的某个特定值
  • 原文地址:https://www.cnblogs.com/cp-miao/p/5791590.html
Copyright © 2011-2022 走看看