$_GET['user']
函數取得在 php 網址後加入的 ?user=...
參數查詢,其中 MYSQL_NUM
指定使用數字索引。
[root@kvm8 ~]# cd /var/www/html [root@kvm8 html]# vim injection.php [root@kvm8 html]# cat injection.php <?php $dbhost = 'localhost:3306'; $dbuser = 'root'; $dbpass = '123qwe'; $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error().PHP_EOL); $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>"; } ?>
?user='dywang'
,查詢結果列出 host 及 user。
?user='a' or 1
,查詢結果列出所有 host 及 user,因為可以注入 or 1
的條件。
?user='a' union all select host,user from user
,查詢結果列出所有 host 及 user,因為可以注入 union all ....
的條件。
?user='a'; drop table user
,查詢結果空白,因為 PHP 的 mysql_query
函數只接受單一詢問,加入分號來進行第二個詢問不被接受。