一、二阶注入的原理
1、二阶注入也称为SOL二次注入。
2、二次注入漏洞是一种在Web应用程序中广泛存在的安全漏洞形式:相对于一次注入漏洞而言,二次注入漏洞更难以被发现,但是它却具有与一次注入攻击漏洞相同的攻击威力。
3、简单的说,二次注入是指已存储(数据库、文件)的用户输入被读取后再次进入到 SOL查询语句中导致的注入。
4、网站对我们输入的一些重要的关键字进行了转义,但是这些我们构造的语句已经写进了数据库,可以在没有被转义的地方使用。
5、可能每一次注入都不构成漏洞,但是如果一起用就可能造成注入。
二、二阶注入与普通注入的区别
1、普通注入:
在http后面构造语句,是立即直接生效的
一次注入很容易被扫描工具扫描到
2、二次注入:
先构造语句(有被转义字符的语句)
我们构造的恶意语句存数据库
第二次构造语句(结合前面已经存入数据库的语句,成功。因为系统没有对已经存入数据库的数据做检查)
二次注入更加难以被发现
三、二阶注入的条件
1、用户向数据库插入恶意语句(即使后端代码对语句进行了转义,如mysql-escape_string、mysql_real_escape_string转义)
2、数据库对自己存储的数据非常放心,直接取出恶意数据给用户
四:二阶注入的步骤
二次注入,可以概括为以下两步:
第一步:插入恶意数据
进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的
数据。
第二步:引用恶意数据
开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进
行进一步的检验的处理。
五:二阶注入的代码分析
1、首先看注册的代码cat login_create.php
2、再来看修改密码的代码pass_change.php
如果修改的username是admin‘-- -那么实际上我们修改的是admin的password
也就是说我们注册了一个admin’-- -这样的一个用户,但修改可以修改admin的密码
六:二阶注入演示-sqli-labs less-24
第一步:注册一个admin’-- -,注意,后面这个-表示前面是一个注释,因为注释必须是空格才能生效
第二步:用admin‘-- -用户登入,修改admin’-- -密码
修改完成后会发现admin‘-- -的密码还是123456(原因是单引号后面的注释掉了,修改的就是admiin的密码)
而admin的密码变成了ssssss
这就是二阶注入的特点
理解是:首先注册一个恶意的用户,修改密码时是修改是本身用户密码,从而达到了注入效果