php - mysql_query 注入(inject) - 替换返回的字段

标签 php mysql mysqli

我正在尝试学习和理解 mysql 注入(inject),我已经创建了演示案例。

SELECT ret_variable FROM data WHERE name = '".$name."' AND age = ".$age;

然后 if(ret_variable == 2){something} 但查询最初返回 1,我需要强制它输出 2

如何修改$age变量以设置ret_variable的自定义输出字段(仅在响应中)? 我尝试了几种使用 OR 的方法,但没有成功。

最佳答案

除了学习之外,我没有看到任何实际应用。我假设既然您知道代码,您就有权对此进行测试。那么让我们尝试一下吧!

只有当数据库中有一行 ret_variable 的值为 2 并且您知道该行的名称值时,您才能为 ret_variable 返回 2。例如,您可以输入该名称和以下内容来绕过年龄的正确值。

age AND ret_value = 2

这将创建以下查询:

SELECT ret_variable FROM data WHERE name = 'John' AND age = age AND ret_value = 2;

mysql注入(inject)的原理就是这种对查询的操作。但是您不能强制返回一个值,除非数据库中有一行具有 ret_variable 的该值,并且您可以以某种方式选择该行。

当您不知道名字(或者没有 ret_variable 为 2 的已知名字的记录)时,这是不可能的。

由于 AND 运算符优先于 OR 运算符,因此您无法操作查询以给出 2 作为 ret_variable。这是因为名称 = '?'部分总是会失败。

关于php - mysql_query 注入(inject) - 替换返回的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34300922/

相关文章:

php - mysqli_real_escape_string 安全吗?

javascript - 使用表单将数组值从 javascript 传递到 php

mysql - 我正在尝试从 .csv 加载 mysql 中的数据文件

php - 播种时未找到表

mysql - 将用户信息与消息表连接起来

mysql - 从字段的 mysql 数据库查询中计算现有数组的 Perl 脚本/MySQL 查询

php - 通过Android App注册时Mysql查询出错

php - mysqli::query(): 无法获取 mysqli

php - xampp 和 mysql 表中的所有列在 php 中都是小写的

php - 使用 PHP mt_rand() 而不是 MySQL rand() 以避免查询速度慢