一、二次注入
二次注入漏洞是一种在 Web 应用程序中广泛存在的安全漏洞形式。相对于一次注入漏洞而言,二次注入漏洞更难以被发现,但是它却具有
与一次注入攻击漏洞相同的攻击威力。
1、二次注入原理
在第一次进行数据库插入数据的时候,仅仅只是使用了addslashes 或者是借助get_magic_quotes_gpc 对其中的特殊字符进行了转义,
但是 addslashes 有一个特点就是虽然参数在过滤后会添加 “\” 进行转义,但是“\”并不会插入到数据库中,在写入数据库的时候还是
保留了原来的数据。
在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行
下一步的检验和处理,这样就会造成 SQL 的二次注入。
比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。
二次注入原理,主要分为两步:
第一步:插入恶意数据库
第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行转义,在写入数据库的时候还保留了原来的数据,但是,数据本身包含恶意
内容。
第二步:引用恶意数据
在将数据存入到数据库中后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一
步的校验和处理。
这样就造成sql二次注入。
二、黑盒环境下进行二次注入
先确定测试的网站是否进行过滤,一般情况下网站都会对输入的参数进行过滤,然后寻找可能会带入恶意数据二次使用的地方。
例如用户注册->修改密码、邮箱注册->修改密码、文章添加->文章编辑。找一切存在二次使用的功能点。二次注入测试 SQL 注入,二次注入
多数是字符型注入,所以要注意闭合问题。
现在注册用户 a’,再分别注册用户 a' and 1=1# 、a' and 1=2# 再来可能触发的地方。
1、查看数据库中账号、密码
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| challenges |
| cms |
| mysql |
| performance_schema |
| security |
+--------------------+
6 rows in set (0.00 sec)
mysql> use security;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+--------------------+
| Tables_in_security |
+--------------------+
| emails |
| referers |
| uagents |
| users |
+--------------------+
4 rows in set (0.00 sec)
2、二次注入实验
2.1、注册账号 a
2.2、注册账号 a’ and 1=1#
2.3、通过修改 a’ and 1=1# 的密码,来修改 a 的密码
2.4、a’ and 1=2# 无法修改
3、修改 admin 的密码
3.1、注册账号 admin’#
3.2、修改 admin’# 密码