2013-01-06 108 views
8

我正在嘗試在本地主機上爲安全測試項目創建的虛擬網站上執行SQL注入。SQL注入無法正常工作

我試着輸入字符串" OR "='到的用戶名和密碼字段,所以應該繞過它,並顯示登錄正確 - 但相反,它顯示登錄失敗

任何幫助理解爲什麼SQL注入是不是工作

<?php 
    mysql_connect('localhost', 'root', ''); 
    mysql_select_db('test'); 

    if(isset($_POST['username'])&&isset($_POST['password'])){ 
     $username =$_POST['username']; 
     $password = $_POST['password']; 
     echo $username; 
     echo $password; 

     if(!empty($username)&&!empty($password)){ 
      $query ="SELECT id FROM users WHERE username = '$username' AND password = '$password'"; 
      $query_run = mysql_query($query); 

      if(mysql_num_rows($query_run)>=1){ 
       echo 'Login Correct'; 
      }else{ 
       echo 'Login Failed'; 
      } 
     } 
    } 
?> 
<form action="test.php" method="POST"> 
    Username: <input type="text" name="username"> 
    Password: <input type="text" name="password"> 
    <input type="submit" value="Submit"> 
</form> 
+0

可能是一個魔術引號問題 – user1909426

回答

12

你注射字符串應該是這樣的:
的用戶名和密碼:

' or '1' = '1 

用戶名(通常)和密碼(這取決於哪一個先來查詢)查詢
#評論休息。

' or '1'='1' # 

有關SQL注入的更多信息,你可以看看這個完美的網址:
The SQL Injection Knowledge Base

您也可以下載我製作的幻燈片(MS電源點文件(PPSX))關於實際SQL-注:
SQL-injection in action

+1

......這是正確的。 '#'很重要。否則,注入必須位於'password'字段中。 –

2

嘗試注入這樣的:' or '1' = '1' --

'1' = '1'始終爲真,並且--表示在--之後的所有內容都是註釋,並且不會被檢查。

+3

我發現在一些數據庫實現(特別是mysql)中,你需要在它之前有一個空格,否則它不會被視爲註釋。 – Steve

+0

謝謝,不知道。剛編輯我的答案! :) – P1nGu1n