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

1、堆叠注入

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

以sqllabs-less-38为例

?id=1'

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第1张图片

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

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第2张图片

尝试简单的联合注入查询

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

可行 

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第3张图片

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

?id=2

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第4张图片

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

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

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

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

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第5张图片

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

?id=2

可以看到密码已经被修改 

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第6张图片

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

2、二次注入

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

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

以sqllabs-less-24为例

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第7张图片

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

如果输入错误的密码

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第8张图片

登录失败

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第9张图片

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

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第10张图片

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第11张图片

注册成功

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第12张图片

使用该账号登录

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第13张图片

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

提示我们可以修改密码

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第14张图片

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第15张图片

提示密码更新成功

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第16张图片

我们login out退出

接下来神奇的东西发生了

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第17张图片

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第18张图片

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

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

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)_第19张图片

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

你可能感兴趣的:(SQL,web,sql,数据库,web,mysql,web安全)