欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

揭露秒杀趋势科技多款产品的RCE漏洞破绽bug

来源:本站整理 作者:佚名 时间:2017-10-11 TAG: 我要投稿

框架的网安性曾经愈来愈惹起网安职员的存眷,比方Apache Struts案例中因为框架内繁多漏洞破绽bug所激发的网安打击想必人人早有耳闻。假如从产物供应商的角度来斟酌这类危险的话,咱们也能找到异常类似的情况。在本文中,我将向您展现若安在分歧的趋向科技产物长途履行代码,因为这些分歧产物都利用了雷同的代码库。
一个漏洞破绽bug通杀所有产物——趋向科技产物的Widget
大多数趋向科技的产物都为管理员网页供给了响应的widget。固然焦点体系是经由过程Java/.NET编写的,然则这个widget机制倒是用PHP完成的。这就意味着,每当利用widget时,响应的产物中必需植入PHP解释器。这对付攻击者来讲,的确就是一个完美的情况:因为各类分歧的产物中含有雷同的代码库,以是一旦从中发明了漏洞破绽bug,就能够或许顺遂搞定所有的产物。
因为下面提到的缘故原由,我对趋向科技OfficeScan产物的widget体系停止了一次代码考核。此次审计的成果一方面是异常风趣的,同时对我来讲也是可怜的,因为固然找到了6个分歧的漏洞破绽bug,但只要2个是0day。
在深刻懂得该漏洞破绽bug以前,我想先分享一下这个widget库的事情道理。
从头开端
这个widget框架有一个署理机制。简而言之,咱们有一个proxy_controller.php端点,它会接管用户供给的参数,而后依据用户的输出来挪用相干的类。
widget的范例紧张有两种:用户天生的widget和默许的widget。以下源代码取自proxy_controller.php文件。 
    if(!isset($g_GetPost)){
        $g_GetPost = array_merge($_GET,$_POST);
    }else{
        $g_GetPost = array_merge($g_GetPost,$_GET,$_POST);
    }
    // ... CODE OMIT ...
    $server_module = $g_GetPost['module'];
    $isDirectoryTraversal = WF::getSecurityFactory()->getSanitize()->isDirectoryTraversal($server_module);
    if(true === $isDirectoryTraversal){
        mydebug_log("Bad guy come in!!");
        proxy_error(WF_PROXY_ERR_INIT_INVALID_MODULE, WF_PROXY_ERR_INIT_INVALID_MODULE_MSG);
    }
    $intUserGeneratedInfoOfWidget = (array_key_exists('userGenerated', $g_GetPost)) ? $g_GetPost['userGenerated'] : 0;
    if($intUserGeneratedInfoOfWidget == 1){
        $strProxyDir = USER_GENERATED_PROXY_DIR;
    }else{
        $strProxyDir = PROXY_DIR;
    }
    $myproxy_file = $strProxyDir . "/" . $server_module . "/Proxy.php";
    //null byte injection prevents
    if( is_string( $myproxy_file ) ) {
        $myproxy_file = str_replace( "\0", '', $myproxy_file );
    }
                
    // does file exist?
    if(file_exists($myproxy_file)){
        include ($myproxy_file);
    }else{
        proxy_error(WF_PROXY_ERR_INIT_INVALID_MODULE, WF_PROXY_ERR_INIT_INVALID_MODULE_MSG);
    }
    // does class exist?
    if(! class_exists("WFProxy")){
        proxy_error(WF_PROXY_ERR_INIT_MODULE_ERROR, WF_PROXY_ERR_INIT_MODULE_ERROR_MSG);
    }
    // ... CODE OMIT ...
    $request = new WFProxy($g_GetPost, $wfconf_dbconfig);
    $request->proxy_exec();
    $request->proxy_output();
上述代码块将分离履行以下操纵。
1. 归并GET和POST参数,而后将它们存储到$ g_GetPost变量中。
2. 验证$ g_GetPost ['module']变量。
3. 而后经由过程检测$ g_GetPost ['userGenerated']参数来确定能否哀求由用户天生的窗口widget。
4. 包括所需的php类。
5. 作为末了一步,创立一个WFProxy实例,而后挪用proxy_exec()和proxy_output()办法。
基本上,咱们会有多个WFProxy完成,而具体援用哪个WFProxy完成则是由来自客户端的值所决定的。
好了,有了下面的常识做铺垫,接下来就能够或许深刻探究我发明的各类技能细节了,因为所有这些内容,都是对于若何利用分歧的类来通报参数的。
漏洞破绽bug#1——认证敕令注入
以下代码取自modTMCSS的WFProxy完成。 
          public function proxy_exec()
    {
      // localhost, directly launch report.php
      if ($this->cgiArgs['serverid'] == '1')
      {
              if($this->cgiArgs['type'] == "WR"){
                  $cmd = "php ../php/lwcs_report.php ";

[1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载