sql注入基础

什么是注入?

所谓sql注入,就是通过把sql命令插入到web表单提交或者输入域名或页面请求的查询字符串,最终到达欺骗服务器执行恶意的sql命令,从而进一步得到相应的数据信息

通过构造一条精巧的语句,来查询想要得到的信息

emmm上面这句话就

好比一个女孩和一个男孩去相亲,但是女孩总不能直接上来就问你有车吗有房吗,所以这时候女孩“构造一条精巧的语句”来查询她想要得到的信息(男孩有车吗有房吗)

女孩可以问男孩平时喜欢做什么事情,那如果男孩说喜欢自驾游,那就说明了男孩有车这个信息了

.....

注入分类:

1)按照查询字段:

  1. 字符型:当输入的参数为字符串整形时,可以认为是字符串型注入
  2. 数字型:当输入的参数为整形时,可以认为是数字型注入

按照注入方法:Union注入、报错注入、布尔注入、时间注入

 

什么是注入点

注入点是实行注入的地方,通常是一个访问数据库的连接。

 

 

怎么判断是字符型注入还是数字型注入

假设id=1,名字是大壮 id=2,名字为小明

使用 and 1=1 和 and 1=2 来判断

在url输入?id=1 and 1=1    /  ?id=1 and 1=2

如果提交 and 1=1 和提交 and 1=2 都能显示正常页面,则不可能是数字型注入,即字符型注入

如果提交and 1=1 的时候可以显示正常画面,而提交 and 1=2 的时候不能显示正常页面,则是数字型注入

 也可以用减法,比如,输入?id=2 的时候显示的画面是小明, 这时候输入 ?id=2-1,如果显示的画面是大壮,说明就是数字型注入,否则就是字符型,因为字符型无法做减法

至于为什么不用加法,是因为在sql中,加号+有时候会被当成空格符处理

 

如果是数字型就不需要关心闭合方式了,如果是字符型就要知道是哪种闭合方式

如何判断闭合方式:

如果输入?id=1'''(3个单引号),报错内容为near 1''''多了一个’,所以闭合符为 ‘

如果输入?id=1'''(3个单引号),报错内容为near 1'''')多了一个’),所以闭合符为 ‘)

 

 

闭合的作用:

手工提交闭合符号,结束前一段查询语句,后面即可加入其他语句,查询需要的从桉树,不需要的语句可以用注释符号“--+” 或 “#” 或 “%23”注释掉

注释掉意图为:利用注释符号暂时将程序脱离允许,把某段程序“注释掉”,就是让他暂时不运行(而不是删除掉)

 

union联合注入

 

使用union要注意前后的列数要相同

 像这样子输入 id=1' union select database() --+ 就会出现报错,因为此时union前后的列数不同,

所以要先知道union前面的列数为多少,可以用group by 或者 order by 进行二分法查询,就是 先group by 10,看一下是否成功,失败的花就 group by 5 ....  以此类推,直到找到列数,

假设找到的列数为3

注:如果用group by出现一些错误页可以用order by  使用group by是因为group by不会被防火墙发现

命令:?id=1' union select 1,2,3 --+

1,2,3就是占位置,让union后面的列数和前面的列数保持一致

假设现在数据库有2行,如下

id  usename  password

1  benben   good

1  2      3

接着就要查询 回显位

有时候页面只会出现一个内容(比如第一行(1,benben,good)),第二行的内容是不显示的,所以如果要查看第二行的话,可以修改命令为:?id=-1' union select 1,2,3 -++,把id改为数据库不存在的数据即可

 可以发现,2和3都是可以回显的,所以就可以利用2和3这2个位置来查询你想要的信息(1位置则无法利用,因为没有回显),比如查询数据库名

输入命令:?id=1' union select 1,2,database() --+

 可以发现,数据库名为security

 

小结步骤:

1、查找注入点

2、判断是字符型注入还是数字型  比如 and 1=1 或者 and 1=2 /   ?id=3-1

3、如果是字符型注入,则要找到是哪种闭合方式     '   "    ')    ")

4、查询列数  group by 或者 order by

5、查询回显位置      id=-1

posted @ 2023-09-09 22:28  Xuraniiiz  阅读(54)  评论(0)    收藏  举报