0
点赞
收藏
分享

微信扫一扫

5-3字符型的注入的讲解和演示

君之言之 2022-05-01 阅读 36
#演示:pikachu—SQL-Inject-字符型注入#

我们选择字符型注入,随便输入一个值,kobe

在这里插入图片描述

它告诉我们uid和email,当我们输入不存在的时候,111,它会提示我们

在这里插入图片描述

username不存在,这是个正常的功能 ,我们看到它是在url里面提交的,是个get请求

我们猜想一下后台是怎么运行的,它这个地方,让我们输入名字,名字一般是字符串

在后台,肯定是到数据库查询,

select 字段1,字段2 from 表名 where username='kobe';

其实这个username不一定是叫username,我们在这里假设,叫username

字符串不打单引号是会报错的,我们可以在数据库看一眼,

select id,email from member where username=kobe;

在这里插入图片描述

会报错,因为字符串要用单引号和双引号来做处理的,

select id,email from member where username='kobe';

在这里插入图片描述

会查询出对应的信息,我们查询出来拼接的是字符串的话,我们可以猜想到,它后端去拼接sql的时候,肯定是用单引号做处理的

通过$_GET获取到我们的输入,把这个输入赋值给一个变量,

$uname=$_GET['username']

所以说,我们在构建测试payload的时候,没有考虑到单引号,是有问题的,

kobe or 1=1

我们这样去测,是没有效果的,点查询

在这里插入图片描述

显示我们指定的用户不存在,因为这一整个整体,都会被当作字符串,当作用户名查询,这个用户名是不存在的,其实跟我们讲的xss逻辑差不多,也就是我们要构造闭合,构造合法的sql语句,来绕过后台来执行,

kobe' or 1=1#

用单引号是为了闭合前面的单引号,然后在or 1=1,后面还有一个单引号,我们可以通过数据库里面的注释,把它注释掉,在mysql里面,可以通过#,–来把后面的东西注释掉

我们把它拼接进去,这一整段,就会变成

select 字段1,字段2 from 表名 where username='kobe' or 1=1#';

我们测试一下payload,点查询

在这里插入图片描述

就直接把数据库表里面的东西给遍历出来了,当然,我们在url提交的话,我们的payload要做url编码

我们来看一下后端的代码

在这里插入图片描述

获取前端输进来的name,在构造sql语句的时候,直接username等于字符串,因为是字符串,所以用单引号做处理,然后拼接进去,跟我们之前讲数字型一样,唯一的区别是,在拼接变量的时候,用了一个字符串,用单引号把它做为一个字符串,所以在这种类型下,出现的注入,我们认为是字符型注入

举报

相关推荐

0 条评论