如何解决SQL 查询中的额外引号
我正在研究 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,然后运行另一个,删除用户表。我们以注释 --
结束用户名以防止语法错误,但我们可以做其他事情,只要结果有效,例如 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。