我必須爲學校做一個關於許多不同網絡漏洞(SQL,XSS,CSRF等)的項目,並且我已經做了一個非常簡單的網站來演示這些攻擊。但由於某些原因,我無法通過攻擊登錄來獲得SQL注入。我的SQL注入似乎不工作?
下面是簡單的登錄代碼:
$query = "SELECT * FROM customer WHERE cMAIL='$cmail' AND cPWD='$cpwd'";
$res = mysql_query($query) or die(mysql_error());
echo $query . mysql_error();
$count = mysql_num_rows($res);
if ($count == 1) {
echo " Reached target!";
session_start();
$_SESSION["cmail"] = $cmail;
$_SESSION["cpwd"] = $cpwd;
} else {}
很多的回聲的東西,所以我可以按照注射看看會發生什麼,但它給了我奇怪的結果。
如果我以其中一個客戶身份登錄;用戶名:[email protected],密碼= 123ABC,它給了我預期的響應:
SELECT * FROM客戶WHERE cMAIL='[email protected]」 AND CPWD = '123ABC' 達成目標!
這就是它在瀏覽器中的回聲,只是要清楚!
會話是爲jjones創建的。但是,如果我這樣做:用戶名:1' 或 '1'= '1,密碼:(空)呼應這樣的:
SELECT * FROM客戶WHERE cMAIL =' 1' 或 '1'='1 'AND cPWD =''
沒有錯誤或任何東西。我echo'd $計數,它說0行是從數據庫中選擇。所以注入是健全的,但我沒有得到任何基於查詢的行。我該如何解決這個問題?
對於有多少行是'CPWD = '''真的嗎? –
您注入的SQL允許原始查詢的其餘部分繼續。正如奧利指出的那樣,'cPWD ='''對任何行都可能不是真的。你通常使用類似'1'或1 = 1的東西; - '以防止執行其餘的查詢。 –
@ChrisHayes它不允許我用#, - ,/ *等結束查詢。我認爲這是因爲最後有一個單引號標記,所以它最終成爲'cMAIL ='1' OR 1 = 1; - 'AND ...'。最後一個標記殺死了我認爲的查詢。 – Volatile