2013-12-15 51 views
2

我必須爲學校做一個關於許多不同網絡漏洞(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行是從數據庫中選擇。所以注入是健全的,但我沒有得到任何基於查詢的行。我該如何解決這個問題?

+0

對於有多少行是'CPWD = '''真的嗎? –

+1

您注入的SQL允許原始查詢的其餘部分繼續。正如奧利指出的那樣,'cPWD ='''對任何行都可能不是真的。你通常使用類似'1'或1 = 1的東西; - '以防止執行其餘的查詢。 –

+0

@ChrisHayes它不允許我用#, - ,/ *等結束查詢。我認爲這是因爲最後有一個單引號標記,所以它最終成爲'cMAIL ='1' OR 1 = 1; - 'AND ...'。最後一個標記殺死了我認爲的查詢。 – Volatile

回答

2

你可能會產生

SELECT * FROM customer WHERE cMAIL='1' OR '1'='1' LIMIT 0,1;# AND cPWD='' 

隨着用戶:

1' OR '1'='1' LIMIT 0,1;# 

和密碼爲空。

+0

我突然意識到問題一定是數! – CodeColorist

+0

這工作完美。但是爲什麼'#'在'--'和'/ *'沒有?時工作? – Volatile

+1

,因爲**#**評論後面的內容,在一行中 –

0

您可以通過設置用戶名展示SQL注入的例子

1' OR 1=1; -- 

這會讓你的最終查詢:

SELECT * FROM customer WHERE cMAIL='1' OR 1=1; -- AND cPWD='' 

這注釋掉密碼檢查。

2

要繞過登錄檢查,你應該建立一個符合下列規定的查詢:

  1. 限制爲僅一個一行。 (LIMIT)
  2. WHERE子句始終爲真。 (布爾計算)

所以@Ignacio Ocampo的解決方案是完全正確的。

順便說一句,有一件事你應該考慮SQL注入。如果啓用magic_quotes_gpc,PHP將自動將'轉換爲\'

+0

對於魔術引號+1,但是-1,因爲如果他們被啓用,他們會出現在OP的輸出中;) –

+0

確實爲magic_quotes_gpc thingy +1,我不知道。謝謝! – Volatile

0

你必須爲密碼字段放下一些東西。現在查詢必須將密碼與空白(「」)匹配。

像下面這樣會使你聰明的壞傢伙

Username: 1' OR '1' = '1 
Password: doesntmatter' OR '1' = '1 

這相當於

SELECT * 
FROM customer 
WHERE cMAIL='1' OR '1'='1' 
    AND cPWD='doesntmatter' OR '1' = '1' 
+0

如果不是因爲數據庫中有2個用戶條目,使得mysql_num_rows返回2而不是1,這將工作/工作。顯然如果我已經在一個while循環中編碼它,它會工作! – Volatile