微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL 查询中的额外引号

如何解决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 + "');"

usernameSys_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 举报,一经查实,本站将立刻删除。