閱讀50 返回首頁    go 技術社區[雲棲]


Joomla 3.4.3版本 SQL注入漏洞分析

0x00 漏洞分析

漏洞觸發的代碼位於:/administrator/components/com_contenthistory/models/history.php,getListQuery()函數內:

4cf1a8d2985c5601fbdeb7a9e4a09234077751bf

通過SQL及報錯信息,可以知道我們的注入payload被插入到了紅色框部分內。跟進getState()函數,位於libraries/legacy/model/legacy.php文件內,代碼如下:

fdee547d4719f061f5da0cbb08cc60b14d985666

從函數參數和官方注釋,可以知道,getState()函數功能是獲取一個model的屬性及屬性對應的值,getState()函數在model的屬性未設置時,會執行$this->populateState()來對model的一些屬性進行賦值操作。

我們跟進populateState()函數看下做了什麼操作,代碼位於:/administrator/components/com_contenthistory/models/history.php 內:

fe099e32ddc96330647b1d252557f043a6aafc7c

該函數從用戶輸入中取出item_id,type_id,type_alias,等幾個變量,對當前model的屬性進行賦值,可控變量均強製為integer類型,無法利用。順著最後一行代碼:parent::populateState(‘h.save_date’, ‘DESC’),繼續跟到父類中看父類populateState()函數的定義,代碼位於:libraries/legacy/model/list.php,482行附近:

6b6d229c8fd724ed7d494a0d368530e987005085

getUserStateFromRequest()函數用於將GET/POST中得list[]變量取回到$list中,並在第三個參數中指定該變量類型為array(),繼續跟進:

1f82a0a1dfcae93ffa84026ba3c57b76f52a30cc

代碼對取到的list[]數組進行了遍曆,並做相應的過濾、拆分,可以看到list[select]沒有處理邏輯,會進入default的case,後續$this->setState(‘list.’ . $name, $value)代碼執行後,導致請求中list[select]變量沒有任何變量被直接賦值給Model屬性,繼續回頭看文章最開始的注入位置,此時我們可以控製$this->getState(‘list.select’)的返回值,構造SQL注入。

確認了輸入可控的位置,構造有效的payload,還需要解決幾個小問題。構造POC:

index.php?option=com_contenthistory&view=history&item_id=1&type_id=1&list[select]=(exp(~(select * from(select md5(1))x)))

會發現出現錯誤提示 Unknown column ‘Array’:

5b0ddaad6fc53783244ae7406a7f0d802419e492

需要增加list[ordering]=將原SQL中的order by字段值清空。
最終可執行POC:

/index.php?option=com_contenthistory&view=history&item_id=1&list[ordering]=&type_id=1&list[select]=(exp(~(select * from(select md5(1))x)))

執行會返回:

64449bf7f63be7eb106449ea72ff55b63c17b467

此帶回顯POC成功執行需要一個前提條件,就是傳入的item_id 可以在Joomla_ucm_history表中查詢到,否則會返回“500 – Layout default not found.”的提示。根據原文描述,可以暴力猜解item_id或使用time_based payload,不再贅述。

0x01 漏洞影響

joomla3.2-3.4.4版本

0x02 修複方案

目前Joomla官方已經跟新3.4.5版本,用戶可登陸後台進行更新。
或下載官方升級包升級,下載地址:
https://github.com/joomla/joomla-cms/releases

0x03 參考鏈接

https://www.trustwave.com/Resources/SpiderLabs-Blog/Joomla-SQL-Injection-Vulnerability-Exploit-Results-in-Full-Administrative-Access/

作者:雲盾攻防對抗團隊 - 千霄

發表日期:2015年10月23日


最後更新:2017-04-01 13:51:26

  上一篇:go Oracle insert 加速方法總結
  下一篇:go 搶先看 駐雲科技在雲棲大會都發布哪些新品?