Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
带有意外加号的MySQL查询_Mysql_Sql_Sql Injection - Fatal编程技术网

带有意外加号的MySQL查询

带有意外加号的MySQL查询,mysql,sql,sql-injection,Mysql,Sql,Sql Injection,我正在使用一个工具来扫描我的应用程序中潜在的SQL注入漏洞。我遇到一个测试,它在表单字段中发送以下内容: + (SELECT 0 FROM (SELECT SLEEP(10))qsqli_1111) 这将导致对MySQL数据库进行如下查询: SELECT * FROM SomeTable WHERE SomeField IN (+ (SELECT 0 FROM (SELECT SLEEP(10))qsqli_1111)) 该工具正确地推断出可能存在SQL注入漏洞,因为查询比发送简单值花费的时

我正在使用一个工具来扫描我的应用程序中潜在的SQL注入漏洞。我遇到一个测试,它在表单字段中发送以下内容:

+ (SELECT 0 FROM (SELECT SLEEP(10))qsqli_1111)
这将导致对MySQL数据库进行如下查询:

SELECT * FROM SomeTable
WHERE SomeField IN (+ (SELECT 0 FROM (SELECT SLEEP(10))qsqli_1111))
该工具正确地推断出可能存在SQL注入漏洞,因为查询比发送简单值花费的时间长10秒。i、 e.SLEEP10正在执行

我的问题是:这个语法实际上做什么?加号在做什么?什么是qsqli_1111?为什么要从中选择0


我试过用谷歌搜索mysql语法加号和qsqli_1111,但没有找到任何结果。我不知道要在MySQL手册或其他地方查找什么…

优点是连接。这样他们就可以在语句中运行额外的sql。他们还将使用或。选择0只是因为它返回0。最后一部分我相信是化名。您应该在执行sql之前准备sql。绝不允许在服务器上直接运行sql

因为+是一元运算符,几乎什么也不做。我想它会把任何值转换成一个数字。它类似于-,但不改变符号

在本例中,它正在对子查询的结果执行某些操作。当然,结果已经是一个数字了。它可能会愚弄优化器,因此子查询不会被优化。这是猜测


qsqli_1111更容易解释。这是一个表别名,需要它来防止语法错误。

我不知道加号,但对于其余部分:qsqli_1111是一个子查询别名,因为它在语法上是强制性的,选择0只是从该子查询中选择某个内容的一种变通方法。在本例中,sleep10函数将运行。名称qsqli_1111可能来自您正在使用的连接或添加工具。加号将确保无论in运算符中的数据类型如何,子查询都不会导致语法错误。在Mysql中,“+”只是加法,而不是concatenationselect+'02bc'->'02bc'。负数确实可以转换成一个数字,但+似乎什么都不做。这里是否缺少开关/sql模式?有趣的是,您可以使用“-”转换为数字,而无需更改符号。不过,要小心双减号后面的多余空格。示例:选择-'01A'->1