基于XSRF的SQL注入技術(shù)
原創(chuàng)【51CTO.com 獨家特稿】本文將向讀者介紹一種基于跨站請求偽造的SQL注入技術(shù)。PhpMyAdmin是目前最流行的PHP項目,在現(xiàn)實中PhpMyAdmin已被大量采用。今年12月初,人們在PhpMyAdmin的3.1.0版本中發(fā)現(xiàn)了一個漏洞,不過這個漏洞的利用方法有些特別,那就是需要利用跨站請求偽造來進行SQL注入。本文將向讀者介紹受影響的版本以及對這些版本軟件的具體攻擊方法,最后對出現(xiàn)漏洞的代碼進行了詳細(xì)的分析。
一、漏洞描述
phpMyAdmin 是一種 MySQL 數(shù)據(jù)庫的管理工具,安裝該工具后,即可以通過 web 形式直接管理 MySQL 數(shù)據(jù),而不需要通過執(zhí)行系統(tǒng)命令來管理,非常適合對數(shù)據(jù)庫操作命令不熟悉的數(shù)據(jù)庫管理者,所以目前非常流行。不過,今年十二月初,人們在3.1.0版本的phpMyAdmin上發(fā)現(xiàn)了一個安全漏洞,攻擊者可以通過XSRF對phpMyAdmin進行SQL 注入攻擊。并且無論magic_quotes_gpc被設(shè)為On或者Off,該漏洞仍然會被利用。
二、漏洞利用代碼
本文介紹的利用代碼實際上是一個遠(yuǎn)程運行PHP代碼的概念性漏洞利用驗證代碼。該漏洞利用代碼可以把一個php后門注入到/var/www/backdoor.php ,但是由于AppArmor與SELinux的緣故,它對于最新的Ubuntu或者Fedora系統(tǒng)無效。
對于該漏洞的利用思路是,通過一個XSRF攻擊來進行SQL注入。攻擊的過程如下所示:
1. 發(fā)動攻擊時,受害者的瀏覽器必須已經(jīng)登錄到phpMyAdmin。
2. 必須知道到phpMyAdmin的URL。
3. 設(shè)法讓受害者的瀏覽器瀏覽下面的惡意img標(biāo)簽。這里對*nix系統(tǒng)和Windows系統(tǒng)分別進行介紹。
用于*nix系統(tǒng)的惡意img標(biāo)簽:
![]() |
圖1 |
注入的路徑如下所示:
/var/www/backdoor.php
注入的后門如下所示:
用于Windows上默認(rèn)安裝的XAMPP的漏洞利用代碼:
![]() |
圖2 |
注入路徑如下所示:
c:/xampp/htdocs/backdoor.php
注入的后門如下所示:
可以通過下列方式來訪問植入的后門:
http://10.1.1.10/backdoor.php?e=phpinfo();
需要注意的是,這個攻擊只需要GET請求,對于JavaScript或者ActionScript來說都不是必需的,因此,NoScript也拿它沒轍!
三、技術(shù)細(xì)節(jié)
現(xiàn)在對漏洞代碼做一個詳細(xì)的解釋。首先,下面SQL查詢將被執(zhí)行:
![]() |
圖3 |
由于第一個SQL查詢是選擇整數(shù)值,因此會使用MySQL函數(shù)char()。之后的PHP代碼用于建立一個定制的有效載荷,當(dāng)前的有效載荷是:。不過在前面看到的是經(jīng)過編碼的,其編碼方法如下所示:
![]() |
圖4 |
這個漏洞在于phpMyAdmin的./phpmyadmin/libraries/db_table_exists.lib.php文件中沒有正確地過濾table參數(shù):
![]() |
圖5 |
PMA_sqlAddslashes()函數(shù)僅禁用了單引號,但忽略了反勾號(`)和雙引號("),因此遠(yuǎn)程攻擊者可以通過提交惡意請求執(zhí)行SQL注入攻擊。
這種攻擊不是XSRF的教科書式的例子,因為phpMyAdmin具有XSRF的防御措施。保護請求的令牌是以一種安全的方式來生產(chǎn)的,具體見./phpmyadmin/libraries/session.ic.php文件的第96行,如下所示:
![]() |
圖6 |
該安全漏洞是由于一些請求變量未受到令牌的保護而引起的,具體見./phpmyadmin/libraries/common.inc.php文件的第389行,如下所示:
![]() |
圖7 |
下面是PMA_remove_request_vars() 函數(shù)的定義:
![]() |
圖8 |
注意這個函數(shù)聲明中的&。PMA_remove_request_vars($whitelist )通過引用來傳遞變量,但是這個函數(shù)沒有使用變量的引用。這里人們還是太迷信它了,因為它對自己的代碼沒有影響。
四、補丁
目前廠商已經(jīng)發(fā)布了升級補丁以修復(fù)這個安全問題,請到廠商的主頁下載:http://phpmyadmin.svn.sourceforge.net/viewvc/phpmyadmin?view=rev&revision=12100。
五、小結(jié)
本文將向讀者介紹了一種基于跨站請求偽造的SQL注入技術(shù)。PhpMyAdmin是目前最流行的PHP項目,在現(xiàn)實中PhpMyAdmin已被大量采用。今年12月初,人們在PhpMyAdmin的3.1.0版本中發(fā)現(xiàn)了一個漏洞,不過這個漏洞的利用方法有些特別,那就是需要利用跨站請求偽造來進行SQL注入。本文將向讀者介紹受影響的版本以及對這些版本軟件的具體攻擊方法,最后對出現(xiàn)漏洞的代碼進行了詳細(xì)的分析。
【51CTO.COM 獨家特稿,轉(zhuǎn)載請注明出處及作者!】
【編輯推薦】