sql注入的学习
sql注入的学习
首先先要判断注入类型
可以按照查询字段分类分为字符型 和 数字型
在get请求中区分这两种类型方法:
如果是字符型闭合,那就接着判断闭合方式
如果有报错文:
可以在输入的参数下+\
例如这样:
我们可以十分清楚的看到\后面的为一个单引号,所以这个题目就为单引号闭合
为什么要知道闭合方式?
因为当我们知道闭合方式之后,我们可以将原先系统内置的sql语句进行闭合。根据mysql的语法,我们在后面在加入一条sql语句,这条我们加的sql语句也是会继续执行的,从而进行sql注入
1.union注入
在前面步骤做完之后,我们需要判断它表中有多少列,要与之对应
因为在union联合查询的时候如果查询的两个列数不同的话,是查询不出结果的。
在我们判断完列数之后要进行显示位判断
因为显示的原因,它只显示第一个查询的内容,我们要看显示位,可以把id改成一个不存在的就行了
在这里我们可以看到显示位是2和3,所以我们可以用查询语句来替换2和3的位置,来显示我们要的查询结果
2.报错注入
有以下几种报错注入相关的函数:
我们通常是在我们union注入代码正确但是却没有回显的时候,这个时候我们就可以考虑报错注入
报错注入有很多种函数,我们先来学习简单的
extractvalue函数:
extractvalue函数包含两个参数,它的本身用途是查询
第一个参数是目标文档,第二个是目标路径
这些并不是很重要,我们要了解的是当我们参数路径写错查找不到内容的时候,它是不会报错的,但是它对参数的格式符号是很敏感的,而且它返回的报错信息是会返回我们输入的参数路径,我们就可以利用这个来获取数据库的信息
我们看它的报错信息,是不是将路径原文返回
所以我们可以将它和括号里面优先查询的原则,将我们需要的信息返回
select extractvalue(1,concat(0x7e,(select database())))
concat 的作用就是将第一个参数跟第二个参数连接起来
0x7e就是~
这个相当于就是我们查询到数据库的名字之后,这个名字又变成了目标路径,然后报错之后进行返回,我们就可以得到想要的信息了