当前位置: 首页 > article >正文

如何判断注入点传参类型--理论

注入点传参类型

在我们找到注入点后,首先要判断传参的类型,才能以正确的形式向数据库查询数据。

注入点传参一般分为数字型和字符型。

数字型:当传入的参数为整形时,存在SQL注入漏洞,就可以认为是数字型注入。
字符型:当传入的参数需要引号闭合才能查询时,可以认为是字符型注入。

例如数字型语句:select * from table where id =3
则字符型如下:select * from table where name=’admin’

如何判断传参类型?

我们以sqli-labs的题目为例:

单引号闭合

要我们传入参数id,且参数值为数字:
在这里插入图片描述

我们传参?id=1,搜索到了相应的数据:
在这里插入图片描述

说明我们输入的数据被拼接到SQL查询语句中,在数据库中进行了查询。
如果注入点传参是数字型,根据页面回显猜测一下后端的查询语句:

SELECT name,Password FROM <表名> WHERE id=<我们输入的参数值>;

我们输入数字,该语句就把我们输入的 1 带入到<我们输入的参数值>位置进行了查询。

同样,如果注入点传参是字符型,该查询语句也可能是这样的:

--双引号闭合
SELECT name,Password FROM <表名> WHERE id="<我们输入的参数值>";

--单引号闭合
SELECT name,Password FROM <表名> WHERE id='<我们输入的参数值>';

这样的语句,我们输入整形数 1 ,后端是把 1 用引号包围起来再带入查询语句查询的。

根据可能存在的这几种传参形式,我们采用以下步骤进行测试:

在输入的整形数 1 后面增加单引号 '

如果是单引号闭合,那么语句就会变成:
SELECT name,Password FROM <表名> WHERE id='1'';
我们输入的单引号与前面的单引号组合,导致后面多出了一个单引号,就会导致 后面引号未闭合的错误,从而查询失败,页面报错。

如果是双引号闭合,那么语句是:
SELECT name,Password FROM <表名> WHERE id="1'";
双引号与双引号闭合,我们输入的 1' 被带入数据库查询,且可以匹配到 id=1 的行,查询成功。

如果是数字型传参,那么语句是:
SELECT name,Password FROM <表名> WHERE id=1';
后面多出了一个单引号,导致 引号未闭合的错误,从而查询失败,页面报错。

我们输入?id=1',发现报错:

''1'' LIMIT 0,1' at line 1

也就是 '1'' LIMIT 0,1 处发生了错误,可见是我们输入的 1' 导致后面的单引号未能闭合,说明这里是单引号闭合。

在这里插入图片描述所以后端SQL查询语句应该是:

SELECT name,Password FROM <表名> WHERE id='<我们输入的参数值>' LIMIT 0,1;

如果我们输入?id=1' --+,利用 --+ 将后面的语句注释掉。
语句就变成了:

SELECT name,Password FROM <表名> WHERE id='1' --+' LIMIT 0,1;

有效部分:
SELECT name,Password FROM <表名> WHERE id='1';

查询又能成功进行。
成功判断出注入点类型为单引号闭合的字符型

整型闭合

在输入的整形数 1 后面增加单引号 '

如果是整型闭合,那么语句就会变成:
SELECT name,Password FROM <表名> WHERE id=1';
后面多出了一个单引号,导致 引号未闭合的错误,从而查询失败,页面报错。

在输入的整形数 1 后面增加双引号 "

如果是整型闭合,那么语句就会变成:
SELECT name,Password FROM <表名> WHERE id=1";
后面多出了一个双引号,导致 引号未闭合的错误,从而查询失败,页面报错。

所以如果是整型闭合,我们在后面加引号都会导致报错。

添加双引号报错:
在这里插入图片描述添加单引号报错:
在这里插入图片描述
说明是整形闭合。

单引号+括号闭合

当我们测试是否为单引号闭合时,报错如下:
在这里插入图片描述
我们猜测后端查询语句如下:

SELECT <字段名> FROM <表名> WHERE id=('<参数>');

因此当我们输入 1’ 后语句变成:

SELECT <字段名> FROM <表名> WHERE id=('1'');

导致多出了单引号 ’ 无法闭合,产生错误。

所以我们传参 1’) 并注释掉后面的语句:

SELECT <字段名> FROM <表名> WHERE id=('1')--+');

成功闭合,查询成功。

单引号+单括号闭合 的情况下,
输入的参数以单引号’ 和 ')闭合时,都会导致后面的符号不能闭合而报错。
输入整型数 和 双引号" 则可以带入数据库成功查询。

对双引号+单括号 ") 同理。
同样的,SQL查询中还存在 引号+多重括号 。

判断方法是:
先判断引号的类型是单引号还是双引号。
然后在外层加括号并注释后面的语句,能成功查询的就是正确的闭合方式。


http://www.kler.cn/a/410038.html

相关文章:

  • 分布式搜索引擎之elasticsearch单机部署与测试
  • 力扣第 63 题不同路径 II
  • Ollama使用感想
  • 4——单页面应用程序,vue-cli脚手架
  • Linux入门系列--查阅与统计
  • --- stream 数据流 java ---
  • 蓝网科技临床浏览系统存在SQL注入漏洞
  • HarmonyOS开发者社区有奖征文二期活动开启!
  • ‌Kotlin中的?.和!!主要区别
  • Spring Boot集成MyBatis-Plus:自定义拦截器实现动态表名切换
  • 【AI】基础原理
  • 第三百三十一节 Java网络教程 - Java网络UDP多播
  • PyTorch 分布式并行计算
  • 使用Go语言实现线程安全的Map
  • 区块链网络示意图;Aura共识和Grandpa共识(BFT共识)
  • 通过 LangChain 使用 GPT 生成创意项目:详细教程
  • 完全二叉树的基本操作(顺序存储)
  • uniapp中uni-popup在小程序中滚动穿透问题
  • 不同查询构建器的使用方式(Mybatis、Mybatis-Plus、Mybatis-Flex、Spring Data JPA、QueryDsl)
  • Softing线上研讨会 | Ethernet-APL:推动数字时代的过程自动化