gpt4 book ai didi

mysql - 如何在此 PHP 和 MySQL 代码中演示 SQL 注入(inject)?

转载 作者:可可西里 更新时间:2023-11-01 07:01:50 24 4
gpt4 key购买 nike

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

我需要找出几个示例,说明如何针对以下代码构建 MySQL 注入(inject)。这是一个基本的用户登录系统,我在其中接受用户名和密码而不进行任何转义

$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 注入(inject)到:

  1. 绕过知道合法用户用户名的密码(我的用户表中的一个用户是 tester),以及
  2. 一种会降低 users 的注入(inject)剂表的整体。

我已经尝试了来自 Wikipedia 的几个 MySQL 注入(inject)示例,但我猜想我查询中的 {} 阻止了注入(inject),所以我很感激那些对此有信心的人的帮助,并感谢大家。

最佳答案

应该这样做:

  1. 要以用户“foo”登录,请将用户名设置为“foo' --”

这将使您的查询看起来像

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

“--”表示该行的其余部分被注释掉

  1. 不确定这是否可行,但尝试将用户名设置为“foo' OR (DROP TABLE users) --”

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

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

虽然可能不接受 - 我认为子查询只能选择。

mysql_query 函数只会运行一个查询 - 其他函数会让您这样做:

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

关于mysql - 如何在此 PHP 和 MySQL 代码中演示 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1508431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com