目录
1 二次注入概述
1.1 定义
- 定义:在将数据(一次注入的)存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。
- 例子:在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。
1.2 思路
- 黑客通过构造数据的形式,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令。
- 服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。
- 黑客向服务端发送第二个与第一次不相同的请求数据信息。
- 服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的SQL语句或者命令在服务端环境中执行。
- 服务端返回执行的处理结果数据信息,黑客可以通过返回的结果数据信息判断二次注入漏洞利用是否成功。
2 二次注入实验简介
2.1 实验平台
- 靶机:CentOS7安装docker,利用docker部署sqli-labs来作为实验平台。具体部署过程可以参考文章《Docker上搭建sqli-labs漏洞环境》。
- 真实机:本实验利用火狐浏览器来实现,为方便注入过程的编码,建议安装一个扩展插件harkbar,安装过程参考《HackBar免费版安装方法》由于该教程中的2.1.3harkbar我安装后无法正常使用,就安装了HackBar Quantum来代替。
- 靶机与真实机桥接到同一局域网中。
2.2 实验目标
- 使用二次注入修改第24关数据库原有账号的密码;
- 查询该账号密码是否修改成功。
3 二次注入实验步骤
3.1 前戏
- 真实机打开火狐浏览器,访问靶机IP地址,出现下图,可以不重置实验平台,直接点击Page2进入找到第24关实验。
- 找到第24关进入,初始界面如下:
3.2 目标账户admin
- 点击此处可建立我们待会要黑掉的账号admin。
- 新建账户admin,密码为admin。
- 注册时提示该用户已存在,在后续的二次注入中将会修改其密码。
3.3 第一次注入
- 这里的第一次注入其实就是新建账户的过程,再次进入注册账户。
- 注册新用户账号名为
admin'#
,密码随意,此处取123
。
- 注册后进入到该页面,等待5秒后将重定向到登录界面。
3.4 第二次注入
- 第二次注入的目的是让后台数据库读取刚刚第一次注入账号的内容。
- 登录账户admin’#。
- 重置该账户密码,输入现有密码123,输入想要更改的目标密码,123456(随便一个都可以)。点击reset。该操作会激活后台数据库更改密码的语句
update语句+where name = 'admin'#'
该语句的where条件调用了第一个注入的账户,由于该账户中有单引号和井号,单引号与前第一个单引号成功闭合,井号注释掉了后面的单引号,该密码修改语句其实修改的是账户admin的密码。
- 弹出密码修改成功,点击home回到主页面。
3.5 实验结果
退出刚刚的账号,使用账号admin和密码123456登录,登录成功。
3.6 扩展
该实验的关键在于第一次注入时的账户名能成功闭合语句后的单引号,同理地还可以构建其他账户名,如admin' and '1
。
4 总结
- 理解二次注入的思路;
- 掌握二次注入的方法。