CVE-2018-6376复现-Joomla!3.8.4-SQL注入漏洞
1.1漏洞原因
1.1.1漏洞描述
图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′,′′);(该行说明主要是从‘adminstyle’参数获取用户的输入值,并传递‘adminstyle’变量。)if(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])(该行代码显示:代码直接使用用户提供的输入来构建SQL查询。将此处看成是一个数组,因此索引值为0的存储值将被用于构造查询。正因此在错误信息中,只能看到第一字符)−>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之后,没有对其进行类型强转或者过滤等操作,而是用了 adminstyle之后,没有对其进行类型强转或者过滤等操作,而是用了admin_style[0]这种操作,导致了漏洞的出现。
1.2 漏洞复现过程
访问
http://localhost/Joomla_3.8.3/administrator/index.php后;登录manager权限用户:Tom 利用Burpsuie抓包
在jform [params] [admin_style] [0]‘更改参数名称,并将PAYLOAD注入到’admin_style’的第0个索引中:payload:extractvalue(0x0a,concat(0x0a,(select database())))
提交修改后的报文:
获得数据库名称
获取用户:root
获取表名:#——assoiactions
[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
下一篇: 绵阳有哪些美食街