欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞

程序员文章站 2022-03-25 11:15:47
...

1.1漏洞原因
1.1.1漏洞描述
CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞

图9 CVE-2018-6376
漏洞被描述为:在Joomla!在3.8.4之前,SQL语句中缺少类型转换导致Hathor postinstall消息中的SQL注入漏洞。
为了预防SQL注入攻击,而将输入到应用程序中的某些数据进行了“转义(escape)”,但是这些数据却又在“未被转义(Unescaped)”的查询窗体中重复使用。此时,攻击者可能注入的是一个PAYLOAD,这样就会构成一个SQL查询语句并被执行; 当用户可控数据以不安全的方式合并到数据库SQL查询中时,会出现SQL注入漏洞。攻击者可以提供精心设计的输入,以突破其输入出现的数据上下文,并干扰周围查询的结构。通常可以通过SQL注入提供各种破坏性攻击,包括读取或修改关键应用程序数据,干扰应用程序逻辑,升级数据库中的权限以及控制数据库服务器。当用户提供的数据由应用程序存储并随后以不安全的方式并入SQL查询时,就会出现二阶SQL注入。要检测漏洞,通常需要在一个位置提交合适的数据,然后使用一些以不安全的方式处理数据的其他应用程序功能。
这就是所谓的二阶SQL注入;通过Joomla中二阶SQL注入的例子来更进一步的理解[CVE-2018-6376]。
危害:可将低权限用户(Manager)提升为更高的的用户权限(Administrator或Super Administrator)。

1.1.2 漏洞代码分析
payload出库
SQL注入位于文件中administrator/templates/hathor/postinstall/hathormessage.php以下代码摘要显示了此漏洞。这是joomla自带的一套模板。
/**

  • Checks if hathor is the default backend template or currently used as default style.

  • If yes we want to show a message and action button.

  • @return bool

  • @since 3.7
    */
    function hathormessage_postinstall_condition()
    {
    $db = JFactory::getDbo();
    $user = JFactory::getUser();
    $globalTemplate = ‘n/a’;
    $template = ‘n/a’;

    // We can only do that if you have edit permissions in com_templates
    /省略/

    // Get the current user admin style
    $adminstyle = u s e r − > g e t P a r a m ( ′ a d m i n s t y l e ′ , ′ ′ ) ; ( 该 行 说 明 主 要 是 从 ‘ a d m i n s t y l e ’ 参 数 获 取 用 户 的 输 入 值 , 并 传 递 ‘ a d m i n s t y l e ’ 变 量 。 ) i f ( user->getParam('admin_style', ''); (该行说明主要是从‘admin_style’参数获取用户的输入值, 并传递‘adminstyle’变量。) if ( user>getParam(adminstyle,);adminstyleadminstyleif(adminstyle != ‘’)
    {
    $query = d b − > g e t Q u e r y ( t r u e ) − > s e l e c t ( ′ t e m p l a t e ′ ) − > f r o m ( db->getQuery(true) ->select('template') ->from( db>getQuery(true)>select(template)>from(db->quoteName(’#__template_styles’))
    ->where($db->quoteName(‘id’) . ’ = ’ . a d m i n s t y l e [ 0 ] ) ( 该 行 代 码 显 示 : 代 码 直 接 使 用 用 户 提 供 的 输 入 来 构 建 S Q L 查 询 。 将 此 处 看 成 是 一 个 数 组 , 因 此 索 引 值 为 0 的 存 储 值 将 被 用 于 构 造 查 询 。 正 因 此 在 错 误 信 息 中 , 只 能 看 到 第 一 字 符 ) − > w h e r e ( adminstyle[0]) (该行代码显示:代码直接使用用户提供的输入来构建SQL查询。将此处看成是一个数组,因此索引值为0的存储值将被用于构造查询。正因此在错误信息中,只能看到第一字符) ->where( adminstyle[0])使SQL0>where(db->quoteName(‘client_id’) . ’ = 1’);

     // Get the template name associated to the admin style
     $template = $db->setquery($query)->loadResult();
    

    }
    }
    函数的功能为检查当前后台的模板是否为hathor。每次进入后台的时候这个函数都会被调用。漏洞出现的原因就是在获取到 a d m i n s t y l e 之 后 , 没 有 对 其 进 行 类 型 强 转 或 者 过 滤 等 操 作 , 而 是 用 了 admin_style之后,没有对其进行类型强转或者过滤等操作,而是用了 adminstyleadmin_style[0]这种操作,导致了漏洞的出现。

1.2 漏洞复现过程
访问
http://localhost/Joomla_3.8.3/administrator/index.php后;登录manager权限用户:Tom 利用Burpsuie抓包
CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞

CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞

在jform [params] [admin_style] [0]‘更改参数名称,并将PAYLOAD注入到’admin_style’的第0个索引中:payload:extractvalue(0x0a,concat(0x0a,(select database())))
CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞

提交修改后的报文:
CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞

获得数据库名称
CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞

获取用户:root
CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞

获取表名:#——assoiactions

CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞

[1] Joomla! 3.8.3: Privilege Escalation via SQL Injection
https://blog.ripstech.com/2018/joomla-privilege-escalation-via-sql-injection/
[2]Joomla二次注入(CVE-2018-6376)分析 https://seaii-blog.com/index.php/2018/03/09/77.html
[3]NVD- CVE-2018-6376
https://nvd.nist.gov/vuln/detail/CVE-2018-6376#vulnCurrentDescriptionTitle
[4]Burpsuit 常用功能及使用方法,
https://www.cnblogs.com/nieliangcai/p/6689915.html
[5]分析CVE-2018-6376 – Joomla!Sqlmap二阶SQL注入
https://blog.csdn.net/qq_27446553/article/details/79378188

相关标签: 网络安全 安全