2012-03-28 42 views
3

是否有可能將「插入」語句(或其他任何改變數據庫的語句)潛入MySQL「select」語句中?你可以偷偷「插入」到「選擇」語句?

我問,因爲我擔心我已經發現了一個注入漏洞,但是由於只能夠一次運行一條語句,所以它可以從明顯的混亂中受到保護,例如'; drop database; --,無論查詢有多少條語句已被破壞以包含。但是如果後端正在執行類似select bar from foo where param = '$improperly_escaped_input'的東西,有什麼我可以輸入會危及我的數據庫嗎?

無論如何,都需要糾正漏洞。但是,如果我能夠展示如何利用這些數據來解決這個問題,那麼修復它就會進入優先級隊列。

+1

您如何避免一次運行多個陳述? – 2012-03-28 20:44:25

+1

無論數據是否可以修改,它都可能是一個漏洞。如果人們可以改變查詢來訪問除自己以外的數據,或者修改權限查詢以始終返回true,那麼您仍然會遇到麻煩。 – 2012-03-28 20:48:38

回答

5

修改數據只是Sql注入漏洞的一個方面。即使只有讀權限,攻擊者也可以提升他們的權限,或者使用攻擊來從數據庫中抓取每一個數據。

我想不出一個辦法來解決我的問題,即在select語句中修改數據......但是,are you sure that you're only able to run a single command at a time

無論如何,其他攻擊媒介應該足以構成威脅來提高問題的優先級。

編輯:Data modification is allowed in MySql sub-queries

的MySQL允許子查詢指具有 修改數據的副作用,如將行插入表的存儲的功能。對於 例如,如果f()的插入行,以下查詢可以修改數據:

SELECT ... WHERE x IN (SELECT f() ...);

此行爲是非標準 (不是由SQL標準允許的)。在MySQL中,它可能會產生 不確定的結果,因爲對於給定查詢的不同執行,f()可能會執行不同的次數 ,具體取決於優化程序選擇如何處理它的 。

+1

PHP的mysql_query的文檔說它只允許一個查詢(http://php.net/manual/en/function.mysql-query.php),而且我自己的實驗表明使用分號創建第二個語句並不會'工作。但是你是對的,挖掘數據的可能性足以讓我強烈爭論早日處理這個問題。 – BlairHippo 2012-03-28 20:52:42

+0

好,詳細,答案。 – 2012-03-28 20:56:09

+0

@BlairHippo嗯...我對MySql doc的回答中的鏈接與PHP文檔衝突,並提供了一個用於執行多個語句的'mysql_query'的示例......但我沒有任何證據。 .. – 2012-03-28 20:56:32