sql注入

简单总结一下sql注入,持续更新中

小tips

1.注入时要注意字符型还是整数型
2.万能注入公式:1’ or ‘1’=’1
3.如果过滤甚至删除某些字段,可以考虑双写注入,如将union写为ununionion
4.union select查找列数时要把1,2,3都列出来
5.联合注入语句
6./check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(flag)frfromom(ctf.Flag) %23

不懂的某些语句详解

1.在SQL数据库中,GROUP_CONCAT函数用于将多行数据按照指定的顺序连接成一个字符串,并以逗号或其他分隔符分隔。它通常与GROUP BY子句一起使用,用于在分组查询中将多个行的值合并为一个字符串。

GROUP_CONCAT函数的基本语法如下:

GROUP_CONCAT(expression [ORDER BY clause] [SEPARATOR separator])
其中,expression是要合并的列或表达式,可以是任何数据类型。ORDER BY子句是可选的,用于指定合并后的结果的排序顺序。SEPARATOR参数也是可选的,用于指定合并后的字符串中的分隔符,默认为逗号。

以下是一个示例,说明GROUP_CONCAT函数的用法: 假设有一个名为students的表,包含学生的姓名和所属班级信息:

+—-+——-+———+
| ID | Name | Class |
+—-+——-+———+
| 1 | Alice | Class A |
| 2 | Bob | Class B |
| 3 | Carol | Class A |
| 4 | David | Class B |
+—-+——-+———+
使用GROUP_CONCAT函数可以将每个班级的学生姓名合并成一个字符串,并以逗号分隔:

SELECT Class, GROUP_CONCAT(Name) AS Students
FROM students
GROUP BY Class;
执行以上查询后,将得到以下结果:

+———+——————+
| Class | Students |
+———+——————+
| Class A | Alice,Carol |
| Class B | Bob,David |
+———+——————+
通过使用GROUP_CONCAT函数,我们可以将多个行的值合并为一个字符串,方便进行分组数据的展示和处理。在实际应用中,GROUP_CONCAT函数常用于生成逗号分隔的列表、拼接字符串等场景。

2.在SQL数据库中,schema_name是用于标识数据库中的模式(schema)的名称。模式是数据库中用于组织和管理对象(例如表、视图、函数等)的逻辑容器。

每个数据库可以包含多个模式,而每个模式可以包含多个对象。通过使用模式,可以将数据库中的对象进行逻辑分组和组织,以便更好地管理和维护数据库。

在不同的数据库管理系统中,模式的概念和用法可能会有所不同。在某些数据库中,模式与用户(user)是紧密相关的,每个用户可以有自己的模式,用于隔离和管理其拥有的对象。而在其他数据库中,模式可以被看作是一个独立的命名空间,用于将对象进行分类和组织。

schema_name通常用于以下场景:

创建对象时,可以指定所属的模式,以便将对象放置在正确的模式中。
引用对象时,可以使用schema_name作为前缀,以明确指定对象所属的模式,避免歧义和冲突。
授予和管理权限时,可以将权限授予特定的模式,以控制用户对模式中对象的访问和操作权限。
在使用schema_name时,需要注意以下几点:

不同的数据库管理系统可能有不同的语法和规范来引用模式名称,例如使用双引号、方括号等。
某些数据库管理系统可能有默认的模式,用于存储系统级别的对象,例如系统表、视图等。
在创建模式和对象时,应该遵循一致的命名规范,以便更好地组织和管理数据库中的对象。
总之,schema_name是用于标识数据库中模式的名称,它在数据库中起到组织和管理对象的作用,有助于提高数据库的可维护性和可扩展性。
3.在SQL中,GROUP_CONCAT函数可以与FROM子句一起使用,用于在查询中将多个行的值合并为一个字符串,并将其作为单个值返回。

当GROUP_CONCAT函数与FROM子句一起使用时,通常是在子查询中使用,以便将多个行的值合并为一个字符串,并将其作为单个值返回到主查询中。这样可以方便地在主查询中使用合并后的字符串进行进一步的查询和分析。

以下是一个示例,说明如何在子查询中使用GROUP_CONCAT函数和FROM子句: 假设有一个名为orders的表,包含订单的信息,其中每个订单可以包含多个产品:

+—-+———+——–+
| ID | OrderID | Product|
+—-+———+——–+
| 1 | 1001 | A |
| 2 | 1001 | B |
| 3 | 1002 | C |
| 4 | 1002 | D |
| 5 | 1002 | E |
+—-+———+——–+
现在我们想要查询每个订单的所有产品,并将其合并为一个逗号分隔的字符串。可以使用以下查询:

SELECT OrderID, (SELECT GROUP_CONCAT(Product) FROM orders o2 WHERE o2.OrderID = o1.OrderID) AS Products
FROM orders o1
GROUP BY OrderID;
执行以上查询后,将得到以下结果:

+———+———-+
| OrderID | Products |
+———+———-+
| 1001 | A,B |
| 1002 | C,D,E |
+———+———-+
在以上查询中,使用了子查询和FROM子句来获取每个订单的所有产品,并使用GROUP_CONCAT函数将其合并为一个字符串。然后将合并后的字符串作为单个值返回到主查询中,以便在主查询中使用。

总之,GROUP_CONCAT函数可以与FROM子句一起使用,用于将多个行的值合并为一个字符串,并将其作为单个值返回到主查询中。这样可以方便地在主查询中使用合并后的字符串进行进一步的查询和分析。


sql注入
http://example.com/2023/11/04/sql注入/
Author
John Doe
Posted on
November 4, 2023
Licensed under