sql基本操作
基本查询语句


union
(必须得是前面的列与后面的列相同才可以查询)
 看第二局uses表中的列有3列,而emails中的列只有两列,所有无法成功查询
看第二局uses表中的列有3列,而emails中的列只有两列,所有无法成功查询

这就相当于我们再加了一列

group by (分组)

相当于将其分为10列,如果*(也就是所有的列)有10列就不会报错,如果没有十列就会报错
order by(排序)

 它就会对第三列进行排序
它就会对第三列进行排序
limit

group_concat

令多行变一行

sql注入流程
sql注入的分类

判断注入为字符型还是数字型
1.

当改为and 1=2还不会报错的话就是字符型
2.

如果是字符型,查出来的结果就业id=2时的相同,如果是数字型,就会与1的相同
闭合方式

首先查看是怎么样的闭合方式
1.(有报错的情况)

先给他丢一个单引号,然后看看报错
 然后从这里分析是这么闭合的
然后从这里分析是这么闭合的
2.没有显示报错的情况

当正常输入id=1,它会正常的回显

当加上单引号就没有回显

这又正常了,说明为单引号闭合
注释语句

判断列数(group by ,order by)

当为4 时报错

当为3时不报错说明列数就是3
找回显


将前面的id改为-1或者其他数然后他就无法查询到东西,就会输出后面的回显
然后我们发现回显2,3都能在上面找到,我们就可以把3,改成需要找的东西

找数据库名

找表名

获取所有表

但这样给出的表太多了,所以我们将范围缩小到当前数据库
 4
4
获取列名

这样显示的更加简洁

获得最终数据
 可以用分隔符,更简洁
可以用分隔符,更简洁

数字型
查表面


报错注入

当我正常访问它,它是这个页面,当我错误的访问它,他也是这个页面,没有报错信息,
前面的步骤都有报错,只有这个没有

我们先这么执行
然后修改url将其改成错误的,让其报错

他就会显示出来
通过extractvalue报错注入

doc是列名,xml是表名,中间那个不用管
让它报错


concat是连接的意思,0x7e是-符号,让其变成上面的样子



但是这个只能回显32个字符
所以我们使用substring

updatexml
用来更新的

doc是查询的列名,中间是想要修改的东西,第三个是修改后的东西

但是也一样只能显示30个字符

floor报错
前提知识
select
s
rand()函数

floor函数



concat_ws函数

group by 函数
 cout()函数
cout()函数


它会给你统计出来分组后 的个数



原理可以去看视频


注入语句



想查询的东西与后面的information-schema。。。。没有任何关系,他只是想让它报错。。。
学的不怎么样
布尔盲注
条件:当既没有回显,也没有报错的时候

前提知识

他只会解析第一个字母

它会显示数据库名字第一个字母,但它无法回显出来,所以我们可以使用<,二分法来判断他在哪一个区间

117不行

而115可以,然后在改变数字



时间盲注

 

if函数

当1=1为真就执行0秒,当1=1为假就执行3秒

看时间的长短

