亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

Joomla! 3.7 Core SQL 注入 (CVE-2017-8917)漏洞分析

作者:知道創(chuàng)宇404安全實(shí)驗(yàn)室

漏洞簡介

Joomla于5月17日發(fā)布了新版本3.7.1,(https://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html),本次更新中修復(fù)一個(gè)高危SQL注入漏洞(https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html),成功利用該漏洞后攻擊者可以在未授權(quán)的情況下進(jìn)行SQL注入。

漏洞影響

未授權(quán)狀態(tài)下SQL注入

影響版本: 3.7.0

0x01 漏洞復(fù)現(xiàn)

Joomla 在 3.7.0 中新增了一個(gè) com_field組件,其控制器的構(gòu)造函數(shù)如下,在components/com_fields/controller.php中:

可以看到當(dāng)訪問的viewfieldslayoutmodal的時(shí)候,程序會(huì)從JPATH_ADMINISTRATOR中加載com_fields,這就意味著普通用戶可以通過這樣的請(qǐng)求來使用管理員的com_fields

接下來我們看管理員的com_fields組件,我們來到administrator/components/com_fields/models/fields.php,其中的getListQuery的部分代碼如下:

Alt text

程序通過$this->getState取到list.fullordering,然后使用$db->escape處理后傳入$query->order函數(shù),mysqli的escape函數(shù)代碼如下:

Alt text

這里調(diào)用mysqli_real_escape_string來轉(zhuǎn)義字符,該函數(shù)具體作用如下:

Alt text

僅對(duì)單雙引號(hào)等字符進(jìn)行轉(zhuǎn)義,并未做更多過濾。另外$query->order函數(shù)的作用僅僅是將數(shù)據(jù)拼接到ORDER BY語句后,也并未進(jìn)行過濾,所以如果list.fullordering可控,那么就可以進(jìn)行注入。

我們可以看到list.fullordering是一個(gè)statestate會(huì)在視圖的display函數(shù)中進(jìn)行設(shè)置:

Alt text

跟進(jìn)這個(gè)設(shè)置過程,程序會(huì)走到libraries/legacy/model/list.php中的populateState函數(shù)中,具體的調(diào)用棧如下:

Alt text

該函數(shù)中有如下一段代碼:

if ($list = $app->getUserStateFromRequest($this->context . '.list', 'list', array(), 'array'))  
{
    foreach ($list as $name => $value)
    {
        // Exclude if blacklisted
        if (!in_array($name, $this->listBlacklist))
        {

            ...

            $this->setState('list.' . $name, $value);
        }
    }
}

程序通過$app->getUserStateFromRequest取到一個(gè)$list數(shù)組 ,如果數(shù)組的key不在黑名單中,則遍歷該數(shù)組對(duì)相應(yīng)state進(jìn)行注冊,getUserStateFromRequest的代碼如下:

Alt text

結(jié)合前面的調(diào)用來看,我們可以通過請(qǐng)求中的參數(shù)list來設(shè)置$list變量,因此我們訪問http://ip/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(2,concat(0x7e,(version())),0)并開啟動(dòng)態(tài)調(diào)試動(dòng)態(tài)調(diào)試,結(jié)果如下:

Alt text

可以看到list.fullordering已經(jīng)被我們控制。

回到getListQuery,該函數(shù)會(huì)在視圖加載時(shí)被自動(dòng)調(diào)用,具體函數(shù)調(diào)用棧如下:

Alt text

所以我們的payload也就通過getState傳入了這個(gè)函數(shù),最終導(dǎo)致SQL注入:

Alt text

Alt text

補(bǔ)丁分析

Alt text

改為取list.orderinglist.direction作為查詢的參數(shù),這兩個(gè)參數(shù)在populateState函數(shù)中做了如下處理:

Alt text

如果值不在指定范圍內(nèi)則將其更改為默認(rèn)值,因此無法再將payload帶入。

參考文獻(xiàn)

https://www.seebug.org/vuldb/ssvid-93113

https://blog.sucuri.net/2017/05/sql-injection-vulnerability-joomla-3-7.html

https://developer.joomla.org/security-centre/692-20170501-core-sql-injection.html

https://www.joomla.org/announcements/release-news/5705-joomla-3-7-1-release.html

上一篇:“WannaCry”事件分析與啟示:警惕下一個(gè)“永恒之藍(lán)”

下一篇:【安全預(yù)警】CVE-2017-7645:Linux 內(nèi)核遠(yuǎn)程拒絕服務(wù)漏洞