next up previous contents
Next: 限制輸入字元 Up: SQL Injection 注入 Previous: 前言   Contents

SQL 注入查詢

  1. 範例:查詢使用者帳號。以 $_GET['user'] 函數取得在 php 網址後加入的 ?user=... 參數查詢。
    [root@kvm8 ~]# cd /var/www/html
    [root@kvm8 html]# vim injection.php 
    [root@kvm8 html]# cat injection.php 
    <?php
    $dbhost = 'localhost:3036';
    $dbuser = 'root';
    $dbpass = '123qwe';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass);
    if(! $conn ) {
            die('Could not connect: ' . mysql_error());
    }
    
    $sql = "SELECT host,user FROM user WHERE user={$_GET['user']}";
    mysql_select_db('mysql');
    $retval = mysql_query( $sql, $conn );
    while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
    	echo "HOST:  {$row[0]}  <br> ".
    "User:  {$row[1]} <br> ".
     "--------------------------------<br>";
    }
    ?>
    
  2. 在 php 網址後加入 ?user='dywang',查詢結果列出 host 及 user。
    Image injection1
  3. 在 php 網址後加入 ?user='a' or 1,查詢結果列出所有 host 及 user,因為可以注入 or 1 的條件。
    Image injection2
  4. 在 php 網址後加入 ?user='a' union all select host,user from user,查詢結果列出所有 host 及 user,因為可以注入 union all .... 的條件。
    Image injection8
  5. 在 php 網址後加入 ?user='a'; drop table user,查詢結果空白,因為 PHP 的 mysql_query 函數只接受單一詢問,加入分號來進行第二個詢問不被接受。
    Image injection9



2016-06-02