2015-12-15 47 views
0

即時通訊試圖學習和理解mysql注入,我已經創建演示案例。mysql_query注入 - 替換返回的字段

SELECT ret_variable FROM data WHERE name = '".$name."' AND age = ".$age; 

然後if(ret_variable == 2){something}但查詢最初返回1,我需要用它強制輸出2

如何修改$age變量設置自定義輸出字段ret_variable(只響應)? 我已經嘗試了幾種方法與或但沒有wroked。

回答

0

除了學習之外,我看不到任何實際的應用。我假設您知道代碼後,您有權對此進行測試。所以讓我們一起去吧!

當數據庫中有一行的值爲2作爲ret_variable並且知道該行的名稱值時,只能爲ret_variable返回2。例如,您可以輸入該名稱和以下內容以繞過年齡的正確值。

年齡和ret_value = 2

這將創建以下查詢:

SELECT ret_variable FROM data WHERE name = 'John' AND age = age AND ret_value = 2; 

的MySQL注入的原理是這樣的排序查詢的操縱。但是你不能強制返回一個值,除非在數據庫中有一行用ret_variable這個值,你可以通過某種方式選擇這一行。

當您不知道名稱(或者沒有使用ret_variable爲2的已知名稱的記錄)時,這是不可能的。

由於AND運算符優先於OR運算符,因此無法操作查詢來給出2作爲ret_variable。這是因爲名稱='?'部分將永遠失敗。