SQL Injection | SQL 注入分类 —— 数据类型
关注这个漏洞的其他相关笔记:SQL 注入漏洞 - 学习手册-CSDN博客
0x01:数字型注入点
标志结构:
http://xxx.com/users.php?id=1
基于上述形式的注入点,一般被叫作数字型注入点。因为其注入点 id 类型为数字,在大多数网页中,诸如查看用户个人信息,查看文章等,大都会使用这种形式的结构传递 id 等信息,再交给后端,查询出数据库中对应的信息,返回给前端。这一类的 SQL 语句原型大概为:
select * from 表名 where id=1;
若存在注入,我们可以构造出类似于如下的 SQL 语句进行测试:
select * from 表名 where id=1 and 1=1; -> 若页面无变化,则可能存在注入点select * from 表名 where id=1 and 1=2; -> 若页面从有变无,则可能存在注入点
除了上面这种测试方法,我们还可以对数字型注入点拼接上 -
、+
等运行符号,看其后端是否会进行运算,如果后端成功识别并进行运算了,返回了运算结果的页面,也可以判断其存在注入点:
0x02:字符型注入点
标志结构:
http://xxx.com/users.php?name=admin
基于此种形式的注入,因为其注入点 name 类型为字符类型,所以被称为字符型注入点,这一类的 SQL 语句的原型大概为:
select * from 表名 where name='admin';
若存在注入,我们可以构造出类似于如下的 SQL 语句进行测试:
select * from 表名 where name='admin' and 1=1 ;--+' -> 若页面无变化,则可能存在注入点select * from 表名 where name='admin' and 1=2 ;--+' -> 若页面从有变无,则可能存在注入点
值得注意的是这里相比于数字型注入点,多了引号,这个引号可以是单引号,也可以是双引号,而我们需要经过测试使用正确的引号将注入语句拼接进去。
0x03:搜索型注入点
这是一类特殊的注入类型,这类注入主要出现在进行数据搜索时没有过滤搜索参数,一般在链接地址中有"keyword=关键字"
(有的也不显示在链接地址里面,而是直接通过搜索框表单提交,需要我们进行抓包获取)。此类注入点的 SQL 语句原型大致为:
select * from 表名 where 字段 like '%关键字%';
若存在注入,我们可以构造出类似于如下的 SQL 注入语句进行爆破:
select * from 表名 where 字段 like '%测试关键字%' and 1=1; --+ %'; -> 若页面无变化,则可能存在注入点select * from 表名 where 字段 like '%测试关键字%' and 1=2; --+ %'; -> 若页面从有变无,则可能存在注入点select * from 表名 where 字段 like '%测试%' and '%1%'='%1%'; -> 若页面无变化,则可能存在注入点
0x04:XX 型注入点
其他类型的注入点,注入的方式与前面的类型都大同小异,只不过因为其后端的 SQL 语句拼接方式不同,导致我们需要使用各种符号慢慢尝试去进行拼接。一些常见的闭合符号如下:
-
常见的闭合符号:
'
、"
、%
、(
、
针对这种类型的注入点,我们只能去慢慢试,尝试猜测出其后端的拼接方式,再进行进一步的测试,下面举出一个例子:
后端拼接样式: select * from 表名 where id = (("$_GET['id']"))攻击 Payload: id = 1")) or 1=1; #"后端拼接后的样式: select * from 表名 where id = (("1")) or 1=1; #""))