<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Joomla on Lucien's Blog</title><link>https://www.lucien116.com/tags/joomla/</link><description>Recent content in Joomla on Lucien's Blog</description><generator>Hugo</generator><language>zh-Hans</language><lastBuildDate>Thu, 18 May 2017 16:33:22 +0000</lastBuildDate><atom:link href="https://www.lucien116.com/tags/joomla/feed.xml" rel="self" type="application/rss+xml"/><item><title>Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析</title><link>https://www.lucien116.com/archives/351/</link><pubDate>Thu, 18 May 2017 16:33:22 +0000</pubDate><guid isPermaLink="false">http://www.lucien116.com/?p=351</guid><description>&lt;p&gt;&lt;strong&gt;Author: p0wd3r (知道创宇404安全实验室)&lt;/strong&gt; &lt;strong&gt;Date: 2017-05-18&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="0x00-漏洞概述"&gt;0x00 漏洞概述&lt;/h2&gt;
&lt;h3 id="漏洞简介"&gt;漏洞简介&lt;/h3&gt;
&lt;p&gt;Joomla于5月17日发布了新版本3.7.1,（ &lt;a href="https://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html"&gt;https://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html&lt;/a&gt;），本次更新中修复一个高危SQL注入漏洞（ &lt;a href="https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html"&gt;https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html&lt;/a&gt;），成功利用该漏洞后攻击者可以在未授权的情况下进行SQL注入。&lt;/p&gt;
&lt;h3 id="漏洞影响"&gt;漏洞影响&lt;/h3&gt;
&lt;p&gt;未授权状态下SQL注入&lt;/p&gt;
&lt;p&gt;影响版本： 3.7.0&lt;/p&gt;
&lt;h2 id="0x01-漏洞复现"&gt;0x01 漏洞复现&lt;/h2&gt;
&lt;p&gt;Joomla 在 3.7.0 中新增了一个 &lt;code&gt;com_field&lt;/code&gt; 组件，其控制器的构造函数如下，在 &lt;code&gt;components/com_fields/controller.php&lt;/code&gt; 中：
&lt;img loading="lazy" src="http://paper.seebug.org/content/images/2017/05/construct.png"&gt;&lt;/p&gt;
&lt;p&gt;可以看到当访问的 &lt;code&gt;view&lt;/code&gt; 是 &lt;code&gt;fields&lt;/code&gt;， &lt;code&gt;layout&lt;/code&gt; 是 &lt;code&gt;modal&lt;/code&gt; 的时候，程序会从 &lt;code&gt;JPATH_ADMINISTRATOR&lt;/code&gt; 中加载 &lt;code&gt;com_fields&lt;/code&gt;，这就意味着普通用户可以通过这样的请求来使用管理员的 &lt;code&gt;com_fields&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;接下来我们看管理员的 &lt;code&gt;com_fields&lt;/code&gt; 组件，我们来到 &lt;code&gt;administrator/components/com_fields/models/fields.php&lt;/code&gt;，其中的 &lt;code&gt;getListQuery&lt;/code&gt; 的部分代码如下：&lt;/p&gt;
&lt;p&gt;&lt;img alt="Alt text" loading="lazy" src="http://paper.seebug.org/content/images/2017/05/getlistquery.png"&gt;&lt;/p&gt;
&lt;p&gt;程序通过 &lt;code&gt;$this-&amp;gt;getState&lt;/code&gt; 取到 &lt;code&gt;list.fullordering&lt;/code&gt;，然后使用 &lt;code&gt;$db-&amp;gt;escape&lt;/code&gt; 处理后传入 &lt;code&gt;$query-&amp;gt;order&lt;/code&gt; 函数，mysqli的 &lt;code&gt;escape&lt;/code&gt; 函数代码如下：&lt;/p&gt;
&lt;p&gt;&lt;img alt="Alt text" loading="lazy" src="http://paper.seebug.org/content/images/2017/05/escape.png"&gt;&lt;/p&gt;
&lt;p&gt;这里调用 &lt;code&gt;mysqli_real_escape_string&lt;/code&gt; 来转义字符，该函数具体作用如下：&lt;/p&gt;
&lt;p&gt;&lt;img alt="Alt text" loading="lazy" src="http://paper.seebug.org/content/images/2017/05/mysqli-escape.png"&gt;&lt;/p&gt;
&lt;p&gt;仅对单双引号等字符进行转义，并未做更多过滤。另外 &lt;code&gt;$query-&amp;gt;order&lt;/code&gt; 函数的作用仅仅是将数据拼接到 &lt;code&gt;ORDER BY&lt;/code&gt; 语句后，也并未进行过滤，所以如果 &lt;code&gt;list.fullordering&lt;/code&gt; 可控，那么就可以进行注入。&lt;/p&gt;
&lt;p&gt;我们可以看到 &lt;code&gt;list.fullordering&lt;/code&gt; 是一个 &lt;code&gt;state&lt;/code&gt;， &lt;code&gt;state&lt;/code&gt; 会在视图的 &lt;code&gt;display&lt;/code&gt; 函数中进行设置：&lt;/p&gt;</description></item></channel></rss>