在 SQL SELECT 查询中包含字符串是什么意思

问题描述

如果问题过于简单且过于冗长,我深表歉意

我一直在研究 SQL 注入攻击的基础知识,有一次,我读到了在 UNION SQL 注入攻击中验证特定字段的数据类型的一种潜在方法是对请求进行某些更改我们制作到目标服务器。

所使用的软件是 BurpSuite,目标是网站 https://portswigger.net 上的练习实验室。据说category字段存在漏洞,查询category返回两个字段,所以在我们发送给服务器的HTTPS GET消息的category部分添加了下面的“代码”,试图知道第一个字段的数据类型

...?category=Gift'+UNION+SELECT+'abc',NULL+FROM+table_that_contains_target_information--

根据实验室手册,我们对 'abc',NULL 部分所做的是验证“table_that_contains_target_information”中的第一个字段的类型为 string/varchar。这似乎有效并有助于确定该特定字段的数据类型,正如我在实验室中检查过的那样,因为如果第一个字段的数据类型不是字符串/varchar,我将收到内部服务器错误。

但是,后来在通用数据库上执行查询以检查'abc',NULL部分在通用SELECT查询中的作用时,得到的结果有些不同。 一般数据库问题是一个可用于在 https://www.w3schools.com/mysql 学习 SQL 的问题。它有一个名为 Customers 的表,其中包含多个字段。我知道第一个字段是一个整数(通过使用 information_schema.columns 进行验证),其余的都是 varchars。对于上下文,在Customers 表中,CustomerID 是一个整数字段,而CustomerName 是一个varchar 字段。我在服务器上运行了以下查询

|-------This part is the original query-------||This is our inserted code to find out information about the database|
SELECT CustomerID,CustomerName FROM Customers UNION SELECT 'abc',NULL FROM Customers

免责声明:我的目的不是对数据库造成任何伤害,只是为了学习一些SQL

根据我从实验室手册中学到的知识,我应该得到某种错误,对吗?,因为我正在检查不道德黑客可能采用的方法中的字段的数据类型。但是,我得到的只是原始查询的结果和一个值为 'abc' 的额外记录,第二个字段为 NULL。

我曾尝试阅读有关 SQL 中 SELECT 查询的文档,但据我所知,它们中的大多数都讲述了一般的 SELECT * FROM table_nameSELECT column_name,other_column_name FROM table_name。我找不到有关 SELECT 'abc' FROM table_name 的任何信息。

谁能解释一下这里发生了什么? SELECT 'abc' FROM table_name 是否只是给我一个带有“abc”的额外记录?如果是这样,那么为什么在 https://portswigger.net 的实验室中使用相同的查询来验证数据类型,而且它似乎在那里发挥了作用。

感谢您提前回答!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)