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