我正在尝试学习和理解 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/