Insert语句在SQL注入中的用法

Insert statement usage in SQL injection

我正在学习 SQL 注入教程。我不明白 SQL 语句的一个方面,它用于确定 table 中的不同列将在网页上显示的位置,然后用于执行语句。之前的一个SQL注入语句已经被用来确定table中的列数为6。SQL语句是

SELECT * FROM TableName Where id=12 union all select 1,2,3,4,5,6

我研究了 SELECT 和 UNION ALL 语句,但无法弄清楚实际发生了什么。我的想法是,第二个 select 语句中的数字代表列号。

用于从 table 获取值的第二条语句是:

SELECT * FROM TableName Where id=12 union all select 1,2,3,4,user(),6

select 1,2,3,4,5,6 和 select 1,2,3,4, user(),6 组件是什么 SQL 注入查询究竟做了什么?

它们不是列号而是值。假设您可以以某种方式注入语句,您现在需要对其进行处理。第一个示例对列进行计数。当没有足够的列时,UNION 将失败。通过向 UNION 添加更多列,该语句最终将执行。现在你知道有多少列了。

第二个是将用户注入 return 结果集。假设由于某种原因结果集显示在屏幕上,您现在有了一个用户名(或服务帐户名),可以使用它在您的数据库上执行更多语句、提升权限或进行服务调用。

它正在做类似的事情。不了解更多就很难知道到底是什么。