-
概念:
Stacked injections:堆叠注入。从名词的含义就可以看到应该是一堆SQL语句(多条)一起执行。而在真实的运用中也是这样的,在mysql中,主要是命令行中,每一条语句结尾加分号;来表示语句结束。
-
堆叠注入使用条件
堆叠注入的使用条件十分有限,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysql_multi_query()函数,其只能执行一条语句,分号后面的内容将不会被执行。
任务一:基于GET型的堆叠注入
1、页面提示我们将id作为参数,我们加入参数后,在值后面加入特殊字符,比如单引号,来测试是否具有sql漏洞,且测试参数为字符型还是数字型:localhost/sqli-labs-master/Less-38/?id=1'
2、我们尝试在当前查询后面加入分号,构造下一条sql语句。比如此处我们创建一个新的数据表,表中有一个列为id:localhost/sqli-labs-master/Less-38/?id=1';create table less38(id int(3))%23
3、我们来到后台phpstudy中的mysql命令行,来验证是否sql语句执行成功。
mysql>show databases;
mysql>use security
mysql>show tables;
可以看到语句成功执行,创建了less38的数据表
4、查询sql语句所在的数据库为security,数据表为users,列名分别为id、username、password,如此,我们可以试着添加一个新的用户进去。
localhost/sqli-labs-master/Less-38/?id=1'; insert into users values ('100','less38','HGC')%23
任务二:基于POST型的堆叠注入
1、这是一个表单提交,提交我们构造的sql语句,属于post型
2、我们尝试使用弱口令进行注入,发现密码处能进行注入。我们猜测后台sql查询语句为select * from users where username='$username' and password='$password',其中username可能做了过滤,而password处没有做过滤,那我们尝试在password处进行堆叠注入
3、我们在密码处直接用分号结束上一条sql语句,接着创建less42这个数据表
我们看到后天数据库中已经创建该数据表
4、同样在密码处我们尝试进行其他操作。比如增加一个用户到users表中。username随便输入,password密码处直接输入';insert into users values('110','less42','hgc')#
后台数据库中已经成功插入
5、我们尝试使用自己添加的用户名密码登陆,观察到已经成功登陆。
(如有不足或者侵权的地方,请尽快联系我,我会及时修改或删除,非常感谢)
机遇就像晨光,稍纵即逝。把握好机会,利用好时间,去追求更好的自己!