Mysql 作为 GET 参数发送时查询中断
Mysql query breaking when sent as GET parameter
我正在测试课程中的盲目布尔值 SQL 注入端点,但在确定我的有效负载出错的位置时遇到了一些问题。
我已经在目标框 mysql
shell 中测试了下面的内容并且它有效。
GRANT/**/ALL/**/ON/**/*.*/**/TO/**/root@localhost;
但是当我在 q
GET
参数中提交它时,我在应用程序中遇到错误。
php?q=off')/**/or/**/GRANT/**/ALL/**/ON/**/*.*/**/TO/**/root@localhost%23
我用 '1'='1'
测试了一个基本的布尔语句,它工作正常所以我假设我的实际查询在 URL.
的上下文中有问题
q=off')/**/or/**/'1'='1'%23
我也尝试过对负载 url 进行编码,但仍然存在相同的问题。
知道是什么原因造成的吗?
使用SQL 注入来组合部分表达式,例如
OR '1'='1'
作为其他一些查询的一部分是有效的,因为有很多方法可以将额外的表达式语法附加到现有的 SQL 查询中,该查询已经有一个 WHERE 子句。
例如,在下面的示例中很容易看出如何将附加表达式附加到第一个查询,并且它仍然是一个合法的表达式。
SELECT * FROM mytable WHERE col1 = 'off'
SELECT * FROM mytable WHERE col1 = 'off' OR '1'='1' -- '
但是 GRANT 本身就是一个语句。它不能像那样附加到另一个查询。无法将 GRANT 与 SELECT 语句结合使用。
SELECT * FROM mytable WHERE col1 = 'off' OR GRANT ALL ON *.* TO ...
这不是合法的 SQL 查询。您可以研究online syntax reference for SELECT和其他类型的语句。
SQL 注入的工作原理是诱使应用程序执行一个 SQL 语句,该语句的语法与最初预期的 SQL 语句不同。但它不能使 invalid 语法起作用!
我正在测试课程中的盲目布尔值 SQL 注入端点,但在确定我的有效负载出错的位置时遇到了一些问题。
我已经在目标框 mysql
shell 中测试了下面的内容并且它有效。
GRANT/**/ALL/**/ON/**/*.*/**/TO/**/root@localhost;
但是当我在 q
GET
参数中提交它时,我在应用程序中遇到错误。
php?q=off')/**/or/**/GRANT/**/ALL/**/ON/**/*.*/**/TO/**/root@localhost%23
我用 '1'='1'
测试了一个基本的布尔语句,它工作正常所以我假设我的实际查询在 URL.
q=off')/**/or/**/'1'='1'%23
我也尝试过对负载 url 进行编码,但仍然存在相同的问题。
知道是什么原因造成的吗?
使用SQL 注入来组合部分表达式,例如
OR '1'='1'
作为其他一些查询的一部分是有效的,因为有很多方法可以将额外的表达式语法附加到现有的 SQL 查询中,该查询已经有一个 WHERE 子句。
例如,在下面的示例中很容易看出如何将附加表达式附加到第一个查询,并且它仍然是一个合法的表达式。
SELECT * FROM mytable WHERE col1 = 'off'
SELECT * FROM mytable WHERE col1 = 'off' OR '1'='1' -- '
但是 GRANT 本身就是一个语句。它不能像那样附加到另一个查询。无法将 GRANT 与 SELECT 语句结合使用。
SELECT * FROM mytable WHERE col1 = 'off' OR GRANT ALL ON *.* TO ...
这不是合法的 SQL 查询。您可以研究online syntax reference for SELECT和其他类型的语句。
SQL 注入的工作原理是诱使应用程序执行一个 SQL 语句,该语句的语法与最初预期的 SQL 语句不同。但它不能使 invalid 语法起作用!