第四章 SQL注入
1.SQL注入基本概念和原理
核心思想就是:大胆猜测后台是以什么样的方式去处理的,通过类型来构造合适的闭合。
2.从一个数字型注入认识sql注入漏洞
场景演示:
随便选一个测试一下
可以看出这是post类型的,因为它并没有在url里传参
逻辑:
我们提交了一个id,后台返回来一个名称和邮箱。用户的所有信息是存放在数据库里的,我们输入了id,后台应该做了相应的查询。
select 字段1,字段2 from 表名 where id=1;
打开命令行进行操作,查看一下
因为1=1永远为真,那么or 1=1会把表里的所有数据全部遍历出来
我们通过抓包来看一下(post请求一般使用抓包的形式来做测试)
发送到repeater做重放的测试
我们可以看到,输入or 1=1后,这个页面上所有用户的信息都显示出来。
这个地方是有注入点的,是可以通过一些合法的sql语句进行注入的。这是最简单的注入。
查看后端的代码
3.字符型注入
场景演示:
测试一下功能
输入存在的用户出现上面的,不存在的就是下面的样子
逻辑:
因为输入的这个名字相当于一个字符串,字符串是需要用单引号进行包裹的。见到单引号,我们可以想到用单引号进行闭合来实现我们的注入。
先输入一个名字,加一个单引号把前面的单引号闭合掉,再输入or 1=1 ,因为后面也有单引号,我们可以添加一个注释符把单引号注释掉。
把构造好的语句输入
出现所有的信息
这个是get型的,所以会在url里面进行传参。(只不过会进行编码处理)
看一下后端的代码
4.搜索型及xx型sql注入
搜索型场景演示:
测试一下功能
输入一个字符,查询出相关信息,应该是使用了数据库的搜索功能,匹配型查询(like),模糊匹配
查看一下源代码
我们可以看到,它与数字型和字符型的不同点在于,拼接变量进去的时候,是被单引号和百分号包裹的。我们同样可以通过这个来构造闭合。
构造一下
输入一下
出现所有信息
xx型注入场景演示
查看一下源代码
我们可以看出,这个拼接处使用单括号和单引号进行包裹的。
我们的拼接方式多种多样,比如单引号、双引号、括号或者组合形式出现
构造一下
输入一下
出现所有信息
结合字符型注入来介绍一些简单的判断机制
可以用or 1=1;and 1=1等来进行判断
直接输入单引号会出现页面的报错,通常出现了报错就说明有注入点(报错机制),我们就可以进行注入拼接。
5.union注入
一些基础函数
如何猜测字段数(因为union后的字段数需要和前面的主查询一样)
order by语句
说明只有两列(只有两个字段)
正常执行,没有报错
可以随意去查询一些东西