2013-06-29 47 views
2

我目前正在尋找通過(不盲目)高級別的類別sql注入應用dvwa。Bypass php is_numeric()函數是可能的嗎?

即使有一些想法和工具可以讓生活變得更輕鬆,但找不到解決方案。

源代碼形式爲風扇如下:


if (isset($_GET['Submit'])) { 
    // Retrieve data 

    $id = $_GET['id'];  
    $id = stripslashes($id);  
    $id = mysql_real_escape_string($id); 

    if (is_numeric($id)){ 

     $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; 
     $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>'); 

     $num = mysql_numrows($result); 

     $i=0; 

     while ($i < $num) { 

      $first = mysql_result($result,$i,"first_name"); 
      $last = mysql_result($result,$i,"last_name"); 

      echo '<pre>'; 
      echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; 
      echo '</pre>'; 

      $i++; 
     } 
    } 
} 

和任務和檢索屬於具有這種結構的用戶表dvwa分貝的值:

+------------+-------------+------+-----+---------+ 
| Field  | Type  | Null | Key | Default | 
+------------+-------------+------+-----+---------+ 
| user_id | int(6)  | NO | PRI | 0  | 
| first_name | varchar(15) | YES |  | NULL | 
| last_name | varchar(15) | YES |  | NULL | 
| user  | varchar(15) | YES |  | NULL | 
| password | varchar(32) | YES |  | NULL | 
| avatar  | varchar(70) | YES |  | NULL | 
+------------+-------------+------+-----+---------+ 
6 rows in set (0.00 sec) 

那麼當然你會唉(正如我在網上到處看到的那樣)是編碼字符。據我瞭解,是的,我們有更多的字符集,可以寫不同的電子郵件(例如多字節)。 但我什至不能找到你。我理解上面的php表單代碼是這樣的:

已經第一次必須繞過mysql_real_escape_string(),所以我的研究已經集中在那裏第一次。 使用遊戲big5角色,例如意味着我們繞過它......再次是的,也許我看到的所有事情天泰的道路,但我沒有實際測試過。爲什麼?

假設我繞過mysql_escape_string()和如果我們繼續讀取由PHP代碼執行的下一步驟中,我們可以讀取功能:

if(is_numeric($id))... 

檢查變量的類型。 (另外,我不知道我是否使用確切的術語,但是很好)。這意味着,如果我想在這裏插入一個引用,它必須在forcemmentnumérique.Donc大小我靠着名的PHP函數,我意識到我們可以輸入相同的二進制或十六進制值(但在所有情況下,它會函數轉換輸出後,我現在我真的不知道....)。所以我在 的第一個想法的輸入是得到0x27插入一個報價,但當然這個值被解釋爲整數,而不是字符串類型的輸出,所以如何解釋我的報價......我認爲問題是在這一方面,但我喜歡思考......如果你只有一條軌道(除了告訴我看一下谷歌,我已經做了四天的工作^^),我很感興趣。所以大家(或女孩),威爾被稱爲大師Sqli? 謝謝你的時間...(對不起,谷歌翻譯)

回答

-1

爲什麼你會使用mysql圖書館,當它被棄用?改爲使用mysqli

其次,如果你想擺脫的SQL注入的危險,這將是容易使用事先準備好的聲明,所以像下面是所有需要。

$stmt = $mysqli->prepare("SELECT first_name, last_name FROM users WHERE user_id = ?") 
$stmt->bind_param("i", $id); 
$stmt->execute(); 
$stmt->bind_result($res); 
$stmt->fetch(); 
if($res) 
    ... 

順便說一句,mysqli可以在功能使用(不OOP)風格非常相似,mysql

+0

試着回答他的原始問題。 – everlasto