简单了解SQL堆叠注入与二次注入(基于sqllabs演示)

2023-12-29 19:07:43

1、堆叠注入

使用分号 ';' 成堆的执行sql语句

以sqllabs-less-38为例

?id=1'

简单测试发现闭合点为单引号

?id=1' order by 3
?id=1' order by 4

使用order by探测发现只有三列(字段数)

尝试简单的联合注入查询

?id=-1' union select 1,database(),user()--+

可行?

查询id为2的用户名和密码

?id=2

接下来我们使用堆叠注入对id为2的用户的密码进行修改

?id=1';update users set password='myon' where id=2 --+

首先使用单引号将前面语句进行闭合,该语句会正常查询id为1的用户信息;

之后使用分号结束该语句,后面继续追加我们还想执行的语句(更新用户信息)

这里的users、password等我们是可以通过联合注入查出来的,因此这里我就直接用了

我们再次查询id为2的用户信息

?id=2

可以看到密码已经被修改?

这个就是简单的堆叠注入,其实就是使用分号将语句隔开,使得我们可以一次执行多条语句。

2、二次注入

指已存储(数据库、文件)的用户的输入被读取后再次进入到 SQL 查询语句中导致的注入

成因:系统没有对已经存入数据库的数据做检查

以sqllabs-less-24为例

在我们的数据库里有一个用户名为admin,密码为admin的用户

假设我们只知道用户名为admin,并不知道密码

如果输入错误的密码

登录失败

接下来我们通过二次注入实现修改admin的密码

由于页面给我们提供了注册的功能

我们先注册一个用户名为 admin'# 的用户,密码这里设为123

注册成功

使用该账号登录

注意我们现在的身份是admin'#

提示我们可以修改密码

我们修改密码,假设改为12345

提示密码更新成功

我们login out退出

接下来神奇的东西发生了

我们尝试登录admin,密码即为我们刚才修改的密码12345

竟然以admin的身份登录成功了

换句话说,我们刚才对注新册的 admin'# 用户进行密码修改,其实是修改了 admin 的密码

查看本地数据库,也确实如此,也可以看到我们创建的用户和密码

在这个过程中,我们正常创建新用户其实是没有任何问题的,问题出在修改密码,此时查询的本该是用户?admin'# 的信息,但是由于 '#? 闭合了前面,并且将后面的信息进行了注释,导致查到的用户名为?admin?,由于后面关于核对admin密码的信息也被注释掉了,即没有进行校验,从而误认为是admin在进行密码修改。

文章来源:https://blog.csdn.net/Myon5/article/details/135291016
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。