Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP和MySQL代码中演示SQL注入?_Mysql_Security_Code Injection - Fatal编程技术网

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

如何在PHP和MySQL代码中演示SQL注入?,mysql,security,code-injection,Mysql,Security,Code Injection,我想首先指出,这是对我自己的数据库的一次教育尝试,目的是更好地理解MySQL注入以保护我自己的代码 我需要给出几个示例,说明如何根据以下代码构造MySQL注入。这是一个基本的用户登录系统,在这里我接受用户名和密码而不进行任何转义 $user = (!empty($_POST['user'])) ? $_POST['user'] : ''; $pass = (!empty($_POST['pass'])) ? $_POST['pass'] : ''; 然后,MySQL查询尝试在名为users的表

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

我需要给出几个示例,说明如何根据以下代码构造MySQL注入。这是一个基本的用户登录系统,在这里我接受用户名和密码而不进行任何转义

$user = (!empty($_POST['user'])) ? $_POST['user'] : '';
$pass = (!empty($_POST['pass'])) ? $_POST['pass'] : '';
然后,MySQL查询尝试在名为users的表中查找输入的用户名和密码,如下所示:

$res = mysql_query("SELECT * from users where user='{$user}' AND pass='{$pass}'");
这是未转义的输入,我正在尝试使用MySQL注入:

绕过密码知道合法用户的用户名“我的用户”表中的一个用户是tester,并且 一次注射会使整个桌子掉下来。 我已经尝试了几个MySQL注入示例,但是我猜我查询中的{}正在阻止注入,所以我希望能从那些对此有信心的人那里得到一些帮助,并感谢大家。

这里有一个很长的列表


您的代码显然会在几乎所有测试中失败,因为它完全没有受到保护。

{}不是原因。这可能是因为php现在已被弃用,它可以保护您免受过于简单化的攻击


但是,您可以先进行测试,然后再进行测试。

类似的操作应该可以:

要以用户foo的身份登录,请将用户名设置为foo'- 这将使您的查询看起来像

$res = mysql_query("SELECT * from users where user='foo' -- ' AND pass=''");
-表示该行的其余部分已注释掉

不确定这是否有效,但请尝试将用户名设置为“foo”或删除表用户- 这将使您的查询看起来像:

$res = mysql_query("SELECT * from users where user='foo' OR (DROP TABLE users) -- ' AND pass=''");
但可能不接受这一点-我认为子查询只能选择

mysql_查询函数将只运行一个查询-其他函数将允许您执行此操作:

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

您将无法删除该表,因为使用mysql\u query无法发送多个查询。

尝试此查询,看看它是否会转储整个表:

For both username and password, I enter:

' OR 1=1 AND '}' '= 
当然,这假设我知道您正在使用大括号包装数据值

我真的不知道MySQL是如何处理这样的混合逻辑的,因为它不是用括号括起来的,所以请告诉我它是否有效

$user = (!empty($_POST['user'])) ? $_POST['user'] : '';
$pass = (!empty($_POST['pass'])) ? $_POST['pass'] : '';

$user = mysql_real_escape_string($user);
$pass = msyql_real_escape_string($pass);

$res = mysql_query("SELECT * from users where user='{$user}' AND pass='{$pass}'");
这将为您保护代码。
任何人都无法删除该表。

请列出您已经尝试过的表。如文档中所述,不支持使用mysql\u查询的多个查询:mysql\u查询发送唯一查询多个查询不支持与指定链接标识符关联的服务器上的当前活动数据库。