SQL 查询中的额外引号
Extra Quotation Mark in SQL Query
我正在研究 SQL 注入,我在这个网站上得到了以下示例:
https://owasp.org/www-community/attacks/SQL_Injection
考虑到是专业网站,代码应该不会出错。
来自网络的文字:
以下 C# 代码动态构造并执行 SQL 查询,用于搜索与指定名称匹配的项目。
string query = "SELECT * FROM items WHERE owner = "'"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
查询是通过连接常量基本查询字符串和用户输入字符串动态构造的,只有当 itemName 不包含单引号字符时查询才会正确运行...
但是,我无法理解代码,因为我注意到 =
之后有一个额外的 "
代码应该是:
string query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
如果我错了,有人可以告诉我吗?谢谢。
是的,你是对的,这个字符代表他们打错了;它甚至不会在 C# 中编译,并且不应该存在:
string query = "SELECT * FROM items WHERE owner = "'"
^
如果我们让它更简单,只有一个变量,可能更容易看到 SQL 注入:
var sql = "INSERT INTO users VALUES('" + username + "');"
当 username
为 Sys_Glitch
时,这工作正常,SQL 变为:
INSERT INTO users VALUES('Sys_Glitch');
当用户名是 Hah'); DROP TABLE Users;--
时出现问题:
INSERT INTO users VALUES('Hah'); DROP TABLE Users;--');
我们已经说服该应用构建一个有效的 SQL,方法是输入用户名,然后输入更多字符以完成 SQL INSERT,然后 运行 另一个字符,删除用户 table。我们以注释 --
结束用户名以防止语法错误,但我们可以做其他事情,只要结果有效,例如 Sys_Glitch'); UPDATE Users SET Role='Admin' WHERE Name = 'Sys_Glitch
,它不仅会插入用户,还会升级他们管理。
INSERT INTO users VALUES('Sys_Glitch'); UPDATE Users SET Role='Admin' WHERE Name = 'Sys_Glitch');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This part is from the text supplied by the user
我正在研究 SQL 注入,我在这个网站上得到了以下示例:
https://owasp.org/www-community/attacks/SQL_Injection
考虑到是专业网站,代码应该不会出错。
来自网络的文字:
以下 C# 代码动态构造并执行 SQL 查询,用于搜索与指定名称匹配的项目。
string query = "SELECT * FROM items WHERE owner = "'"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
查询是通过连接常量基本查询字符串和用户输入字符串动态构造的,只有当 itemName 不包含单引号字符时查询才会正确运行...
但是,我无法理解代码,因为我注意到 =
之后有一个额外的 "
代码应该是:
string query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
如果我错了,有人可以告诉我吗?谢谢。
是的,你是对的,这个字符代表他们打错了;它甚至不会在 C# 中编译,并且不应该存在:
string query = "SELECT * FROM items WHERE owner = "'"
^
如果我们让它更简单,只有一个变量,可能更容易看到 SQL 注入:
var sql = "INSERT INTO users VALUES('" + username + "');"
当 username
为 Sys_Glitch
时,这工作正常,SQL 变为:
INSERT INTO users VALUES('Sys_Glitch');
当用户名是 Hah'); DROP TABLE Users;--
时出现问题:
INSERT INTO users VALUES('Hah'); DROP TABLE Users;--');
我们已经说服该应用构建一个有效的 SQL,方法是输入用户名,然后输入更多字符以完成 SQL INSERT,然后 运行 另一个字符,删除用户 table。我们以注释 --
结束用户名以防止语法错误,但我们可以做其他事情,只要结果有效,例如 Sys_Glitch'); UPDATE Users SET Role='Admin' WHERE Name = 'Sys_Glitch
,它不仅会插入用户,还会升级他们管理。
INSERT INTO users VALUES('Sys_Glitch'); UPDATE Users SET Role='Admin' WHERE Name = 'Sys_Glitch');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This part is from the text supplied by the user