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