2012-06-27 58 views
2

證明我有一個客戶端提供塊下面的代碼:MySQL的注入攻擊:概念

$user = $_POST['user']; 

$sql = "SELECT * FROM users WHERE user = '" . $user . "'"; 

$dbh->query($sql); 

此外,該代碼不會回顯任何輸出到屏幕現在,所以它並不能幫助我如果我選擇多個用戶。這不會直觀地向客戶展示任何東西。

很明顯,我認爲這是容易注射,但我不能找到一種方法來顯示客戶端如何做到這一點的工作。我試圖放下桌子,但​​似乎一次只允許一個陳述。

這裏是我已經試過到目前爲止 ' OR 1=1; DROP TABLE users; SELECT * FROM users WHERE 1='1,但不起作用。

+0

是的,您的SQL可以被注入以及強制回顯/轉儲信息。感謝上市*我到目前爲止所嘗試的*但如果這是您做過的唯一測試,我承諾這是不夠的。 – PenguinCoder

+2

沒有被允許在1個字符串中進行2個查詢,在一個變更的查詢中很難變成一個'SELECT',除了最後一個'PROCEDURE'調用,但是這需要一個相關的'PROCEDURE'。就個人而言,我發現OR 1 = 1 FOR UPDATE UNION SELECT SLEEP(1000000000);'刺激性不夠(不可變的記錄,如果你的登錄名還在users表中存儲'last-login'列(或任何其他'UPDATE '給用戶...所有登錄都會在睡眠期間阻塞(或者終止查詢)) – Wrikken

+0

Hm,@kylex:[它似乎取決於環境](http://stackoverflow.com/ (問題/ 6346674/PDO支持換多查詢-PDO MySQL的-PDO-mysqlnd) – Wrikken

回答

1

你並沒有真正做足夠的獸醫您的數據庫查詢。你的腳本中的方法(沒有回聲)被稱爲blind injection,它仍然可以實現接管或注入,它仍然是非常

嘗試使用自動SQL注入工具,如SqlMap。您的查詢結果會讓您感到驚訝。對於您的查詢,您還可以嘗試一些來自unixwiz的示例。雖然這些對於他的目標來說非常具體,但它背後的理論和證明是完全合理的。

+0

SqlMap非常棒! – kylex

0

關於注入以下內容:

"' OR 1'" 
+0

雖然這對數據庫沒有任何影響,但我需要一種方法來修改數據庫,或者將用戶重置爲空白,或者我可以截取屏幕截圖並說這是可能發生在你的數據上 – kylex

+0

對於試圖訪問信息的人,他們不應該能夠看到,注入上面將返回所有行。這仍然是危險的。 –

+0

除查詢不返回任何內容到屏幕上,所以我不確定我怎麼能看到任何東西。 – kylex

2

你可以注入SLEEP(1000)多次用盡連接池。或者你可能使用非常複雜的表達式來提高CPU負載。

隨着大量的派生表,你甚至可能會耗盡內存。

0

截斷;

' or 1=1; truncate table users; -- 

拖放;

' or 1=1; drop table users; -- 

可以這樣做我想。

+3

' - > query()'函數不允許多個語句。 – kylex